new style constraints implementation support


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@130 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index 68a94fe..9aa7e74 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -20,7 +20,7 @@
 #define	TOK_number	263
 #define	TOK_number_negative	264
 #define	TOK_typereference	265
-#define	TOK_objectclassreference	266
+#define	TOK_capitalreference	266
 #define	TOK_typefieldreference	267
 #define	TOK_valuefieldreference	268
 #define	TOK_ABSENT	269
@@ -46,68 +46,70 @@
 #define	TOK_DEFINED	289
 #define	TOK_EMBEDDED	290
 #define	TOK_ENCODED	291
-#define	TOK_END	292
-#define	TOK_ENUMERATED	293
-#define	TOK_EXPLICIT	294
-#define	TOK_EXPORTS	295
-#define	TOK_EXTENSIBILITY	296
-#define	TOK_EXTERNAL	297
-#define	TOK_FALSE	298
-#define	TOK_FROM	299
-#define	TOK_GeneralizedTime	300
-#define	TOK_GeneralString	301
-#define	TOK_GraphicString	302
-#define	TOK_IA5String	303
-#define	TOK_IDENTIFIER	304
-#define	TOK_IMPLICIT	305
-#define	TOK_IMPLIED	306
-#define	TOK_IMPORTS	307
-#define	TOK_INCLUDES	308
-#define	TOK_INSTANCE	309
-#define	TOK_INTEGER	310
-#define	TOK_ISO646String	311
-#define	TOK_MAX	312
-#define	TOK_MIN	313
-#define	TOK_MINUS_INFINITY	314
-#define	TOK_NULL	315
-#define	TOK_NumericString	316
-#define	TOK_OBJECT	317
-#define	TOK_ObjectDescriptor	318
-#define	TOK_OCTET	319
-#define	TOK_OF	320
-#define	TOK_OPTIONAL	321
-#define	TOK_PATTERN	322
-#define	TOK_PDV	323
-#define	TOK_PLUS_INFINITY	324
-#define	TOK_PRESENT	325
-#define	TOK_PrintableString	326
-#define	TOK_PRIVATE	327
-#define	TOK_REAL	328
-#define	TOK_RELATIVE_OID	329
-#define	TOK_SEQUENCE	330
-#define	TOK_SET	331
-#define	TOK_SIZE	332
-#define	TOK_STRING	333
-#define	TOK_SYNTAX	334
-#define	TOK_T61String	335
-#define	TOK_TAGS	336
-#define	TOK_TeletexString	337
-#define	TOK_TRUE	338
-#define	TOK_TYPE_IDENTIFIER	339
-#define	TOK_UNIQUE	340
-#define	TOK_UNIVERSAL	341
-#define	TOK_UniversalString	342
-#define	TOK_UTCTime	343
-#define	TOK_UTF8String	344
-#define	TOK_VideotexString	345
-#define	TOK_VisibleString	346
-#define	TOK_WITH	347
-#define	TOK_UNION	348
-#define	TOK_INTERSECTION	349
+#define	TOK_ENCODING_CONTROL	292
+#define	TOK_END	293
+#define	TOK_ENUMERATED	294
+#define	TOK_EXPLICIT	295
+#define	TOK_EXPORTS	296
+#define	TOK_EXTENSIBILITY	297
+#define	TOK_EXTERNAL	298
+#define	TOK_FALSE	299
+#define	TOK_FROM	300
+#define	TOK_GeneralizedTime	301
+#define	TOK_GeneralString	302
+#define	TOK_GraphicString	303
+#define	TOK_IA5String	304
+#define	TOK_IDENTIFIER	305
+#define	TOK_IMPLICIT	306
+#define	TOK_IMPLIED	307
+#define	TOK_IMPORTS	308
+#define	TOK_INCLUDES	309
+#define	TOK_INSTANCE	310
+#define	TOK_INSTRUCTIONS	311
+#define	TOK_INTEGER	312
+#define	TOK_ISO646String	313
+#define	TOK_MAX	314
+#define	TOK_MIN	315
+#define	TOK_MINUS_INFINITY	316
+#define	TOK_NULL	317
+#define	TOK_NumericString	318
+#define	TOK_OBJECT	319
+#define	TOK_ObjectDescriptor	320
+#define	TOK_OCTET	321
+#define	TOK_OF	322
+#define	TOK_OPTIONAL	323
+#define	TOK_PATTERN	324
+#define	TOK_PDV	325
+#define	TOK_PLUS_INFINITY	326
+#define	TOK_PRESENT	327
+#define	TOK_PrintableString	328
+#define	TOK_PRIVATE	329
+#define	TOK_REAL	330
+#define	TOK_RELATIVE_OID	331
+#define	TOK_SEQUENCE	332
+#define	TOK_SET	333
+#define	TOK_SIZE	334
+#define	TOK_STRING	335
+#define	TOK_SYNTAX	336
+#define	TOK_T61String	337
+#define	TOK_TAGS	338
+#define	TOK_TeletexString	339
+#define	TOK_TRUE	340
+#define	TOK_TYPE_IDENTIFIER	341
+#define	TOK_UNIQUE	342
+#define	TOK_UNIVERSAL	343
+#define	TOK_UniversalString	344
+#define	TOK_UTCTime	345
+#define	TOK_UTF8String	346
+#define	TOK_VideotexString	347
+#define	TOK_VisibleString	348
+#define	TOK_WITH	349
 #define	TOK_EXCEPT	350
-#define	TOK_TwoDots	351
-#define	TOK_ThreeDots	352
-#define	TOK_tag	353
+#define	TOK_INTERSECTION	351
+#define	TOK_UNION	352
+#define	TOK_TwoDots	353
+#define	TOK_ThreeDots	354
+#define	TOK_tag	355
 
 #line 1 "asn1p_y.y"
 
@@ -127,6 +129,7 @@
 int yyerror(const char *msg);
 void asn1p_lexer_hack_push_opaque_state(void);
 void asn1p_lexer_hack_enable_with_syntax(void);
+void asn1p_lexer_hack_push_encoding_control(void);
 #define	yylineno	asn1p_lineno
 extern int asn1p_lineno;
 
@@ -159,7 +162,7 @@
 	} while(0)
 
 
-#line 57 "asn1p_y.y"
+#line 58 "asn1p_y.y"
 typedef union {
 	asn1p_t			*a_grammar;
 	asn1p_module_flags_e	 a_module_flags;
@@ -202,26 +205,26 @@
 
 
 
-#define	YYFINAL		375
+#define	YYFINAL		381
 #define	YYFLAG		-32768
-#define	YYNTBASE	113
+#define	YYNTBASE	115
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 353 ? yytranslate[x] : 211)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 210)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,   109,     2,     2,     2,     2,     2,     2,   104,
-   105,     2,     2,   107,     2,   110,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,   108,   106,   111,
-     2,     2,     2,   112,     2,     2,     2,     2,     2,     2,
+     2,     2,   111,     2,     2,     2,     2,     2,     2,   106,
+   107,     2,     2,   109,     2,   112,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,   110,   108,   113,
+     2,     2,     2,   114,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,    96,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,    97,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,   102,    94,   103,     2,     2,     2,     2,     2,
+     2,     2,   104,    99,   105,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -243,140 +246,140 @@
     57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
     67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
     77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-    87,    88,    89,    90,    91,    92,    93,    95,    97,    98,
-    99,   100,   101
+    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+    98,   100,   101,   102,   103
 };
 
 #if YYDEBUG != 0
 static const short yyprhs[] = {     0,
      0,     2,     4,     7,    16,    17,    19,    23,    26,    28,
     31,    33,    38,    40,    41,    43,    45,    48,    51,    54,
-    57,    60,    61,    63,    65,    68,    70,    72,    74,    76,
-    78,    80,    84,    87,    89,    92,    97,    99,   103,   105,
-   107,   111,   115,   118,   120,   124,   126,   128,   135,   137,
-   139,   140,   142,   147,   152,   156,   163,   165,   169,   171,
-   175,   179,   181,   185,   187,   189,   191,   195,   201,   202,
-   204,   206,   210,   213,   217,   222,   223,   225,   226,   233,
-   235,   238,   240,   242,   245,   247,   251,   253,   257,   261,
-   263,   265,   267,   272,   274,   278,   280,   284,   288,   290,
-   294,   296,   300,   302,   304,   306,   308,   313,   314,   318,
-   320,   322,   324,   326,   328,   330,   334,   336,   339,   341,
-   343,   345,   347,   350,   353,   355,   357,   360,   363,   365,
-   367,   369,   371,   374,   376,   379,   381,   383,   385,   387,
-   389,   391,   393,   395,   397,   399,   401,   403,   405,   407,
-   412,   417,   422,   427,   432,   434,   439,   440,   442,   444,
-   446,   448,   450,   452,   457,   459,   462,   466,   468,   472,
-   478,   480,   484,   486,   488,   492,   494,   498,   500,   504,
-   506,   510,   515,   517,   519,   521,   524,   527,   531,   533,
-   535,   537,   539,   541,   543,   545,   547,   549,   555,   557,
-   561,   563,   567,   568,   570,   572,   574,   576,   578,   580,
-   584,   589,   591,   595,   598,   602,   604,   608,   609,   611,
-   613,   616,   618,   620,   621,   625,   628,   632,   634,   638,
-   640,   645,   650,   652,   654,   656,   658,   659,   661,   663,
-   666,   669,   671,   673,   675,   677,   679
+    57,    60,    63,    64,    66,    68,    71,    73,    75,    77,
+    79,    81,    82,    86,    88,    92,    95,    97,   100,   105,
+   107,   111,   113,   115,   119,   123,   126,   128,   132,   134,
+   136,   143,   145,   147,   148,   150,   155,   160,   164,   171,
+   173,   177,   179,   183,   187,   189,   193,   195,   197,   199,
+   203,   209,   210,   212,   214,   218,   221,   225,   230,   231,
+   233,   234,   241,   243,   246,   248,   250,   253,   255,   259,
+   261,   265,   269,   271,   273,   275,   280,   282,   286,   288,
+   292,   296,   298,   302,   304,   308,   310,   312,   314,   316,
+   321,   322,   326,   328,   330,   332,   334,   336,   338,   342,
+   344,   347,   349,   351,   353,   355,   358,   361,   363,   365,
+   368,   371,   373,   375,   377,   379,   382,   384,   387,   389,
+   391,   393,   395,   397,   399,   401,   403,   405,   407,   409,
+   411,   413,   415,   420,   425,   430,   435,   440,   442,   447,
+   449,   451,   453,   455,   457,   458,   460,   465,   469,   474,
+   476,   480,   486,   488,   492,   496,   500,   505,   509,   511,
+   515,   519,   523,   527,   529,   531,   533,   536,   539,   543,
+   545,   547,   549,   551,   553,   555,   557,   563,   565,   569,
+   571,   575,   576,   578,   580,   582,   584,   586,   588,   592,
+   597,   599,   603,   606,   610,   612,   616,   617,   619,   621,
+   624,   626,   628,   629,   633,   636,   640,   642,   646,   648,
+   653,   658,   660,   662,   664,   666,   667,   669,   671,   674,
+   677,   679,   681,   683,   685,   687
 };
 
-static const short yyrhs[] = {   114,
-     0,   115,     0,   114,   115,     0,   207,   116,    34,   120,
-     3,    21,   123,    38,     0,     0,   117,     0,   102,   118,
-   103,     0,   102,   103,     0,   119,     0,   118,   119,     0,
-   209,     0,   209,   104,     9,   105,     0,     9,     0,     0,
-   121,     0,   122,     0,   121,   122,     0,    40,    82,     0,
-    51,    82,     0,    20,    82,     0,    42,    52,     0,     0,
-   124,     0,   125,     0,   124,   125,     0,   126,     0,   131,
-     0,   137,     0,   161,     0,   134,     0,   169,     0,    53,
-   127,   106,     0,    53,    45,     0,   128,     0,   127,   128,
-     0,   129,    45,   207,   116,     0,   130,     0,   129,   107,
-   130,     0,   207,     0,   209,     0,    41,   132,   106,     0,
-    41,    17,   106,     0,    41,   106,     0,   133,     0,   132,
-   107,   133,     0,   207,     0,   209,     0,   207,   135,     3,
-   102,   136,   103,     0,   156,     0,   166,     0,     0,   177,
-     0,   207,     3,   205,    85,     0,   207,     3,   205,   153,
-     0,   207,     3,   143,     0,   207,   102,   138,   103,     3,
-   153,     0,   139,     0,   138,   107,   139,     0,   207,     0,
-   207,   108,   209,     0,   166,   108,   209,     0,   141,     0,
-   140,   107,   141,     0,   155,     0,   209,     0,   152,     0,
-   142,   107,   152,     0,    28,   102,   145,   103,   147,     0,
-     0,    86,     0,   146,     0,   145,   107,   146,     0,   159,
-   197,     0,   159,   153,   144,     0,   159,   159,   197,   144,
-     0,     0,   148,     0,     0,    93,    80,   102,   149,   150,
-   103,     0,   151,     0,   150,   151,     0,     4,     0,   159,
-     0,   210,   153,     0,   154,     0,   155,   171,   197,     0,
-   100,     0,   100,   109,   164,     0,   100,   109,   204,     0,
-   168,     0,   169,     0,   170,     0,   207,   102,   140,   103,
-     0,   156,     0,    55,    66,   156,     0,    11,     0,    11,
-   110,   207,     0,    11,   110,   209,     0,   208,     0,   208,
-   110,   157,     0,   158,     0,   157,   110,   158,     0,   160,
-     0,   160,     0,    13,     0,    14,     0,   209,   135,     3,
-   162,     0,     0,   102,   163,   165,     0,     5,     0,     7,
-     0,     6,     0,   204,     0,   164,     0,   209,     0,   207,
-   110,   209,     0,     4,     0,   165,     4,     0,    24,     0,
-    61,     0,    74,     0,   167,     0,    65,    79,     0,    63,
-    50,     0,    75,     0,    43,     0,    36,    69,     0,    26,
-    79,     0,    89,     0,    46,     0,    56,     0,    39,     0,
-    22,    79,     0,   166,     0,   167,   201,     0,    23,     0,
-    47,     0,    48,     0,    49,     0,    57,     0,    62,     0,
-    72,     0,    81,     0,    83,     0,    88,     0,    90,     0,
-    91,     0,    92,     0,    64,     0,    27,   102,   142,   103,
-     0,    76,   102,   142,   103,     0,    77,   102,   142,   103,
-     0,    76,   171,    66,   155,     0,    77,   171,    66,   155,
-     0,    18,     0,    18,    35,    25,   209,     0,     0,   175,
-     0,    94,     0,    95,     0,    96,     0,    97,     0,    98,
-     0,    78,   104,   177,   105,     0,   176,     0,   175,   176,
-     0,   104,   177,   105,     0,   178,     0,   178,   107,   100,
-     0,   178,   107,   100,   107,   178,     0,   100,     0,   100,
-   107,   178,     0,   179,     0,   180,     0,   179,   172,   180,
-     0,   181,     0,   180,   173,   181,     0,   182,     0,   181,
-   174,   182,     0,   185,     0,   185,   183,   185,     0,   184,
-   104,   177,   105,     0,   191,     0,   186,     0,    99,     0,
-    99,   111,     0,   111,    99,     0,   111,    99,   111,     0,
-    78,     0,    45,     0,   204,     0,   209,     0,     6,     0,
-    59,     0,    58,     0,    44,     0,    84,     0,    93,    30,
-   102,   187,   103,     0,   188,     0,   187,   107,   188,     0,
-   100,     0,   209,   171,   189,     0,     0,   190,     0,    71,
-     0,    15,     0,    67,     0,   192,     0,   193,     0,   102,
-   207,   103,     0,   192,   102,   194,   103,     0,   195,     0,
-   194,   107,   195,     0,   112,   196,     0,   112,   110,   196,
-     0,   209,     0,   196,   110,   209,     0,     0,   198,     0,
-    67,     0,    33,   199,     0,   185,     0,   166,     0,     0,
-   102,   200,   165,     0,   102,   103,     0,   102,   202,   103,
-     0,   203,     0,   202,   107,   203,     0,   209,     0,   209,
-   104,   204,   105,     0,   209,   104,   164,   105,     0,   204,
-     0,   100,     0,     9,     0,    10,     0,     0,   206,     0,
-   101,     0,   101,    51,     0,   101,    40,     0,    11,     0,
-    12,     0,    12,     0,     8,     0,   209,     0,   209,   206,
-     0
+static const short yyrhs[] = {   116,
+     0,   117,     0,   116,   117,     0,   206,   118,    34,   122,
+     3,    21,   125,    39,     0,     0,   119,     0,   104,   120,
+   105,     0,   104,   105,     0,   121,     0,   120,   121,     0,
+   208,     0,   208,   106,     9,   107,     0,     9,     0,     0,
+   123,     0,   124,     0,   123,   124,     0,    41,    84,     0,
+    52,    84,     0,    20,    84,     0,    43,    53,     0,    12,
+    57,     0,     0,   126,     0,   127,     0,   126,   127,     0,
+   129,     0,   134,     0,   140,     0,   164,     0,   137,     0,
+     0,    38,    12,   128,     0,   172,     0,    54,   130,   108,
+     0,    54,    46,     0,   131,     0,   130,   131,     0,   132,
+    46,   206,   118,     0,   133,     0,   132,   109,   133,     0,
+   206,     0,   208,     0,    42,   135,   108,     0,    42,    17,
+   108,     0,    42,   108,     0,   136,     0,   135,   109,   136,
+     0,   206,     0,   208,     0,   206,   138,     3,   104,   139,
+   105,     0,   159,     0,   169,     0,     0,   179,     0,   206,
+     3,   204,    87,     0,   206,     3,   204,   156,     0,   206,
+     3,   146,     0,   206,   104,   141,   105,     3,   156,     0,
+   142,     0,   141,   109,   142,     0,   206,     0,   206,   110,
+   208,     0,   169,   110,   208,     0,   144,     0,   143,   109,
+   144,     0,   158,     0,   208,     0,   155,     0,   145,   109,
+   155,     0,    28,   104,   148,   105,   150,     0,     0,    88,
+     0,   149,     0,   148,   109,   149,     0,   162,   196,     0,
+   162,   156,   147,     0,   162,   162,   196,   147,     0,     0,
+   151,     0,     0,    95,    82,   104,   152,   153,   105,     0,
+   154,     0,   153,   154,     0,     4,     0,   162,     0,   209,
+   156,     0,   157,     0,   158,   177,   196,     0,   102,     0,
+   102,   111,   167,     0,   102,   111,   203,     0,   171,     0,
+   172,     0,   173,     0,   206,   104,   143,   105,     0,   159,
+     0,    56,    68,   159,     0,    11,     0,    11,   112,   206,
+     0,    11,   112,   208,     0,   207,     0,   207,   112,   160,
+     0,   161,     0,   160,   112,   161,     0,   163,     0,   163,
+     0,    13,     0,    14,     0,   208,   138,     3,   165,     0,
+     0,   104,   166,   168,     0,     5,     0,     7,     0,     6,
+     0,   203,     0,   167,     0,   208,     0,   206,   112,   208,
+     0,     4,     0,   168,     4,     0,    24,     0,    63,     0,
+    76,     0,   170,     0,    67,    81,     0,    65,    51,     0,
+    77,     0,    44,     0,    36,    71,     0,    26,    81,     0,
+    91,     0,    47,     0,    58,     0,    40,     0,    22,    81,
+     0,   169,     0,   170,   200,     0,    23,     0,    48,     0,
+    49,     0,    50,     0,    59,     0,    64,     0,    74,     0,
+    83,     0,    85,     0,    90,     0,    92,     0,    93,     0,
+    94,     0,    66,     0,    27,   104,   145,   105,     0,    78,
+   104,   145,   105,     0,    79,   104,   145,   105,     0,    78,
+   177,    68,   158,     0,    79,   177,    68,   158,     0,    18,
+     0,    18,    35,    25,   208,     0,    99,     0,   100,     0,
+    97,     0,    98,     0,    96,     0,     0,   178,     0,    80,
+   106,   179,   107,     0,   106,   179,   107,     0,   178,   106,
+   179,   107,     0,   180,     0,   180,   109,   102,     0,   180,
+   109,   102,   109,   180,     0,   181,     0,   180,   174,   181,
+     0,   180,   175,   181,     0,   181,   176,   181,     0,   183,
+   106,   179,   107,     0,   106,   179,   107,     0,   184,     0,
+   184,   182,   184,     0,    61,   182,   184,     0,   184,   182,
+    60,     0,    61,   182,    60,     0,   190,     0,   185,     0,
+   101,     0,   101,   113,     0,   113,   101,     0,   113,   101,
+   113,     0,    80,     0,    46,     0,   203,     0,   208,     0,
+     6,     0,    45,     0,    86,     0,    95,    30,   104,   186,
+   105,     0,   187,     0,   186,   109,   187,     0,   102,     0,
+   208,   177,   188,     0,     0,   189,     0,    73,     0,    15,
+     0,    69,     0,   191,     0,   192,     0,   104,   206,   105,
+     0,   191,   104,   193,   105,     0,   194,     0,   193,   109,
+   194,     0,   114,   195,     0,   114,   112,   195,     0,   208,
+     0,   195,   112,   208,     0,     0,   197,     0,    69,     0,
+    33,   198,     0,   184,     0,   169,     0,     0,   104,   199,
+   168,     0,   104,   105,     0,   104,   201,   105,     0,   202,
+     0,   201,   109,   202,     0,   208,     0,   208,   106,   203,
+   107,     0,   208,   106,   167,   107,     0,   203,     0,   102,
+     0,     9,     0,    10,     0,     0,   205,     0,   103,     0,
+   103,    52,     0,   103,    41,     0,    11,     0,    12,     0,
+    12,     0,     8,     0,   208,     0,   208,   205,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   297,   303,   309,   325,   350,   352,   355,   359,   364,   371,
-   379,   384,   388,   397,   399,   407,   411,   419,   423,   426,
-   429,   437,   439,   448,   452,   478,   482,   491,   498,   511,
-   522,   535,   542,   547,   553,   559,   568,   574,   580,   587,
-   595,   599,   602,   609,   615,   621,   628,   637,   647,   655,
-   663,   665,   677,   689,   696,   712,   722,   732,   742,   747,
-   754,   764,   770,   776,   780,   792,   798,   804,   814,   816,
-   819,   827,   833,   842,   847,   864,   866,   871,   875,   880,
-   885,   891,   895,   920,   927,   932,   940,   949,   958,   969,
-   973,   979,   987,  1011,  1018,  1032,  1041,  1051,  1061,  1069,
-  1090,  1099,  1108,  1109,  1111,  1118,  1130,  1140,  1142,  1147,
-  1151,  1155,  1159,  1162,  1167,  1179,  1195,  1206,  1220,  1222,
-  1223,  1224,  1225,  1226,  1227,  1228,  1229,  1230,  1231,  1232,
-  1238,  1240,  1241,  1244,  1251,  1263,  1265,  1269,  1273,  1274,
-  1275,  1276,  1277,  1281,  1282,  1283,  1284,  1288,  1289,  1292,
-  1299,  1305,  1311,  1319,  1327,  1333,  1349,  1351,  1354,  1354,
-  1355,  1355,  1356,  1358,  1371,  1374,  1379,  1385,  1389,  1396,
-  1405,  1410,  1419,  1421,  1423,  1428,  1430,  1436,  1438,  1443,
-  1450,  1457,  1465,  1468,  1473,  1475,  1476,  1477,  1480,  1484,
-  1489,  1493,  1504,  1508,  1513,  1518,  1523,  1530,  1536,  1540,
-  1545,  1551,  1563,  1565,  1568,  1572,  1575,  1580,  1584,  1592,
-  1607,  1613,  1620,  1633,  1645,  1660,  1664,  1681,  1683,  1686,
-  1690,  1696,  1699,  1701,  1701,  1721,  1726,  1731,  1737,  1743,
-  1751,  1759,  1767,  1774,  1784,  1789,  1819,  1821,  1824,  1829,
-  1833,  1839,  1844,  1850,  1857,  1864,  1869
+   296,   302,   308,   324,   349,   351,   354,   358,   363,   370,
+   378,   383,   387,   396,   398,   406,   410,   418,   422,   425,
+   428,   432,   452,   454,   462,   466,   498,   502,   511,   518,
+   531,   538,   540,   552,   565,   572,   577,   583,   589,   598,
+   604,   610,   617,   625,   629,   632,   639,   645,   651,   658,
+   667,   677,   685,   693,   695,   707,   719,   726,   742,   752,
+   762,   772,   777,   784,   794,   800,   806,   810,   822,   828,
+   834,   844,   846,   849,   857,   863,   872,   877,   894,   896,
+   901,   905,   910,   915,   921,   925,   950,   957,   962,   970,
+   979,   988,   999,  1003,  1009,  1017,  1041,  1048,  1062,  1071,
+  1081,  1091,  1099,  1120,  1129,  1138,  1139,  1141,  1148,  1160,
+  1170,  1172,  1177,  1181,  1185,  1189,  1192,  1197,  1209,  1225,
+  1236,  1250,  1252,  1253,  1254,  1255,  1256,  1257,  1258,  1259,
+  1260,  1261,  1262,  1268,  1270,  1271,  1274,  1281,  1293,  1295,
+  1299,  1303,  1304,  1305,  1306,  1307,  1311,  1312,  1313,  1314,
+  1318,  1319,  1322,  1329,  1335,  1341,  1349,  1357,  1363,  1379,
+  1379,  1380,  1380,  1381,  1383,  1385,  1388,  1402,  1406,  1411,
+  1415,  1421,  1431,  1435,  1438,  1441,  1446,  1455,  1463,  1469,
+  1476,  1484,  1492,  1501,  1504,  1509,  1511,  1512,  1513,  1516,
+  1520,  1525,  1529,  1540,  1545,  1550,  1557,  1563,  1567,  1572,
+  1578,  1590,  1592,  1595,  1599,  1602,  1607,  1611,  1619,  1634,
+  1640,  1647,  1660,  1672,  1687,  1691,  1708,  1710,  1713,  1717,
+  1723,  1726,  1728,  1728,  1748,  1753,  1758,  1764,  1770,  1778,
+  1786,  1794,  1801,  1811,  1816,  1846,  1848,  1851,  1856,  1860,
+  1866,  1871,  1878,  1885,  1892,  1897
 };
 #endif
 
@@ -385,390 +388,384 @@
 
 static const char * const yytname[] = {   "$","error","$undefined.","TOK_PPEQ",
 "TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
-"TOK_number_negative","TOK_typereference","TOK_objectclassreference","TOK_typefieldreference",
+"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
 "TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
 "TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
 "TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
 "TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
-"TOK_EMBEDDED","TOK_ENCODED","TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS",
-"TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime",
-"TOK_GeneralString","TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT",
-"TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INTEGER","TOK_ISO646String",
-"TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString","TOK_OBJECT",
-"TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV",
-"TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE","TOK_REAL",
-"TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX",
-"TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
-"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
-"TOK_VideotexString","TOK_VisibleString","TOK_WITH","'|'","TOK_UNION","'^'",
-"TOK_INTERSECTION","TOK_EXCEPT","TOK_TwoDots","TOK_ThreeDots","TOK_tag","'{'",
-"'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'","ParsedGrammar",
-"ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
+"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
+"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
+"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
+"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
+"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
+"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
+"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
+"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
+"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
+"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
+"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
+"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
+"TOK_tag","'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'",
+"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
 "ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
 "ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
-"ModuleSpecificationBody","ModuleSpecificationElement","ImportsDefinition","ImportsBundleSet",
-"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
-"ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody","DataTypeReference",
-"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
-"ConstructedDataTypeDefinition","ClassDeclaration","optUnique","ClassFieldList",
-"ClassField","optWithSyntax","WithSyntax","@1","WithSyntaxFormat","WithSyntaxFormatToken",
-"DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException","TypeDeclaration",
-"ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
+"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
+"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
+"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
+"DataTypeReference","ParameterArgumentList","ParameterArgumentName","ActualParameterList",
+"ActualParameter","ConstructedDataTypeDefinition","ClassDeclaration","optUnique",
+"ClassFieldList","ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxFormat",
+"WithSyntaxFormatToken","DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException",
+"TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
 "ClassFieldIdentifier","ClassFieldName","ValueDefinition","InlineOrDefinedValue",
-"@2","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
-"BasicType","BasicString","ConstructedType","optConstraints","Union","Intersection",
-"Except","Constraints","SingleConstraint","ConstraintElementSet","ConstraintElement",
-"ConstraintElementUnion","ConstraintElementIntersection","ConstraintElementException",
-"ConstraintSubtypeElement","ConstraintRangeSpec","ConstraintSpec","ConstraintValue",
-"WithComponents","WithComponentsList","WithComponentsElement","optPresenceConstraint",
-"PresenceConstraint","TableConstraint","SimpleTableConstraint","ComponentRelationConstraint",
-"AtNotationList","AtNotationElement","ComponentIdList","optMarker","Marker",
-"DefaultValue","@3","UniverationDefinition","UniverationList","UniverationElement",
-"SignedNumber","optTag","Tag","TypeRefName","ObjectClassReference","Identifier",
-"TaggedIdentifier", NULL
+"@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
+"BasicType","BasicString","ConstructedType","Union","Intersection","Except",
+"optConstraints","SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
+"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
+"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
+"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
+"ComponentIdList","optMarker","Marker","DefaultValue","@4","UniverationDefinition",
+"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TypeRefName",
+"ObjectClassReference","Identifier","TaggedIdentifier", NULL
 };
 #endif
 
 static const short yyr1[] = {     0,
-   113,   114,   114,   115,   116,   116,   117,   117,   118,   118,
-   119,   119,   119,   120,   120,   121,   121,   122,   122,   122,
-   122,   123,   123,   124,   124,   125,   125,   125,   125,   125,
-   125,   126,   126,   127,   127,   128,   129,   129,   130,   130,
-   131,   131,   131,   132,   132,   133,   133,   134,   135,   135,
-   136,   136,   137,   137,   137,   137,   138,   138,   139,   139,
-   139,   140,   140,   141,   141,   142,   142,   143,   144,   144,
-   145,   145,   146,   146,   146,   147,   147,   149,   148,   150,
-   150,   151,   151,   152,   152,   153,   154,   154,   154,   155,
-   155,   155,   155,   155,   155,   156,   156,   156,   156,   156,
-   157,   157,   158,   159,   160,   160,   161,   163,   162,   162,
-   162,   162,   162,   162,   164,   164,   165,   165,   166,   166,
-   166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
-   167,   167,   167,   168,   168,   169,   169,   169,   169,   169,
-   169,   169,   169,   169,   169,   169,   169,   169,   169,   170,
-   170,   170,   170,   170,   170,   170,   171,   171,   172,   172,
-   173,   173,   174,   175,   175,   175,   176,   177,   177,   177,
-   177,   177,   178,   179,   179,   180,   180,   181,   181,   182,
-   182,   182,   182,   182,   183,   183,   183,   183,   184,   184,
-   185,   185,   185,   185,   185,   185,   185,   186,   187,   187,
-   188,   188,   189,   189,   190,   190,   190,   191,   191,   192,
-   193,   194,   194,   195,   195,   196,   196,   197,   197,   198,
-   198,   199,   199,   200,   199,   201,   201,   202,   202,   203,
-   203,   203,   203,   203,   204,   204,   205,   205,   206,   206,
-   206,   207,   207,   208,   209,   210,   210
+   115,   116,   116,   117,   118,   118,   119,   119,   120,   120,
+   121,   121,   121,   122,   122,   123,   123,   124,   124,   124,
+   124,   124,   125,   125,   126,   126,   127,   127,   127,   127,
+   127,   128,   127,   127,   129,   129,   130,   130,   131,   132,
+   132,   133,   133,   134,   134,   134,   135,   135,   136,   136,
+   137,   138,   138,   139,   139,   140,   140,   140,   140,   141,
+   141,   142,   142,   142,   143,   143,   144,   144,   145,   145,
+   146,   147,   147,   148,   148,   149,   149,   149,   150,   150,
+   152,   151,   153,   153,   154,   154,   155,   155,   156,   157,
+   157,   157,   158,   158,   158,   158,   158,   158,   159,   159,
+   159,   159,   159,   160,   160,   161,   162,   163,   163,   164,
+   166,   165,   165,   165,   165,   165,   165,   167,   167,   168,
+   168,   169,   169,   169,   169,   169,   169,   169,   169,   169,
+   169,   169,   169,   170,   170,   170,   171,   171,   172,   172,
+   172,   172,   172,   172,   172,   172,   172,   172,   172,   172,
+   172,   172,   173,   173,   173,   173,   173,   173,   173,   174,
+   174,   175,   175,   176,   177,   177,   177,   178,   178,   179,
+   179,   179,   180,   180,   180,   180,   181,   181,   181,   181,
+   181,   181,   181,   181,   181,   182,   182,   182,   182,   183,
+   183,   184,   184,   184,   184,   184,   185,   186,   186,   187,
+   187,   188,   188,   189,   189,   189,   190,   190,   191,   192,
+   193,   193,   194,   194,   195,   195,   196,   196,   197,   197,
+   198,   198,   199,   198,   200,   200,   201,   201,   202,   202,
+   202,   202,   202,   203,   203,   204,   204,   205,   205,   205,
+   206,   206,   207,   208,   209,   209
 };
 
 static const short yyr2[] = {     0,
      1,     1,     2,     8,     0,     1,     3,     2,     1,     2,
      1,     4,     1,     0,     1,     1,     2,     2,     2,     2,
-     2,     0,     1,     1,     2,     1,     1,     1,     1,     1,
-     1,     3,     2,     1,     2,     4,     1,     3,     1,     1,
-     3,     3,     2,     1,     3,     1,     1,     6,     1,     1,
-     0,     1,     4,     4,     3,     6,     1,     3,     1,     3,
-     3,     1,     3,     1,     1,     1,     3,     5,     0,     1,
-     1,     3,     2,     3,     4,     0,     1,     0,     6,     1,
-     2,     1,     1,     2,     1,     3,     1,     3,     3,     1,
-     1,     1,     4,     1,     3,     1,     3,     3,     1,     3,
-     1,     3,     1,     1,     1,     1,     4,     0,     3,     1,
-     1,     1,     1,     1,     1,     3,     1,     2,     1,     1,
-     1,     1,     2,     2,     1,     1,     2,     2,     1,     1,
-     1,     1,     2,     1,     2,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
-     4,     4,     4,     4,     1,     4,     0,     1,     1,     1,
-     1,     1,     1,     4,     1,     2,     3,     1,     3,     5,
-     1,     3,     1,     1,     3,     1,     3,     1,     3,     1,
-     3,     4,     1,     1,     1,     2,     2,     3,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     5,     1,     3,
-     1,     3,     0,     1,     1,     1,     1,     1,     1,     3,
-     4,     1,     3,     2,     3,     1,     3,     0,     1,     1,
-     2,     1,     1,     0,     3,     2,     3,     1,     3,     1,
-     4,     4,     1,     1,     1,     1,     0,     1,     1,     2,
-     2,     1,     1,     1,     1,     1,     2
+     2,     2,     0,     1,     1,     2,     1,     1,     1,     1,
+     1,     0,     3,     1,     3,     2,     1,     2,     4,     1,
+     3,     1,     1,     3,     3,     2,     1,     3,     1,     1,
+     6,     1,     1,     0,     1,     4,     4,     3,     6,     1,
+     3,     1,     3,     3,     1,     3,     1,     1,     1,     3,
+     5,     0,     1,     1,     3,     2,     3,     4,     0,     1,
+     0,     6,     1,     2,     1,     1,     2,     1,     3,     1,
+     3,     3,     1,     1,     1,     4,     1,     3,     1,     3,
+     3,     1,     3,     1,     3,     1,     1,     1,     1,     4,
+     0,     3,     1,     1,     1,     1,     1,     1,     3,     1,
+     2,     1,     1,     1,     1,     2,     2,     1,     1,     2,
+     2,     1,     1,     1,     1,     2,     1,     2,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     4,     4,     4,     4,     4,     1,     4,     1,
+     1,     1,     1,     1,     0,     1,     4,     3,     4,     1,
+     3,     5,     1,     3,     3,     3,     4,     3,     1,     3,
+     3,     3,     3,     1,     1,     1,     2,     2,     3,     1,
+     1,     1,     1,     1,     1,     1,     5,     1,     3,     1,
+     3,     0,     1,     1,     1,     1,     1,     1,     3,     4,
+     1,     3,     2,     3,     1,     3,     0,     1,     1,     2,
+     1,     1,     0,     3,     2,     3,     1,     3,     1,     4,
+     4,     1,     1,     1,     1,     0,     1,     1,     2,     2,
+     1,     1,     1,     1,     1,     2
 };
 
 static const short yydefact[] = {     0,
-   242,   243,     1,     2,     5,     3,     0,     0,     6,   245,
+   241,   242,     1,     2,     5,     3,     0,     0,     6,   244,
     13,     8,     0,     9,    11,    14,     7,    10,     0,     0,
-     0,     0,     0,     0,    15,    16,     0,    20,    18,    21,
-    19,     0,    17,    12,    22,   136,     0,   137,   138,   139,
-     0,   140,   141,   149,   142,   143,   144,   145,   146,   147,
-   148,     0,    23,    24,    26,    27,    30,    28,    29,    31,
-     0,     0,     0,    43,     0,    44,    46,    47,    33,     0,
-    34,     0,    37,    39,    40,     4,    25,   237,    96,   244,
-     0,   119,     0,     0,   132,   126,   130,   131,   120,     0,
-     0,   121,   125,   129,     0,     0,    49,    50,   122,    99,
-     0,    42,    41,     0,    32,    35,     0,     0,     0,   239,
-    55,     0,   238,     0,   133,   128,   127,   124,   123,     0,
-    57,     0,    59,     0,     0,     0,    45,     5,    38,     0,
-   241,   240,    96,   244,   155,     0,     0,   157,   157,    53,
-    54,   157,    94,   134,   122,    90,    91,    92,     0,    97,
-    98,     0,     0,     0,     0,    51,   105,   106,   100,   101,
-   103,   110,   112,   111,   235,   236,   108,   107,   114,   113,
-     0,   115,    36,     0,    71,   218,   104,     0,     0,     0,
-     0,     0,     0,     0,   158,   165,     0,     0,   218,     0,
-   135,     0,     0,    58,    61,    60,   193,   196,   190,   195,
-   194,   189,   197,     0,   171,     0,     0,    52,   168,   173,
-   174,   176,   178,     0,   180,   184,   183,   208,   209,   191,
-   192,     0,     0,     0,    76,     0,     0,   220,    69,   218,
-    73,   219,     0,    87,     0,    66,    85,   246,     0,    95,
-     0,     0,     0,     0,   166,     0,     0,    86,   234,   226,
-     0,   228,   233,   230,     0,    62,    64,    65,    56,     0,
-     0,     0,    48,     0,   159,   160,     0,   161,   162,     0,
-   163,     0,     0,   185,     0,     0,     0,   102,   117,   109,
-   116,     0,    68,    77,    72,   224,   223,   222,   221,    70,
-    74,    69,   156,     0,   150,     0,   247,    84,     0,   151,
-   167,   153,   152,   154,   227,     0,     0,    93,     0,     0,
-   172,   210,   169,   175,   177,   179,     0,   186,   187,   181,
-     0,     0,   212,   118,     0,     0,    75,    88,    89,    67,
-   164,   229,     0,     0,    63,   201,     0,   199,   157,     0,
-   182,   188,     0,   214,   216,   211,     0,    78,   225,   232,
-   231,   198,     0,   203,   170,   215,     0,   213,     0,   200,
-   206,   207,   205,   202,   204,   217,    82,     0,    80,    83,
-    79,    81,     0,     0,     0
+     0,     0,     0,     0,     0,    15,    16,     0,    22,    20,
+    18,    21,    19,     0,    17,    12,    23,   139,     0,     0,
+   140,   141,   142,     0,   143,   144,   152,   145,   146,   147,
+   148,   149,   150,   151,     0,    24,    25,    27,    28,    31,
+    29,    30,    34,     0,     0,    32,     0,    46,     0,    47,
+    49,    50,    36,     0,    37,     0,    40,    42,    43,     4,
+    26,   236,    99,   243,     0,   122,     0,     0,   135,   129,
+   133,   134,   123,     0,     0,   124,   128,   132,     0,     0,
+    52,    53,   125,   102,     0,    33,    45,    44,     0,    35,
+    38,     0,     0,     0,   238,    58,     0,   237,     0,   136,
+   131,   130,   127,   126,     0,    60,     0,    62,     0,     0,
+     0,    48,     5,    41,     0,   240,   239,    99,   243,   158,
+     0,     0,   165,   165,    56,    57,   165,    97,   137,   125,
+    93,    94,    95,     0,   100,   101,     0,     0,     0,     0,
+    54,   108,   109,   103,   104,   106,   113,   115,   114,   234,
+   235,   111,   110,   117,   116,     0,   118,    39,     0,    74,
+   217,   107,     0,     0,     0,     0,     0,     0,     0,   166,
+     0,     0,   217,     0,   138,     0,     0,    61,    64,    63,
+   194,   195,   191,     0,   190,   196,     0,     0,     0,     0,
+    55,   170,   173,     0,   179,   185,   184,   207,   208,   192,
+   193,     0,     0,     0,    79,     0,     0,   219,    72,   217,
+    76,   218,     0,    90,     0,    69,    88,   245,     0,    98,
+     0,     0,     0,     0,     0,     0,     0,    89,   233,   225,
+     0,   227,   232,   229,     0,    65,    67,    68,    59,   186,
+     0,     0,     0,     0,     0,    51,   162,   163,   160,   161,
+     0,     0,     0,   164,     0,     0,     0,     0,   105,   120,
+   112,   119,     0,    71,    80,    75,   223,   222,   221,   220,
+    73,    77,    72,   159,     0,   153,     0,   246,    87,     0,
+   154,   168,   156,     0,   155,   157,   226,     0,     0,    96,
+     0,   187,   188,   183,   181,     0,   209,   178,   171,   174,
+   175,   176,     0,   182,   180,     0,     0,   211,   121,     0,
+     0,    78,    91,    92,    70,   167,   169,   228,     0,     0,
+    66,   189,   200,     0,   198,   165,     0,   177,     0,   213,
+   215,   210,     0,    81,   224,   231,   230,   197,     0,   202,
+   172,   214,     0,   212,     0,   199,   205,   206,   204,   201,
+   203,   216,    85,     0,    83,    86,    82,    84,     0,     0,
+     0
 };
 
-static const short yydefgoto[] = {   373,
-     3,     4,     8,     9,    13,    14,    24,    25,    26,    52,
-    53,    54,    55,    70,    71,    72,    73,    56,    65,    66,
-    57,    96,   207,    58,   120,   121,   255,   256,   235,   111,
-   291,   174,   175,   283,   284,   359,   368,   369,   236,   141,
-   237,   142,   143,   159,   160,   176,   177,    59,   168,   223,
-   169,   280,   144,   145,   146,   147,   148,   184,   267,   270,
-   272,   185,   186,   208,   209,   210,   211,   212,   213,   276,
-   214,   215,   216,   337,   338,   364,   365,   217,   218,   219,
-   322,   323,   344,   231,   232,   289,   326,   191,   251,   252,
-   220,   112,   113,   149,   100,   221,   239
+static const short yydefgoto[] = {   379,
+     3,     4,     8,     9,    13,    14,    25,    26,    27,    55,
+    56,    57,   106,    58,    74,    75,    76,    77,    59,    69,
+    70,    60,   100,   210,    61,   125,   126,   255,   256,   235,
+   116,   292,   179,   180,   284,   285,   365,   374,   375,   236,
+   146,   237,   147,   148,   164,   165,   181,   182,    62,   173,
+   223,   174,   281,   149,   150,   151,   152,   153,   272,   273,
+   275,   189,   190,   211,   212,   213,   262,   214,   215,   216,
+   344,   345,   370,   371,   217,   218,   219,   327,   328,   350,
+   231,   232,   290,   331,   195,   251,   252,   220,   117,   118,
+   154,   104,   221,   239
 };
 
-static const short yypact[] = {    81,
--32768,-32768,    81,-32768,   -45,-32768,    23,    70,-32768,-32768,
--32768,-32768,    47,-32768,    31,   190,-32768,-32768,   132,    61,
-    69,   108,    86,   176,   190,-32768,    76,-32768,-32768,-32768,
--32768,   166,-32768,-32768,   442,-32768,    32,-32768,-32768,-32768,
-   121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   168,   442,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   179,   732,   103,-32768,    52,-32768,-32768,-32768,-32768,    39,
--32768,    16,-32768,-32768,-32768,-32768,-32768,   -11,   111,-32768,
-   150,-32768,   152,   142,-32768,-32768,-32768,-32768,-32768,   184,
-   159,-32768,-32768,-32768,   748,   240,-32768,-32768,-32768,   135,
-   243,-32768,-32768,   141,-32768,-32768,    81,   141,   145,    60,
--32768,   599,-32768,   141,-32768,-32768,-32768,-32768,-32768,    -1,
--32768,   143,   144,   147,   206,    68,-32768,   -45,-32768,   206,
--32768,-32768,   -42,   148,   221,   161,   198,    40,    53,-32768,
--32768,   -37,-32768,-32768,   163,-32768,-32768,-32768,   164,-32768,
--32768,   264,   748,   261,   261,   155,-32768,-32768,   160,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   162,-32768,-32768,    64,-32768,   524,-32768,   246,    21,   212,
-   169,    21,   155,   208,   171,-32768,    21,   210,     2,    17,
--32768,   383,   674,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   247,   172,    81,   175,-32768,   173,   133,
-   140,   185,-32768,   178,    35,-32768,-32768,   182,-32768,-32768,
--32768,   206,   281,   261,   193,   206,   301,-32768,   202,     2,
--32768,-32768,   261,   181,    66,-32768,-32768,   191,   674,-32768,
-   155,    71,   186,   674,-32768,    89,   674,-32768,-32768,-32768,
-    90,-32768,-32768,   189,    91,-32768,-32768,-32768,-32768,   192,
-   309,   194,-32768,   196,-32768,-32768,   309,-32768,-32768,   309,
--32768,   309,   155,   187,   205,    78,   200,-32768,-32768,   297,
--32768,   225,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   202,-32768,   250,-32768,    21,-32768,-32768,   201,-32768,
--32768,-32768,-32768,-32768,-32768,    56,   250,-32768,   383,    25,
--32768,-32768,   209,   140,   185,-32768,   215,-32768,   211,-32768,
-     6,   101,-32768,-32768,   219,   281,-32768,-32768,-32768,-32768,
--32768,-32768,   223,   224,-32768,-32768,   109,-32768,   -37,   309,
--32768,-32768,   261,   203,-32768,-32768,   200,-32768,   297,-32768,
--32768,-32768,    25,    24,-32768,   203,   261,-32768,   126,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,     9,-32768,-32768,
--32768,-32768,   324,   326,-32768
+static const short yypact[] = {    41,
+-32768,-32768,    41,-32768,   -62,-32768,    10,    54,-32768,-32768,
+-32768,-32768,    20,-32768,   -20,    44,-32768,-32768,    95,    78,
+    72,    83,    45,   112,   187,    44,-32768,    94,-32768,-32768,
+-32768,-32768,-32768,   189,-32768,-32768,   398,-32768,   223,    23,
+-32768,-32768,-32768,    57,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   201,   398,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   194,   696,-32768,   140,-32768,    53,-32768,
+-32768,-32768,-32768,    47,-32768,   -25,-32768,-32768,-32768,-32768,
+-32768,    -8,   138,-32768,   173,-32768,   185,   196,-32768,-32768,
+-32768,-32768,-32768,   209,   188,-32768,-32768,-32768,   713,   265,
+-32768,-32768,-32768,   160,   271,-32768,-32768,-32768,   157,-32768,
+-32768,    41,   157,   174,   108,-32768,   559,-32768,   157,-32768,
+-32768,-32768,-32768,-32768,    90,-32768,   169,   171,   176,   137,
+    71,-32768,   -62,-32768,   137,-32768,-32768,    59,   178,   248,
+   180,   218,    42,    60,-32768,-32768,   -33,-32768,-32768,   183,
+-32768,-32768,-32768,   190,-32768,-32768,   289,   713,   287,   287,
+   133,-32768,-32768,   193,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   203,-32768,-32768,    93,-32768,
+   482,-32768,   272,     9,   170,   200,     9,   133,   231,   202,
+     9,   232,    30,    52,-32768,   337,   636,-32768,-32768,-32768,
+-32768,-32768,-32768,   -69,-32768,-32768,   283,    41,   133,   211,
+-32768,   124,   221,   212,   -69,-32768,-32768,   216,-32768,-32768,
+-32768,   137,   317,   287,   227,   137,   267,-32768,   235,    30,
+-32768,-32768,   287,   213,    98,-32768,-32768,   224,   636,-32768,
+   133,   103,   219,   636,   133,   106,   636,-32768,-32768,-32768,
+   120,-32768,-32768,   222,   122,-32768,-32768,-32768,-32768,   220,
+   228,    84,   233,   226,   229,-32768,-32768,-32768,-32768,-32768,
+   236,   133,   133,-32768,   133,   133,   128,   225,-32768,-32768,
+   331,-32768,   258,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   235,-32768,   234,-32768,     9,-32768,-32768,   239,
+-32768,-32768,-32768,   240,-32768,-32768,-32768,    14,   234,-32768,
+   337,-32768,   237,-32768,-32768,    19,-32768,-32768,   242,-32768,
+-32768,-32768,   247,-32768,-32768,     7,   127,-32768,-32768,   253,
+   317,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   255,   259,
+-32768,-32768,-32768,   142,-32768,   -33,   133,-32768,   287,   256,
+-32768,-32768,   225,-32768,   331,-32768,-32768,-32768,    19,    28,
+   165,   256,   287,-32768,   179,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,    12,-32768,-32768,-32768,-32768,   341,   365,
+-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,   327,   204,-32768,-32768,   318,-32768,-32768,   308,-32768,
--32768,   282,-32768,-32768,   268,-32768,   226,-32768,-32768,   235,
--32768,   279,-32768,-32768,-32768,   195,-32768,    33,  -129,-32768,
-    51,-32768,   123,-32768,-32768,-32768,-32768,   -17,    59,  -156,
--32768,  -185,   -52,-32768,   130,  -173,  -109,-32768,-32768,-32768,
-  -209,    30,   -50,   -43,-32768,    46,-32768,  -137,-32768,-32768,
--32768,-32768,   180,  -159,  -246,-32768,    94,    88,    97,-32768,
--32768,  -206,-32768,-32768,    10,-32768,-32768,-32768,-32768,-32768,
--32768,    26,    27,  -141,-32768,-32768,-32768,-32768,-32768,    65,
-  -118,-32768,   134,     1,-32768,    -7,-32768
+-32768,   364,   241,-32768,-32768,   356,-32768,-32768,   344,-32768,
+-32768,   316,-32768,-32768,-32768,   301,-32768,   263,-32768,-32768,
+   269,-32768,   314,-32768,-32768,-32768,   230,-32768,    69,    62,
+-32768,    96,-32768,   156,-32768,-32768,-32768,-32768,    16,    86,
+  -131,-32768,  -193,   -55,-32768,   172,  -174,   -94,-32768,-32768,
+-32768,  -162,    61,   -53,   -51,-32768,    89,-32768,-32768,-32768,
+-32768,  -142,-32768,  -118,    50,   -17,   184,-32768,  -188,-32768,
+-32768,    32,-32768,-32768,-32768,-32768,-32768,-32768,    55,    49,
+  -121,-32768,-32768,-32768,-32768,-32768,    97,  -123,-32768,   181,
+     1,-32768,    -7,-32768
 };
 
 
-#define	YYLAST		837
+#define	YYLAST		804
 
 
 static const short yytable[] = {    15,
-     5,   188,   230,     5,   189,    15,   257,   170,    97,    97,
-    98,    98,   367,    10,   311,   161,   109,    99,    99,   229,
-   288,   157,   158,   243,    10,   165,   166,    62,    10,    68,
-    10,    11,    10,    75,   227,    61,   259,    67,   361,    10,
-   181,    74,     1,     2,   122,    62,    10,   248,    63,     1,
-     2,    99,   242,    61,    10,    11,     7,   246,   302,  -242,
-   107,   304,    75,    10,   165,   166,   183,   114,   228,   320,
-    74,   253,   162,   163,   164,    10,   165,   166,     1,     2,
-    60,   299,   298,   197,   328,    10,   165,   166,   292,   110,
-   362,     1,     2,   355,   363,   123,    68,   333,    60,   131,
-    75,   152,   122,    16,    67,   153,   151,   128,    74,    99,
-   132,   371,   161,   317,   150,   343,   249,   181,   172,   250,
-   234,   198,   108,   257,   336,    12,   171,   240,    10,   367,
-   181,     1,     2,   274,    19,   200,   201,    64,   157,   158,
-    27,   182,    28,   183,   105,   275,   195,   196,    10,    17,
-    29,     1,     2,   123,   187,   249,   183,   103,   104,    30,
-   197,   203,    10,   165,   166,    69,   225,    31,   295,   167,
-   226,   238,   296,   300,   238,   329,   287,   296,    32,   238,
-    34,    78,   254,    99,   258,   370,    35,   253,   334,    79,
-    80,   303,   305,   308,   370,   296,   306,   309,   198,   199,
-    81,   354,    82,   346,    83,    76,   262,   347,   102,    20,
-   117,   352,   200,   201,    84,   353,   281,    85,   157,   158,
-   114,    86,    79,    80,    87,   293,   265,   266,   115,    21,
-   116,    22,   202,   118,    88,   268,   269,   119,   203,    89,
-    23,    90,   124,    91,   125,   126,   130,   204,   156,  -243,
-   154,   155,    92,    93,   205,   178,   206,    10,   165,   166,
-     1,     2,   179,   180,   190,   192,   193,    94,    10,   222,
-   233,   224,   241,   244,   183,   247,   260,   263,   261,   264,
-    95,   273,   271,   277,   279,   282,   172,   290,   238,   294,
-   301,   110,   307,   310,   171,   313,   312,   318,   254,   172,
-   324,   258,   339,   319,   325,   331,   197,   171,    10,   165,
-   166,   321,   357,   345,   197,   340,    10,   165,   166,   341,
-   348,   342,    81,   374,    82,   375,    83,   350,   351,     6,
-    18,   173,    33,   129,    77,   345,    84,   106,   127,    85,
-   101,   335,   327,    86,   198,   339,    87,   194,   285,   366,
-   372,   278,   198,   199,   330,   349,    88,   315,   200,   201,
-   314,    89,   360,    90,   245,    91,   200,   201,   316,   356,
-   332,   297,   358,     0,    92,    93,     0,     0,     0,     0,
-     0,     0,     0,     0,   203,     0,   202,     0,     0,    94,
-    10,     0,   203,   133,   134,     0,     0,     0,     0,     0,
-   135,   204,   286,     0,    81,    36,    82,     0,    83,   136,
-   206,     0,     0,     0,     0,     0,     0,     0,    84,     0,
-     0,    85,     0,     0,     0,    86,     0,     0,    87,    38,
-    39,    40,     0,     0,     0,     0,     0,   137,    88,    42,
-     0,     0,     0,    89,    43,    90,    44,    91,     0,    10,
-     0,     0,     1,     2,    45,     0,    92,    93,   138,   139,
-     0,     0,     0,    46,    36,    47,     0,     0,     0,     0,
-    48,    94,    49,    50,    51,     0,     0,     0,     0,     0,
-     0,     0,    37,     0,     0,     0,     0,     0,    38,    39,
-    40,     0,     0,     0,    41,     0,     0,     0,    42,     0,
-     0,     0,     0,    43,     0,    44,     0,     0,     0,     0,
-     0,     0,     0,    45,     0,     0,     0,     0,     0,     0,
-     0,     0,    46,     0,    47,     0,     0,     0,     0,    48,
-     0,    49,    50,    51,   133,   134,   157,   158,     0,     0,
-     0,   135,     0,     0,     0,    81,    36,    82,     0,    83,
-   136,     0,     0,     0,     0,     0,   227,     0,     0,    84,
-     0,     0,    85,     0,     0,     0,    86,     0,     0,    87,
-    38,    39,    40,     0,     0,     0,     0,     0,   137,    88,
-    42,     0,     0,     0,    89,    43,    90,    44,    91,     0,
-   228,     0,     0,     0,     0,    45,     0,    92,    93,   138,
-   139,     0,     0,     0,    46,     0,    47,     0,     0,   133,
-   134,    48,    94,    49,    50,    51,   135,     0,     0,     0,
-    81,    36,    82,     0,    83,   136,     0,     0,     0,     0,
-     0,     0,     0,     0,    84,     0,     0,    85,     0,     0,
-     0,    86,     0,     0,    87,    38,    39,    40,     0,     0,
-     0,     0,     0,   137,    88,    42,     0,     0,     0,    89,
-    43,    90,    44,    91,     0,     0,     0,     0,     0,     0,
-    45,     0,    92,    93,   138,   139,     0,     0,     0,    46,
-     0,    47,     0,   140,   133,   134,    48,    94,    49,    50,
-    51,   135,     0,     0,     0,    81,    36,    82,     0,    83,
-   136,     0,     0,     0,     0,     0,     0,     0,     0,    84,
-     0,     0,    85,     0,     0,     0,    86,     0,     0,    87,
-    38,    39,    40,     0,     0,     0,     0,     0,   137,    88,
-    42,     0,     0,     0,    89,    43,    90,    44,    91,     0,
-     0,     0,    79,    80,     0,    45,     0,    92,    93,   138,
-   139,     0,     0,    81,    46,    82,    47,    83,     1,     2,
-     0,    48,    94,    49,    50,    51,     0,    84,     0,    81,
-    85,    82,     0,    83,    86,     0,     0,    87,     0,     0,
-     0,     0,     0,    84,     0,     0,    85,    88,     0,     0,
-    86,     0,    89,    87,    90,     0,    91,     0,     0,     0,
-     0,     0,     0,    88,     0,    92,    93,     0,    89,     0,
-    90,     0,    91,     0,     0,     0,     0,     0,     0,     0,
-    94,    92,    93,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    94
+     5,   192,   257,     5,   193,    15,   230,   175,   101,   101,
+   102,   102,   103,   103,    10,   373,    10,    10,    11,   114,
+   112,    10,   170,   171,   162,   163,    10,    10,    11,    65,
+    10,   260,    72,     1,     2,   166,    79,    64,   289,    67,
+    71,     7,   367,   261,    78,   127,   186,   103,    65,   229,
+   303,     1,     2,   306,    10,    20,    64,     1,     2,    10,
+   170,   171,   227,    21,    10,   259,    79,     1,     2,   243,
+   253,   248,   188,   315,    78,   167,   168,   169,    10,   170,
+   171,     1,     2,   113,    22,    19,    23,    16,   325,   201,
+   265,    10,   170,   171,   115,    24,   368,    32,   228,   128,
+   369,    72,    73,    28,   127,    79,   103,   299,   293,    71,
+   234,   156,   133,    78,    12,   249,   377,   257,   349,   155,
+   343,   186,   300,   177,    17,    63,   304,   166,   202,   240,
+    68,   176,   333,   201,    29,    10,   170,   171,   201,   186,
+    10,   170,   171,   314,    63,   187,   339,   188,   136,   162,
+   163,   199,   200,   249,   110,    30,   250,   323,   128,   137,
+   108,   109,  -241,   191,    10,   188,    31,     1,     2,   206,
+   119,   334,   202,   288,   172,   103,   238,   202,   203,   238,
+    83,    84,   373,   238,   253,   340,   254,   324,   258,    34,
+   376,   162,   163,   204,   157,    33,    82,   225,   158,   376,
+    36,   226,   296,   360,    83,    84,   297,   301,   264,    37,
+   305,   297,   205,   206,   297,    85,   282,    86,   206,    87,
+   267,   268,   269,   270,   307,   294,   310,   207,   308,    88,
+   311,   352,   271,    89,    66,   353,   208,    90,   209,    80,
+    91,    10,   170,   171,     1,     2,   358,   107,   242,   119,
+   359,    92,   246,   120,   320,   321,    93,   322,    94,   123,
+    95,   267,   268,   269,   270,   121,   122,   129,   124,    96,
+    97,   130,   201,   131,    10,   170,   171,   135,   159,   161,
+   160,  -242,   183,   184,    98,   185,   194,   177,    85,   238,
+    86,   197,    87,   196,    10,   176,   233,    99,   244,   247,
+   254,   177,    88,   258,   222,   241,    89,   245,   346,   176,
+    90,   202,   263,    91,   224,   266,   274,   276,   351,   278,
+   280,   283,   291,   295,    92,   302,   115,   309,   313,    93,
+   317,    94,   312,    95,   329,   318,   316,   319,   326,   330,
+   380,   351,    96,    97,    10,   336,   337,   138,   139,   342,
+   347,   346,   206,   348,   140,   372,   354,    98,    85,    38,
+    86,   356,    87,   141,   381,   357,     6,   363,    18,    35,
+   287,    81,    88,   178,   111,   134,    89,   132,   105,   341,
+    90,   286,   335,    91,    41,    42,    43,   198,   332,   378,
+   366,   355,   142,   279,    92,    45,   361,   362,   277,    93,
+    46,    94,    47,    95,   338,    10,     0,   364,     1,     2,
+    48,     0,    96,    97,   143,   144,     0,     0,   298,    49,
+    38,    50,     0,     0,     0,     0,    51,    98,    52,    53,
+    54,     0,     0,     0,     0,    39,     0,     0,     0,    40,
+     0,     0,     0,     0,     0,    41,    42,    43,     0,     0,
+     0,    44,     0,     0,     0,     0,    45,     0,     0,     0,
+     0,    46,     0,    47,     0,     0,     0,     0,     0,     0,
+     0,    48,     0,     0,     0,     0,     0,     0,     0,     0,
+    49,     0,    50,     0,     0,     0,     0,    51,     0,    52,
+    53,    54,   138,   139,   162,   163,     0,     0,     0,   140,
+     0,     0,     0,    85,    38,    86,     0,    87,   141,     0,
+     0,     0,     0,     0,   227,     0,     0,    88,     0,     0,
+     0,    89,     0,     0,     0,    90,     0,     0,    91,    41,
+    42,    43,     0,     0,     0,     0,     0,   142,     0,    92,
+    45,     0,     0,     0,    93,    46,    94,    47,    95,     0,
+   228,     0,     0,     0,     0,    48,     0,    96,    97,   143,
+   144,     0,     0,     0,    49,     0,    50,     0,     0,   138,
+   139,    51,    98,    52,    53,    54,   140,     0,     0,     0,
+    85,    38,    86,     0,    87,   141,     0,     0,     0,     0,
+     0,     0,     0,     0,    88,     0,     0,     0,    89,     0,
+     0,     0,    90,     0,     0,    91,    41,    42,    43,     0,
+     0,     0,     0,     0,   142,     0,    92,    45,     0,     0,
+     0,    93,    46,    94,    47,    95,     0,     0,     0,     0,
+     0,     0,    48,     0,    96,    97,   143,   144,     0,     0,
+     0,    49,     0,    50,     0,   145,   138,   139,    51,    98,
+    52,    53,    54,   140,     0,     0,     0,    85,    38,    86,
+     0,    87,   141,     0,     0,     0,     0,     0,     0,     0,
+     0,    88,     0,     0,     0,    89,     0,     0,     0,    90,
+     0,     0,    91,    41,    42,    43,     0,     0,     0,     0,
+     0,   142,     0,    92,    45,     0,     0,     0,    93,    46,
+    94,    47,    95,     0,     0,     0,    83,    84,     0,    48,
+     0,    96,    97,   143,   144,     0,     0,    85,    49,    86,
+    50,    87,     0,     1,     2,    51,    98,    52,    53,    54,
+     0,    88,     0,     0,    85,    89,    86,     0,    87,    90,
+     0,     0,    91,     0,     0,     0,     0,     0,    88,     0,
+     0,     0,    89,    92,     0,     0,    90,     0,    93,    91,
+    94,     0,    95,     0,     0,     0,     0,     0,     0,     0,
+    92,    96,    97,     0,     0,    93,     0,    94,     0,    95,
+     0,     0,     0,     0,     0,     0,    98,     0,    96,    97,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    98
 };
 
 static const short yycheck[] = {     7,
-     0,   139,   176,     3,   142,    13,   192,   126,    61,    62,
-    61,    62,     4,     8,   261,   125,    28,    61,    62,   176,
-   227,    13,    14,   183,     8,     9,    10,    35,     8,    37,
-     8,     9,     8,    41,    33,    35,   193,    37,    15,     8,
-    78,    41,    11,    12,    95,    53,     8,   189,    17,    11,
-    12,    95,   182,    53,     8,     9,   102,   187,   244,   102,
-    45,   247,    70,     8,     9,    10,   104,   110,    67,   276,
-    70,   190,     5,     6,     7,     8,     9,    10,    11,    12,
-    35,   241,   239,     6,   294,     8,     9,    10,   230,   101,
-    67,    11,    12,   340,    71,    95,   104,   307,    53,    40,
-   108,   103,   153,    34,   104,   107,   114,   107,   108,   153,
-    51,   103,   222,   273,   114,   110,   100,    78,   126,   103,
-   100,    44,   107,   309,   100,   103,   126,   180,     8,     4,
-    78,    11,    12,    99,   104,    58,    59,   106,    13,    14,
-     9,   102,    82,   104,   106,   111,   154,   155,     8,   103,
-    82,    11,    12,   153,   102,   100,   104,   106,   107,    52,
-     6,    84,     8,     9,    10,    45,   103,    82,   103,   102,
-   107,   179,   107,   103,   182,   294,   227,   107,     3,   187,
-   105,     3,   190,   227,   192,   359,    21,   306,   307,    11,
-    12,   103,   103,   103,   368,   107,   107,   107,    44,    45,
-    22,   339,    24,   103,    26,    38,   206,   107,   106,    20,
-    69,   103,    58,    59,    36,   107,   224,    39,    13,    14,
-   110,    43,    11,    12,    46,   233,    94,    95,    79,    40,
-    79,    42,    78,    50,    56,    96,    97,    79,    84,    61,
-    51,    63,     3,    65,   110,     3,   102,    93,   102,   102,
-   108,   108,    74,    75,   100,    35,   102,     8,     9,    10,
-    11,    12,   102,    66,   102,   102,     3,    89,     8,   110,
-    25,   110,   104,    66,   104,    66,    30,   103,   107,   107,
-   102,   104,    98,   102,     4,    93,   294,    86,   296,   109,
-   105,   101,   104,   102,   294,   100,   103,   111,   306,   307,
-     4,   309,   310,    99,    80,   105,     6,   307,     8,     9,
-    10,   112,   110,   321,     6,   107,     8,     9,    10,   105,
-   102,   111,    22,     0,    24,     0,    26,   105,   105,     3,
-    13,   128,    25,   108,    53,   343,    36,    70,   104,    39,
-    62,   309,   292,    43,    44,   353,    46,   153,   226,   357,
-   368,   222,    44,    45,   296,   326,    56,   270,    58,    59,
-   267,    61,   353,    63,   185,    65,    58,    59,   272,   343,
-   306,   238,   347,    -1,    74,    75,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    84,    -1,    78,    -1,    -1,    89,
-     8,    -1,    84,    11,    12,    -1,    -1,    -1,    -1,    -1,
-    18,    93,   102,    -1,    22,    23,    24,    -1,    26,    27,
-   102,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,
-    -1,    39,    -1,    -1,    -1,    43,    -1,    -1,    46,    47,
-    48,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,    57,
-    -1,    -1,    -1,    61,    62,    63,    64,    65,    -1,     8,
-    -1,    -1,    11,    12,    72,    -1,    74,    75,    76,    77,
-    -1,    -1,    -1,    81,    23,    83,    -1,    -1,    -1,    -1,
-    88,    89,    90,    91,    92,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    48,
-    49,    -1,    -1,    -1,    53,    -1,    -1,    -1,    57,    -1,
-    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    81,    -1,    83,    -1,    -1,    -1,    -1,    88,
-    -1,    90,    91,    92,    11,    12,    13,    14,    -1,    -1,
-    -1,    18,    -1,    -1,    -1,    22,    23,    24,    -1,    26,
-    27,    -1,    -1,    -1,    -1,    -1,    33,    -1,    -1,    36,
-    -1,    -1,    39,    -1,    -1,    -1,    43,    -1,    -1,    46,
-    47,    48,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,
-    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,    -1,
-    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
-    77,    -1,    -1,    -1,    81,    -1,    83,    -1,    -1,    11,
-    12,    88,    89,    90,    91,    92,    18,    -1,    -1,    -1,
+     0,   144,   196,     3,   147,    13,   181,   131,    64,    65,
+    64,    65,    64,    65,     8,     4,     8,     8,     9,    28,
+    46,     8,     9,    10,    13,    14,     8,     8,     9,    37,
+     8,   101,    40,    11,    12,   130,    44,    37,   227,    17,
+    40,   104,    15,   113,    44,    99,    80,    99,    56,   181,
+   244,    11,    12,   247,     8,    12,    56,    11,    12,     8,
+     9,    10,    33,    20,     8,   197,    74,    11,    12,   188,
+   194,   193,   106,   262,    74,     5,     6,     7,     8,     9,
+    10,    11,    12,   109,    41,   106,    43,    34,   277,     6,
+   209,     8,     9,    10,   103,    52,    69,    53,    69,    99,
+    73,   109,    46,     9,   158,   113,   158,   239,   230,   109,
+   102,   119,   112,   113,   105,   102,   105,   311,   112,   119,
+   102,    80,   241,   131,   105,    37,   245,   222,    45,   185,
+   108,   131,   295,     6,    57,     8,     9,    10,     6,    80,
+     8,     9,    10,    60,    56,   104,   309,   106,    41,    13,
+    14,   159,   160,   102,   108,    84,   105,   276,   158,    52,
+   108,   109,   104,   104,     8,   106,    84,    11,    12,    86,
+   112,   295,    45,   227,   104,   227,   184,    45,    46,   187,
+    11,    12,     4,   191,   308,   309,   194,    60,   196,     3,
+   365,    13,    14,    61,   105,    84,     3,   105,   109,   374,
+   107,   109,   105,   346,    11,    12,   109,   105,   208,    21,
+   105,   109,    80,    86,   109,    22,   224,    24,    86,    26,
+    97,    98,    99,   100,   105,   233,   105,    95,   109,    36,
+   109,   105,   109,    40,    12,   109,   104,    44,   106,    39,
+    47,     8,     9,    10,    11,    12,   105,   108,   187,   112,
+   109,    58,   191,    81,   272,   273,    63,   275,    65,    51,
+    67,    97,    98,    99,   100,    81,    71,     3,    81,    76,
+    77,   112,     6,     3,     8,     9,    10,   104,   110,   104,
+   110,   104,    35,   104,    91,    68,   104,   295,    22,   297,
+    24,     3,    26,   104,     8,   295,    25,   104,    68,    68,
+   308,   309,    36,   311,   112,   106,    40,   106,   316,   309,
+    44,    45,    30,    47,   112,   105,    96,   106,   326,   104,
+     4,    95,    88,   111,    58,   107,   103,   106,   101,    63,
+   105,    65,   113,    67,     4,   107,   104,   102,   114,    82,
+     0,   349,    76,    77,     8,   107,   107,    11,    12,   113,
+   109,   359,    86,   107,    18,   363,   104,    91,    22,    23,
+    24,   107,    26,    27,     0,   107,     3,   112,    13,    26,
+   104,    56,    36,   133,    74,   113,    40,   109,    65,   311,
+    44,   226,   297,    47,    48,    49,    50,   158,   293,   374,
+   359,   331,    56,   222,    58,    59,   347,   349,   215,    63,
+    64,    65,    66,    67,   308,     8,    -1,   353,    11,    12,
+    74,    -1,    76,    77,    78,    79,    -1,    -1,   238,    83,
+    23,    85,    -1,    -1,    -1,    -1,    90,    91,    92,    93,
+    94,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    42,
+    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,
+    -1,    54,    -1,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    83,    -1,    85,    -1,    -1,    -1,    -1,    90,    -1,    92,
+    93,    94,    11,    12,    13,    14,    -1,    -1,    -1,    18,
+    -1,    -1,    -1,    22,    23,    24,    -1,    26,    27,    -1,
+    -1,    -1,    -1,    -1,    33,    -1,    -1,    36,    -1,    -1,
+    -1,    40,    -1,    -1,    -1,    44,    -1,    -1,    47,    48,
+    49,    50,    -1,    -1,    -1,    -1,    -1,    56,    -1,    58,
+    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,    -1,
+    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,    78,
+    79,    -1,    -1,    -1,    83,    -1,    85,    -1,    -1,    11,
+    12,    90,    91,    92,    93,    94,    18,    -1,    -1,    -1,
     22,    23,    24,    -1,    26,    27,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,
-    -1,    43,    -1,    -1,    46,    47,    48,    49,    -1,    -1,
-    -1,    -1,    -1,    55,    56,    57,    -1,    -1,    -1,    61,
-    62,    63,    64,    65,    -1,    -1,    -1,    -1,    -1,    -1,
-    72,    -1,    74,    75,    76,    77,    -1,    -1,    -1,    81,
-    -1,    83,    -1,    85,    11,    12,    88,    89,    90,    91,
-    92,    18,    -1,    -1,    -1,    22,    23,    24,    -1,    26,
-    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,
-    -1,    -1,    39,    -1,    -1,    -1,    43,    -1,    -1,    46,
-    47,    48,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,
-    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,    -1,
-    -1,    -1,    11,    12,    -1,    72,    -1,    74,    75,    76,
-    77,    -1,    -1,    22,    81,    24,    83,    26,    11,    12,
-    -1,    88,    89,    90,    91,    92,    -1,    36,    -1,    22,
-    39,    24,    -1,    26,    43,    -1,    -1,    46,    -1,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,    39,    56,    -1,    -1,
-    43,    -1,    61,    46,    63,    -1,    65,    -1,    -1,    -1,
-    -1,    -1,    -1,    56,    -1,    74,    75,    -1,    61,    -1,
-    63,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    89,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    89
+    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    40,    -1,
+    -1,    -1,    44,    -1,    -1,    47,    48,    49,    50,    -1,
+    -1,    -1,    -1,    -1,    56,    -1,    58,    59,    -1,    -1,
+    -1,    63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,
+    -1,    -1,    74,    -1,    76,    77,    78,    79,    -1,    -1,
+    -1,    83,    -1,    85,    -1,    87,    11,    12,    90,    91,
+    92,    93,    94,    18,    -1,    -1,    -1,    22,    23,    24,
+    -1,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    36,    -1,    -1,    -1,    40,    -1,    -1,    -1,    44,
+    -1,    -1,    47,    48,    49,    50,    -1,    -1,    -1,    -1,
+    -1,    56,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
+    65,    66,    67,    -1,    -1,    -1,    11,    12,    -1,    74,
+    -1,    76,    77,    78,    79,    -1,    -1,    22,    83,    24,
+    85,    26,    -1,    11,    12,    90,    91,    92,    93,    94,
+    -1,    36,    -1,    -1,    22,    40,    24,    -1,    26,    44,
+    -1,    -1,    47,    -1,    -1,    -1,    -1,    -1,    36,    -1,
+    -1,    -1,    40,    58,    -1,    -1,    44,    -1,    63,    47,
+    65,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    58,    76,    77,    -1,    -1,    63,    -1,    65,    -1,    67,
+    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    76,    77,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    91
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/share/bison.simple"
@@ -1314,13 +1311,13 @@
   switch (yyn) {
 
 case 1:
-#line 298 "asn1p_y.y"
+#line 297 "asn1p_y.y"
 {
 		*(void **)param = yyvsp[0].a_grammar;
 	;
     break;}
 case 2:
-#line 304 "asn1p_y.y"
+#line 303 "asn1p_y.y"
 {
 		yyval.a_grammar = asn1p_new();
 		checkmem(yyval.a_grammar);
@@ -1328,14 +1325,14 @@
 	;
     break;}
 case 3:
-#line 309 "asn1p_y.y"
+#line 308 "asn1p_y.y"
 {
 		yyval.a_grammar = yyvsp[-1].a_grammar;
 		TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
 	;
     break;}
 case 4:
-#line 330 "asn1p_y.y"
+#line 329 "asn1p_y.y"
 {
 
 		if(yyvsp[-1].a_module) {
@@ -1352,27 +1349,27 @@
 	;
     break;}
 case 5:
-#line 351 "asn1p_y.y"
+#line 350 "asn1p_y.y"
 { yyval.a_oid = 0; ;
     break;}
 case 6:
-#line 352 "asn1p_y.y"
+#line 351 "asn1p_y.y"
 { yyval.a_oid = yyvsp[0].a_oid; ;
     break;}
 case 7:
-#line 356 "asn1p_y.y"
+#line 355 "asn1p_y.y"
 {
 		yyval.a_oid = yyvsp[-1].a_oid;
 	;
     break;}
 case 8:
-#line 359 "asn1p_y.y"
+#line 358 "asn1p_y.y"
 {
 		yyval.a_oid = 0;
 	;
     break;}
 case 9:
-#line 365 "asn1p_y.y"
+#line 364 "asn1p_y.y"
 {
 		yyval.a_oid = asn1p_oid_new();
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1381,7 +1378,7 @@
 	;
     break;}
 case 10:
-#line 371 "asn1p_y.y"
+#line 370 "asn1p_y.y"
 {
 		yyval.a_oid = yyvsp[-1].a_oid;
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1390,94 +1387,117 @@
 	;
     break;}
 case 11:
-#line 380 "asn1p_y.y"
+#line 379 "asn1p_y.y"
 {					/* iso */
 		yyval.a_oid_arc.name = yyvsp[0].tv_str;
 		yyval.a_oid_arc.number = -1;
 	;
     break;}
 case 12:
-#line 384 "asn1p_y.y"
+#line 383 "asn1p_y.y"
 {		/* iso(1) */
 		yyval.a_oid_arc.name = yyvsp[-3].tv_str;
 		yyval.a_oid_arc.number = yyvsp[-1].a_int;
 	;
     break;}
 case 13:
-#line 388 "asn1p_y.y"
+#line 387 "asn1p_y.y"
 {					/* 1 */
 		yyval.a_oid_arc.name = 0;
 		yyval.a_oid_arc.number = yyvsp[0].a_int;
 	;
     break;}
 case 14:
-#line 398 "asn1p_y.y"
+#line 397 "asn1p_y.y"
 { yyval.a_module_flags = MSF_NOFLAGS; ;
     break;}
 case 15:
-#line 399 "asn1p_y.y"
+#line 398 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	;
     break;}
 case 16:
-#line 408 "asn1p_y.y"
+#line 407 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	;
     break;}
 case 17:
-#line 411 "asn1p_y.y"
+#line 410 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
 	;
     break;}
 case 18:
-#line 420 "asn1p_y.y"
+#line 419 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_EXPLICIT_TAGS;
 	;
     break;}
 case 19:
-#line 423 "asn1p_y.y"
+#line 422 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_IMPLICIT_TAGS;
 	;
     break;}
 case 20:
-#line 426 "asn1p_y.y"
+#line 425 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
 	;
     break;}
 case 21:
-#line 429 "asn1p_y.y"
+#line 428 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
 	;
     break;}
 case 22:
-#line 438 "asn1p_y.y"
-{ yyval.a_module = 0; ;
-    break;}
-case 23:
-#line 439 "asn1p_y.y"
+#line 432 "asn1p_y.y"
 {
-		assert(yyvsp[0].a_module);
-		yyval.a_module = yyvsp[0].a_module;
+		/* X.680Amd1 specifies TAG and XER */
+		if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
+		 	yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
+		} else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
+		 	yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
+		} else {
+			fprintf(stderr,
+				"WARNING: %s INSTRUCTIONS at line %d: "
+				"Unrecognized encoding reference\n",
+				yyvsp[-1].tv_str, yylineno);
+		 	yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
+		}
+		free(yyvsp[-1].tv_str);
 	;
     break;}
+case 23:
+#line 453 "asn1p_y.y"
+{ yyval.a_module = 0; ;
+    break;}
 case 24:
-#line 449 "asn1p_y.y"
+#line 454 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
 case 25:
-#line 452 "asn1p_y.y"
+#line 463 "asn1p_y.y"
+{
+		yyval.a_module = yyvsp[0].a_module;
+	;
+    break;}
+case 26:
+#line 466 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 
+		/* Behave well when one of them is skipped. */
+		if(!(yyvsp[-1].a_module)) {
+			if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
+			break;
+		}
+
 #ifdef	MY_IMPORT
 #error	MY_IMPORT DEFINED ELSEWHERE!
 #endif
@@ -1497,14 +1517,14 @@
 
 	;
     break;}
-case 26:
-#line 479 "asn1p_y.y"
+case 27:
+#line 499 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
-case 27:
-#line 482 "asn1p_y.y"
+case 28:
+#line 502 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1515,27 +1535,7 @@
 		}
 	;
     break;}
-case 28:
-#line 491 "asn1p_y.y"
-{
-		yyval.a_module = asn1p_module_new();
-		checkmem(yyval.a_module);
-		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
-		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
-		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
-	;
-    break;}
 case 29:
-#line 498 "asn1p_y.y"
-{
-		yyval.a_module = asn1p_module_new();
-		checkmem(yyval.a_module);
-		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
-		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
-		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
-	;
-    break;}
-case 30:
 #line 511 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
@@ -1545,8 +1545,43 @@
 		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
 	;
     break;}
+case 30:
+#line 518 "asn1p_y.y"
+{
+		yyval.a_module = asn1p_module_new();
+		checkmem(yyval.a_module);
+		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
+		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
+		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
+	;
+    break;}
 case 31:
-#line 522 "asn1p_y.y"
+#line 531 "asn1p_y.y"
+{
+		yyval.a_module = asn1p_module_new();
+		checkmem(yyval.a_module);
+		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
+		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
+		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
+	;
+    break;}
+case 32:
+#line 539 "asn1p_y.y"
+{ asn1p_lexer_hack_push_encoding_control(); ;
+    break;}
+case 33:
+#line 540 "asn1p_y.y"
+{
+		fprintf(stderr,
+			"WARNING: ENCODING-CONTROL %s "
+			"specification at line %d ignored\n",
+			yyvsp[-1].tv_str, yylineno);
+		free(yyvsp[-1].tv_str);
+		yyval.a_module = 0;
+	;
+    break;}
+case 34:
+#line 552 "asn1p_y.y"
 {
 		return yyerror(
 			"Attempt to redefine a standard basic type, "
@@ -1554,35 +1589,35 @@
 			"to older version of ASN.1 standard");
 	;
     break;}
-case 32:
-#line 536 "asn1p_y.y"
+case 35:
+#line 566 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 	;
     break;}
-case 33:
-#line 542 "asn1p_y.y"
+case 36:
+#line 572 "asn1p_y.y"
 {
 		return yyerror("Empty IMPORTS list");
 	;
     break;}
-case 34:
-#line 548 "asn1p_y.y"
+case 37:
+#line 578 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
 		TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
 	;
     break;}
-case 35:
-#line 553 "asn1p_y.y"
+case 38:
+#line 583 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 		TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
 	;
     break;}
-case 36:
-#line 560 "asn1p_y.y"
+case 39:
+#line 590 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-3].a_xports;
 		yyval.a_xports->from = yyvsp[-1].tv_str;
@@ -1590,23 +1625,23 @@
 		checkmem(yyval.a_xports);
 	;
     break;}
-case 37:
-#line 569 "asn1p_y.y"
+case 40:
+#line 599 "asn1p_y.y"
 {
 		yyval.a_xports = asn1p_xports_new();
 		checkmem(yyval.a_xports);
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 38:
-#line 574 "asn1p_y.y"
+case 41:
+#line 604 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 39:
-#line 581 "asn1p_y.y"
+case 42:
+#line 611 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1614,8 +1649,8 @@
 		yyval.a_expr->expr_type = A1TC_REFERENCE;
 	;
     break;}
-case 40:
-#line 587 "asn1p_y.y"
+case 43:
+#line 617 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1623,43 +1658,43 @@
 		yyval.a_expr->expr_type = A1TC_REFERENCE;
 	;
     break;}
-case 41:
-#line 596 "asn1p_y.y"
+case 44:
+#line 626 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-1].a_xports;
 	;
     break;}
-case 42:
-#line 599 "asn1p_y.y"
+case 45:
+#line 629 "asn1p_y.y"
 {
 		yyval.a_xports = 0;
 	;
     break;}
-case 43:
-#line 602 "asn1p_y.y"
+case 46:
+#line 632 "asn1p_y.y"
 {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		yyval.a_xports = asn1p_xports_new();
 		checkmem(yyval.a_xports);
 	;
     break;}
-case 44:
-#line 610 "asn1p_y.y"
+case 47:
+#line 640 "asn1p_y.y"
 {
 		yyval.a_xports = asn1p_xports_new();
 		assert(yyval.a_xports);
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 45:
-#line 615 "asn1p_y.y"
+case 48:
+#line 645 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 46:
-#line 622 "asn1p_y.y"
+case 49:
+#line 652 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1667,8 +1702,8 @@
 		yyval.a_expr->expr_type = A1TC_EXPORTVAR;
 	;
     break;}
-case 47:
-#line 628 "asn1p_y.y"
+case 50:
+#line 658 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1676,8 +1711,8 @@
 		yyval.a_expr->expr_type = A1TC_EXPORTVAR;
 	;
     break;}
-case 48:
-#line 638 "asn1p_y.y"
+case 51:
+#line 668 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-4].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1686,8 +1721,8 @@
 		// take care of optValueSetBody 
 	;
     break;}
-case 49:
-#line 648 "asn1p_y.y"
+case 52:
+#line 678 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1696,8 +1731,8 @@
 		yyval.a_expr->meta_type = AMT_TYPEREF;
 	;
     break;}
-case 50:
-#line 655 "asn1p_y.y"
+case 53:
+#line 685 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1705,17 +1740,17 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 51:
-#line 664 "asn1p_y.y"
+case 54:
+#line 694 "asn1p_y.y"
 { ;
     break;}
-case 52:
-#line 665 "asn1p_y.y"
+case 55:
+#line 695 "asn1p_y.y"
 {
 	;
     break;}
-case 53:
-#line 681 "asn1p_y.y"
+case 56:
+#line 711 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1725,8 +1760,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 54:
-#line 689 "asn1p_y.y"
+case 57:
+#line 719 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
@@ -1735,8 +1770,8 @@
 		assert(yyval.a_expr->meta_type);
 	;
     break;}
-case 55:
-#line 696 "asn1p_y.y"
+case 58:
+#line 726 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -1744,8 +1779,8 @@
 		assert(yyval.a_expr->meta_type == AMT_OBJECT);
 	;
     break;}
-case 56:
-#line 713 "asn1p_y.y"
+case 59:
+#line 743 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1754,8 +1789,8 @@
 		yyval.a_expr->meta_type = AMT_PARAMTYPE;
 	;
     break;}
-case 57:
-#line 723 "asn1p_y.y"
+case 60:
+#line 753 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_plist = asn1p_paramlist_new(yylineno);
@@ -1766,8 +1801,8 @@
 		if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
 	;
     break;}
-case 58:
-#line 732 "asn1p_y.y"
+case 61:
+#line 762 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_plist = yyvsp[-2].a_plist;
@@ -1777,15 +1812,15 @@
 		if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
 	;
     break;}
-case 59:
-#line 743 "asn1p_y.y"
+case 62:
+#line 773 "asn1p_y.y"
 {
 		yyval.a_parg.governor = NULL;
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	;
     break;}
-case 60:
-#line 747 "asn1p_y.y"
+case 63:
+#line 777 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1794,8 +1829,8 @@
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	;
     break;}
-case 61:
-#line 754 "asn1p_y.y"
+case 64:
+#line 784 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1805,29 +1840,29 @@
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	;
     break;}
-case 62:
-#line 765 "asn1p_y.y"
+case 65:
+#line 795 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 63:
-#line 770 "asn1p_y.y"
+case 66:
+#line 800 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 64:
-#line 777 "asn1p_y.y"
+case 67:
+#line 807 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
-case 65:
-#line 780 "asn1p_y.y"
+case 68:
+#line 810 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1836,23 +1871,23 @@
 		yyval.a_expr->meta_type = AMT_VALUE;
 	;
     break;}
-case 66:
-#line 793 "asn1p_y.y"
+case 69:
+#line 823 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 67:
-#line 798 "asn1p_y.y"
+case 70:
+#line 828 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 68:
-#line 805 "asn1p_y.y"
+case 71:
+#line 835 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		checkmem(yyval.a_expr);
@@ -1861,16 +1896,16 @@
 		assert(yyval.a_expr->meta_type == AMT_OBJECT);
 	;
     break;}
-case 69:
-#line 815 "asn1p_y.y"
+case 72:
+#line 845 "asn1p_y.y"
 { yyval.a_int = 0; ;
     break;}
-case 70:
-#line 816 "asn1p_y.y"
+case 73:
+#line 846 "asn1p_y.y"
 { yyval.a_int = 1; ;
     break;}
-case 71:
-#line 820 "asn1p_y.y"
+case 74:
+#line 850 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1879,15 +1914,15 @@
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 72:
-#line 827 "asn1p_y.y"
+case 75:
+#line 857 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 73:
-#line 834 "asn1p_y.y"
+case 76:
+#line 864 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1897,16 +1932,16 @@
 		yyval.a_expr->marker = yyvsp[0].a_marker;
 	;
     break;}
-case 74:
-#line 842 "asn1p_y.y"
+case 77:
+#line 872 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name;
 		yyval.a_expr->unique = yyvsp[0].a_int;
 	;
     break;}
-case 75:
-#line 847 "asn1p_y.y"
+case 78:
+#line 877 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -1923,48 +1958,48 @@
 		yyval.a_expr->unique = yyvsp[0].a_int;
 	;
     break;}
-case 76:
-#line 865 "asn1p_y.y"
+case 79:
+#line 895 "asn1p_y.y"
 { yyval.a_wsynt = 0; ;
     break;}
-case 77:
-#line 866 "asn1p_y.y"
+case 80:
+#line 896 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[0].a_wsynt;
 	;
     break;}
-case 78:
-#line 873 "asn1p_y.y"
+case 81:
+#line 903 "asn1p_y.y"
 { asn1p_lexer_hack_enable_with_syntax(); ;
     break;}
-case 79:
-#line 875 "asn1p_y.y"
+case 82:
+#line 905 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 	;
     break;}
-case 80:
-#line 881 "asn1p_y.y"
+case 83:
+#line 911 "asn1p_y.y"
 {
 		yyval.a_wsynt = asn1p_wsyntx_new();
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	;
     break;}
-case 81:
-#line 885 "asn1p_y.y"
+case 84:
+#line 915 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	;
     break;}
-case 82:
-#line 892 "asn1p_y.y"
+case 85:
+#line 922 "asn1p_y.y"
 {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 	;
     break;}
-case 83:
-#line 895 "asn1p_y.y"
+case 86:
+#line 925 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -1975,8 +2010,8 @@
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
 	;
     break;}
-case 84:
-#line 921 "asn1p_y.y"
+case 87:
+#line 951 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1984,63 +2019,63 @@
 		yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
 	;
     break;}
-case 85:
-#line 927 "asn1p_y.y"
+case 88:
+#line 957 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
-case 86:
-#line 933 "asn1p_y.y"
+case 89:
+#line 963 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		yyval.a_expr->constraints = yyvsp[-1].a_constr;
 		yyval.a_expr->marker = yyvsp[0].a_marker;
 	;
     break;}
-case 87:
-#line 941 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
-case 88:
-#line 949 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->value = yyvsp[0].a_value;
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
-case 89:
-#line 958 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		yyval.a_expr->value = yyvsp[0].a_value;
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
 case 90:
-#line 970 "asn1p_y.y"
+#line 971 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
+case 91:
+#line 979 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->value = yyvsp[0].a_value;
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
+case 92:
+#line 988 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		yyval.a_expr->value = yyvsp[0].a_value;
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
+case 93:
+#line 1000 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
-case 91:
-#line 973 "asn1p_y.y"
+case 94:
+#line 1003 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2048,16 +2083,16 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 92:
-#line 979 "asn1p_y.y"
+case 95:
+#line 1009 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		checkmem(yyval.a_expr);
 		assert(yyval.a_expr->meta_type);
 	;
     break;}
-case 93:
-#line 987 "asn1p_y.y"
+case 96:
+#line 1017 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = yyvsp[-1].a_expr;
@@ -2073,8 +2108,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 94:
-#line 1011 "asn1p_y.y"
+case 97:
+#line 1041 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2083,8 +2118,8 @@
 		yyval.a_expr->meta_type = AMT_TYPEREF;
 	;
     break;}
-case 95:
-#line 1018 "asn1p_y.y"
+case 98:
+#line 1048 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2093,8 +2128,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 96:
-#line 1033 "asn1p_y.y"
+case 99:
+#line 1063 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2104,8 +2139,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 97:
-#line 1041 "asn1p_y.y"
+case 100:
+#line 1071 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2117,8 +2152,8 @@
 		free(yyvsp[-2].tv_str);
 	;
     break;}
-case 98:
-#line 1051 "asn1p_y.y"
+case 101:
+#line 1081 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2130,8 +2165,8 @@
 		free(yyvsp[-2].tv_str);
 	;
     break;}
-case 99:
-#line 1061 "asn1p_y.y"
+case 102:
+#line 1091 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2141,8 +2176,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 100:
-#line 1069 "asn1p_y.y"
+case 103:
+#line 1099 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[0].a_ref;
@@ -2163,8 +2198,8 @@
 		}
 	;
     break;}
-case 101:
-#line 1091 "asn1p_y.y"
+case 104:
+#line 1121 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2174,8 +2209,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 102:
-#line 1099 "asn1p_y.y"
+case 105:
+#line 1129 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[-2].a_ref;
@@ -2184,22 +2219,22 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 105:
-#line 1113 "asn1p_y.y"
+case 108:
+#line 1143 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_AmpUppercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 106:
-#line 1118 "asn1p_y.y"
+case 109:
+#line 1148 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_Amplowercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 107:
-#line 1131 "asn1p_y.y"
+case 110:
+#line 1161 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == NULL);
@@ -2208,53 +2243,53 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 108:
-#line 1141 "asn1p_y.y"
+case 111:
+#line 1171 "asn1p_y.y"
 { asn1p_lexer_hack_push_opaque_state(); ;
     break;}
-case 109:
-#line 1142 "asn1p_y.y"
+case 112:
+#line 1172 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_UNPARSED;
 	;
     break;}
-case 110:
-#line 1147 "asn1p_y.y"
+case 113:
+#line 1177 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 111:
-#line 1151 "asn1p_y.y"
+case 114:
+#line 1181 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 112:
-#line 1155 "asn1p_y.y"
+case 115:
+#line 1185 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	;
     break;}
-case 113:
-#line 1159 "asn1p_y.y"
+case 116:
+#line 1189 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
-case 114:
-#line 1162 "asn1p_y.y"
+case 117:
+#line 1192 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
-case 115:
-#line 1168 "asn1p_y.y"
+case 118:
+#line 1198 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2267,8 +2302,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 116:
-#line 1179 "asn1p_y.y"
+case 119:
+#line 1209 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2284,8 +2319,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 117:
-#line 1196 "asn1p_y.y"
+case 120:
+#line 1226 "asn1p_y.y"
 {
 		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
 		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
@@ -2297,8 +2332,8 @@
 		free(yyvsp[0].tv_opaque.buf);
 	;
     break;}
-case 118:
-#line 1206 "asn1p_y.y"
+case 121:
+#line 1236 "asn1p_y.y"
 {
 		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
 		char *p = malloc(newsize + 1);
@@ -2312,68 +2347,68 @@
 		yyval.tv_opaque.len = newsize;
 	;
     break;}
-case 119:
-#line 1221 "asn1p_y.y"
+case 122:
+#line 1251 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BOOLEAN; ;
     break;}
-case 120:
-#line 1222 "asn1p_y.y"
+case 123:
+#line 1252 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_NULL; ;
     break;}
-case 121:
-#line 1223 "asn1p_y.y"
+case 124:
+#line 1253 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_REAL; ;
     break;}
-case 122:
-#line 1224 "asn1p_y.y"
+case 125:
+#line 1254 "asn1p_y.y"
 { yyval.a_type = yyvsp[0].a_type; ;
     break;}
-case 123:
-#line 1225 "asn1p_y.y"
+case 126:
+#line 1255 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OCTET_STRING; ;
     break;}
-case 124:
-#line 1226 "asn1p_y.y"
+case 127:
+#line 1256 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
     break;}
-case 125:
-#line 1227 "asn1p_y.y"
+case 128:
+#line 1257 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
     break;}
-case 126:
-#line 1228 "asn1p_y.y"
+case 129:
+#line 1258 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EXTERNAL; ;
     break;}
-case 127:
-#line 1229 "asn1p_y.y"
+case 130:
+#line 1259 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
     break;}
-case 128:
-#line 1230 "asn1p_y.y"
+case 131:
+#line 1260 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
     break;}
-case 129:
-#line 1231 "asn1p_y.y"
+case 132:
+#line 1261 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_UTCTime; ;
     break;}
-case 130:
-#line 1232 "asn1p_y.y"
+case 133:
+#line 1262 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_GeneralizedTime; ;
     break;}
-case 131:
-#line 1239 "asn1p_y.y"
+case 134:
+#line 1269 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_INTEGER; ;
     break;}
-case 132:
-#line 1240 "asn1p_y.y"
+case 135:
+#line 1270 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_ENUMERATED; ;
     break;}
-case 133:
-#line 1241 "asn1p_y.y"
+case 136:
+#line 1271 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BIT_STRING; ;
     break;}
-case 134:
-#line 1245 "asn1p_y.y"
+case 137:
+#line 1275 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2381,8 +2416,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 135:
-#line 1251 "asn1p_y.y"
+case 138:
+#line 1281 "asn1p_y.y"
 {
 		if(yyvsp[0].a_expr) {
 			yyval.a_expr = yyvsp[0].a_expr;
@@ -2394,76 +2429,76 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 136:
-#line 1264 "asn1p_y.y"
+case 139:
+#line 1294 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_BMPString; ;
     break;}
-case 137:
-#line 1265 "asn1p_y.y"
+case 140:
+#line 1295 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GeneralString;
 		return yyerror("GeneralString is not supported");
 	;
     break;}
-case 138:
-#line 1269 "asn1p_y.y"
+case 141:
+#line 1299 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GraphicString;
 		return yyerror("GraphicString is not supported");
 	;
     break;}
-case 139:
-#line 1273 "asn1p_y.y"
+case 142:
+#line 1303 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_IA5String; ;
     break;}
-case 140:
-#line 1274 "asn1p_y.y"
+case 143:
+#line 1304 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ISO646String; ;
     break;}
-case 141:
-#line 1275 "asn1p_y.y"
+case 144:
+#line 1305 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_NumericString; ;
     break;}
-case 142:
-#line 1276 "asn1p_y.y"
+case 145:
+#line 1306 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_PrintableString; ;
     break;}
-case 143:
-#line 1277 "asn1p_y.y"
+case 146:
+#line 1307 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_T61String;
 		return yyerror("T61String not implemented yet");
 	;
     break;}
-case 144:
-#line 1281 "asn1p_y.y"
+case 147:
+#line 1311 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_TeletexString; ;
     break;}
-case 145:
-#line 1282 "asn1p_y.y"
+case 148:
+#line 1312 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UniversalString; ;
     break;}
-case 146:
-#line 1283 "asn1p_y.y"
+case 149:
+#line 1313 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UTF8String; ;
     break;}
-case 147:
-#line 1284 "asn1p_y.y"
+case 150:
+#line 1314 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_VideotexString;
 		return yyerror("VideotexString is no longer supported");
 	;
     break;}
-case 148:
-#line 1288 "asn1p_y.y"
+case 151:
+#line 1318 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_VisibleString; ;
     break;}
-case 149:
-#line 1289 "asn1p_y.y"
+case 152:
+#line 1319 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ObjectDescriptor; ;
     break;}
-case 150:
-#line 1293 "asn1p_y.y"
+case 153:
+#line 1323 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2471,8 +2506,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 151:
-#line 1299 "asn1p_y.y"
+case 154:
+#line 1329 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2480,8 +2515,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 152:
-#line 1305 "asn1p_y.y"
+case 155:
+#line 1335 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2489,8 +2524,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 153:
-#line 1311 "asn1p_y.y"
+case 156:
+#line 1341 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2500,8 +2535,8 @@
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 154:
-#line 1319 "asn1p_y.y"
+case 157:
+#line 1349 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2511,8 +2546,8 @@
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 155:
-#line 1327 "asn1p_y.y"
+case 158:
+#line 1357 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2520,8 +2555,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 156:
-#line 1333 "asn1p_y.y"
+case 159:
+#line 1363 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
@@ -2534,20 +2569,22 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 157:
-#line 1350 "asn1p_y.y"
+case 165:
+#line 1384 "asn1p_y.y"
 { yyval.a_constr = 0; ;
     break;}
-case 158:
-#line 1351 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
+case 166:
+#line 1385 "asn1p_y.y"
+{
+		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
+	;
     break;}
-case 164:
-#line 1359 "asn1p_y.y"
+case 167:
+#line 1388 "asn1p_y.y"
 {
 		/*
 		 * This is a special case, for compatibility purposes.
-		 * It goes without parenthesis.
+		 * It goes without parentheses.
 		 */
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2557,125 +2594,70 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 165:
-#line 1371 "asn1p_y.y"
-{
-		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
-	;
-    break;}
-case 166:
-#line 1374 "asn1p_y.y"
-{
-		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-1].a_constr, yyvsp[0].a_constr);
-	;
-    break;}
-case 167:
-#line 1380 "asn1p_y.y"
+case 168:
+#line 1403 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	;
     break;}
-case 168:
-#line 1386 "asn1p_y.y"
+case 169:
+#line 1406 "asn1p_y.y"
+{
+		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
+	;
+    break;}
+case 170:
+#line 1412 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 169:
-#line 1389 "asn1p_y.y"
+case 171:
+#line 1415 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
 		ct->type = ACT_EL_EXT;
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 170:
-#line 1396 "asn1p_y.y"
+case 172:
+#line 1421 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
 		ct->type = ACT_EL_EXT;
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
 		ct = yyval.a_constr;
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
 	;
     break;}
-case 171:
-#line 1405 "asn1p_y.y"
-{
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = ACT_EL_EXT;
-	;
-    break;}
-case 172:
-#line 1410 "asn1p_y.y"
-{
-		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
-		ct->type = ACT_EL_EXT;
-		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
-	;
-    break;}
 case 173:
-#line 1419 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
+#line 1432 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
     break;}
 case 174:
-#line 1422 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
-    break;}
-case 175:
-#line 1423 "asn1p_y.y"
+#line 1435 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 176:
-#line 1429 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
-    break;}
-case 177:
-#line 1431 "asn1p_y.y"
+case 175:
+#line 1438 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 178:
-#line 1437 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
-    break;}
-case 179:
-#line 1438 "asn1p_y.y"
+case 176:
+#line 1441 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 180:
-#line 1444 "asn1p_y.y"
-{
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = ACT_EL_VALUE;
-		yyval.a_constr->value = yyvsp[0].a_value;
-	;
-    break;}
-case 181:
-#line 1450 "asn1p_y.y"
-{
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = yyvsp[-2].a_value;
-		yyval.a_constr->range_stop = yyvsp[0].a_value;
-	;
-    break;}
-case 182:
-#line 1457 "asn1p_y.y"
+case 177:
+#line 1447 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2685,54 +2667,118 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 183:
-#line 1465 "asn1p_y.y"
+case 178:
+#line 1455 "asn1p_y.y"
 {
-		yyval.a_constr = yyvsp[0].a_constr;
+		int ret;
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = ACT_CA_SET;
+		ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
+		checkmem(ret == 0);
+	;
+    break;}
+case 179:
+#line 1463 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = ACT_EL_VALUE;
+		yyval.a_constr->value = yyvsp[0].a_value;
+	;
+    break;}
+case 180:
+#line 1469 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = yyvsp[-2].a_value;
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
+	;
+    break;}
+case 181:
+#line 1476 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = asn1p_value_fromint(-123);
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
+		yyval.a_constr->range_start->type = ATV_MIN;
+	;
+    break;}
+case 182:
+#line 1484 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = yyvsp[-2].a_value;
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_stop->type = ATV_MAX;
+	;
+    break;}
+case 183:
+#line 1492 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = asn1p_value_fromint(-123);
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_start->type = ATV_MIN;
+		yyval.a_constr->range_stop->type = ATV_MAX;
 	;
     break;}
 case 184:
-#line 1468 "asn1p_y.y"
+#line 1501 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 185:
-#line 1474 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_RANGE; ;
+#line 1504 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
     break;}
 case 186:
-#line 1475 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_RLRANGE; ;
+#line 1510 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_RANGE; ;
     break;}
 case 187:
-#line 1476 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_LLRANGE; ;
+#line 1511 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_RLRANGE; ;
     break;}
 case 188:
-#line 1477 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_ULRANGE; ;
+#line 1512 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_LLRANGE; ;
     break;}
 case 189:
-#line 1481 "asn1p_y.y"
+#line 1513 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_ULRANGE; ;
+    break;}
+case 190:
+#line 1517 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_SIZE;
 	;
     break;}
-case 190:
-#line 1484 "asn1p_y.y"
+case 191:
+#line 1520 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_FROM;
 	;
     break;}
-case 191:
-#line 1490 "asn1p_y.y"
+case 192:
+#line 1526 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
-case 192:
-#line 1493 "asn1p_y.y"
+case 193:
+#line 1529 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2745,73 +2791,57 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 193:
-#line 1504 "asn1p_y.y"
+case 194:
+#line 1540 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	;
     break;}
-case 194:
-#line 1508 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(123);
-		checkmem(yyval.a_value);
-		yyval.a_value->type = ATV_MIN;
-	;
-    break;}
 case 195:
-#line 1513 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(321);
-		checkmem(yyval.a_value);
-		yyval.a_value->type = ATV_MAX;
-	;
-    break;}
-case 196:
-#line 1518 "asn1p_y.y"
+#line 1545 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_FALSE;
 	;
     break;}
-case 197:
-#line 1523 "asn1p_y.y"
+case 196:
+#line 1550 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(1);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_TRUE;
 	;
     break;}
-case 198:
-#line 1531 "asn1p_y.y"
+case 197:
+#line 1558 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
 	;
     break;}
-case 199:
-#line 1537 "asn1p_y.y"
+case 198:
+#line 1564 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 200:
-#line 1540 "asn1p_y.y"
+case 199:
+#line 1567 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 201:
-#line 1546 "asn1p_y.y"
+case 200:
+#line 1573 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
 		yyval.a_constr->type = ACT_EL_EXT;
 	;
     break;}
-case 202:
-#line 1551 "asn1p_y.y"
+case 201:
+#line 1578 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2820,46 +2850,46 @@
 		yyval.a_constr->presence = yyvsp[0].a_pres;
 	;
     break;}
-case 203:
-#line 1564 "asn1p_y.y"
+case 202:
+#line 1591 "asn1p_y.y"
 { yyval.a_pres = ACPRES_DEFAULT; ;
     break;}
-case 204:
-#line 1565 "asn1p_y.y"
+case 203:
+#line 1592 "asn1p_y.y"
 { yyval.a_pres = yyvsp[0].a_pres; ;
     break;}
-case 205:
-#line 1569 "asn1p_y.y"
+case 204:
+#line 1596 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_PRESENT;
 	;
     break;}
-case 206:
-#line 1572 "asn1p_y.y"
+case 205:
+#line 1599 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_ABSENT;
 	;
     break;}
-case 207:
-#line 1575 "asn1p_y.y"
+case 206:
+#line 1602 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_OPTIONAL;
 	;
     break;}
+case 207:
+#line 1608 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
 case 208:
-#line 1581 "asn1p_y.y"
+#line 1611 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 209:
-#line 1584 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
-case 210:
-#line 1593 "asn1p_y.y"
+#line 1620 "asn1p_y.y"
 {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
 		asn1p_constraint_t *ct;
@@ -2873,14 +2903,14 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
 	;
     break;}
-case 211:
-#line 1608 "asn1p_y.y"
+case 210:
+#line 1635 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
-case 212:
-#line 1614 "asn1p_y.y"
+case 211:
+#line 1641 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2888,8 +2918,8 @@
 		yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
 	;
     break;}
-case 213:
-#line 1620 "asn1p_y.y"
+case 212:
+#line 1647 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2899,8 +2929,8 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 214:
-#line 1634 "asn1p_y.y"
+case 213:
+#line 1661 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
 		int ret;
@@ -2913,8 +2943,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 215:
-#line 1645 "asn1p_y.y"
+case 214:
+#line 1672 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
 		int ret;
@@ -2928,14 +2958,14 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 216:
-#line 1661 "asn1p_y.y"
+case 215:
+#line 1688 "asn1p_y.y"
 {
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
-case 217:
-#line 1664 "asn1p_y.y"
+case 216:
+#line 1691 "asn1p_y.y"
 {
 		int l1 = strlen(yyvsp[-2].tv_str);
 		int l3 = strlen(yyvsp[0].tv_str);
@@ -2946,76 +2976,76 @@
 		yyval.tv_str[l1 + 1 + l3] = '\0';
 	;
     break;}
-case 218:
-#line 1682 "asn1p_y.y"
+case 217:
+#line 1709 "asn1p_y.y"
 { yyval.a_marker = EM_NOMARK; ;
     break;}
-case 219:
-#line 1683 "asn1p_y.y"
+case 218:
+#line 1710 "asn1p_y.y"
 { yyval.a_marker = yyvsp[0].a_marker; ;
     break;}
-case 220:
-#line 1687 "asn1p_y.y"
+case 219:
+#line 1714 "asn1p_y.y"
 {
 		yyval.a_marker = EM_OPTIONAL;
 	;
     break;}
-case 221:
-#line 1690 "asn1p_y.y"
+case 220:
+#line 1717 "asn1p_y.y"
 {
 		yyval.a_marker = EM_DEFAULT;
 		/* FIXME: store DefaultValue somewhere */
 	;
     break;}
+case 221:
+#line 1724 "asn1p_y.y"
+{
+	;
+    break;}
 case 222:
-#line 1697 "asn1p_y.y"
+#line 1726 "asn1p_y.y"
 {
 	;
     break;}
 case 223:
-#line 1699 "asn1p_y.y"
-{
-	;
-    break;}
-case 224:
-#line 1701 "asn1p_y.y"
+#line 1728 "asn1p_y.y"
 { asn1p_lexer_hack_push_opaque_state(); ;
     break;}
-case 225:
-#line 1701 "asn1p_y.y"
+case 224:
+#line 1728 "asn1p_y.y"
 {
 	;
     break;}
-case 226:
-#line 1722 "asn1p_y.y"
+case 225:
+#line 1749 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
 	;
     break;}
-case 227:
-#line 1726 "asn1p_y.y"
+case 226:
+#line 1753 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 	;
     break;}
-case 228:
-#line 1732 "asn1p_y.y"
+case 227:
+#line 1759 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 229:
-#line 1737 "asn1p_y.y"
+case 228:
+#line 1764 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 230:
-#line 1744 "asn1p_y.y"
+case 229:
+#line 1771 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3024,8 +3054,19 @@
 		yyval.a_expr->Identifier = yyvsp[0].tv_str;
 	;
     break;}
+case 230:
+#line 1778 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
+		yyval.a_expr->meta_type = AMT_VALUE;
+		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
+		yyval.a_expr->value = yyvsp[-1].a_value;
+	;
+    break;}
 case 231:
-#line 1751 "asn1p_y.y"
+#line 1786 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3036,18 +3077,7 @@
 	;
     break;}
 case 232:
-#line 1759 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
-		yyval.a_expr->meta_type = AMT_VALUE;
-		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
-		yyval.a_expr->value = yyvsp[-1].a_value;
-	;
-    break;}
-case 233:
-#line 1767 "asn1p_y.y"
+#line 1794 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3056,8 +3086,8 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 234:
-#line 1774 "asn1p_y.y"
+case 233:
+#line 1801 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3067,86 +3097,86 @@
 		yyval.a_expr->meta_type = AMT_VALUE;
 	;
     break;}
+case 234:
+#line 1812 "asn1p_y.y"
+{
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	;
+    break;}
 case 235:
-#line 1785 "asn1p_y.y"
+#line 1816 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
 	;
     break;}
 case 236:
-#line 1789 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	;
-    break;}
-case 237:
-#line 1820 "asn1p_y.y"
+#line 1847 "asn1p_y.y"
 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
     break;}
-case 238:
-#line 1821 "asn1p_y.y"
+case 237:
+#line 1848 "asn1p_y.y"
 { yyval.a_tag = yyvsp[0].a_tag; ;
     break;}
-case 239:
-#line 1825 "asn1p_y.y"
+case 238:
+#line 1852 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[0].a_tag;
 		yyval.a_tag.tag_mode = TM_DEFAULT;
 	;
     break;}
-case 240:
-#line 1829 "asn1p_y.y"
+case 239:
+#line 1856 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = TM_IMPLICIT;
 	;
     break;}
-case 241:
-#line 1833 "asn1p_y.y"
+case 240:
+#line 1860 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = TM_EXPLICIT;
 	;
     break;}
+case 241:
+#line 1867 "asn1p_y.y"
+{
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	;
+    break;}
 case 242:
-#line 1840 "asn1p_y.y"
+#line 1871 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 243:
-#line 1844 "asn1p_y.y"
+#line 1879 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 244:
-#line 1851 "asn1p_y.y"
+#line 1886 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 245:
-#line 1858 "asn1p_y.y"
-{
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	;
-    break;}
-case 246:
-#line 1865 "asn1p_y.y"
+#line 1893 "asn1p_y.y"
 {
 		memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
 		yyval.tv_nametag.name = yyvsp[0].tv_str;
 	;
     break;}
-case 247:
-#line 1869 "asn1p_y.y"
+case 246:
+#line 1897 "asn1p_y.y"
 {
 		yyval.tv_nametag.name = yyvsp[-1].tv_str;
 		yyval.tv_nametag.tag = yyvsp[0].a_tag;
@@ -3374,7 +3404,7 @@
     }
   return 1;
 }
-#line 1876 "asn1p_y.y"
+#line 1904 "asn1p_y.y"