XER decoders

diff --git a/tests/50-constraint-OK.asn1.-P b/tests/50-constraint-OK.asn1.-P
index 6f4dac1..2700676 100644
--- a/tests/50-constraint-OK.asn1.-P
+++ b/tests/50-constraint-OK.asn1.-P
@@ -35,6 +35,7 @@
 asn_constr_check_f Int2_constraint;
 ber_type_decoder_f Int2_decode_ber;
 der_type_encoder_f Int2_encode_der;
+xer_type_decoder_f Int2_decode_xer;
 xer_type_encoder_f Int2_encode_xer;
 
 /*** <<< CODE [Int2] >>> ***/
@@ -112,6 +113,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Int2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Int2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Int2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -134,7 +142,7 @@
 	Int2_constraint,
 	Int2_decode_ber,
 	Int2_encode_der,
-	0,				/* Not implemented yet */
+	Int2_decode_xer,
 	Int2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int2_tags,
@@ -165,6 +173,7 @@
 asn_constr_check_f Int3_constraint;
 ber_type_decoder_f Int3_decode_ber;
 der_type_encoder_f Int3_encode_der;
+xer_type_decoder_f Int3_decode_xer;
 xer_type_encoder_f Int3_encode_xer;
 
 /*** <<< CODE [Int3] >>> ***/
@@ -246,6 +255,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Int3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Int3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Int3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -268,7 +284,7 @@
 	Int3_constraint,
 	Int3_decode_ber,
 	Int3_encode_der,
-	0,				/* Not implemented yet */
+	Int3_decode_xer,
 	Int3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int3_tags,
@@ -299,6 +315,7 @@
 asn_constr_check_f Int4_constraint;
 ber_type_decoder_f Int4_decode_ber;
 der_type_encoder_f Int4_encode_der;
+xer_type_decoder_f Int4_decode_xer;
 xer_type_encoder_f Int4_encode_xer;
 
 /*** <<< CODE [Int4] >>> ***/
@@ -380,6 +397,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Int4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Int4_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Int4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -402,7 +426,7 @@
 	Int4_constraint,
 	Int4_decode_ber,
 	Int4_encode_der,
-	0,				/* Not implemented yet */
+	Int4_decode_xer,
 	Int4_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int4_tags,
@@ -433,6 +457,7 @@
 asn_constr_check_f Int5_constraint;
 ber_type_decoder_f Int5_decode_ber;
 der_type_encoder_f Int5_encode_der;
+xer_type_decoder_f Int5_decode_xer;
 xer_type_encoder_f Int5_encode_xer;
 
 /*** <<< CODE [Int5] >>> ***/
@@ -514,6 +539,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Int5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Int5_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Int5_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -536,7 +568,7 @@
 	Int5_constraint,
 	Int5_decode_ber,
 	Int5_encode_der,
-	0,				/* Not implemented yet */
+	Int5_decode_xer,
 	Int5_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int5_tags,
@@ -567,6 +599,7 @@
 asn_constr_check_f ExtensibleExtensions_constraint;
 ber_type_decoder_f ExtensibleExtensions_decode_ber;
 der_type_encoder_f ExtensibleExtensions_encode_der;
+xer_type_decoder_f ExtensibleExtensions_decode_xer;
 xer_type_encoder_f ExtensibleExtensions_encode_xer;
 
 /*** <<< CODE [ExtensibleExtensions] >>> ***/
@@ -648,6 +681,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+ExtensibleExtensions_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	ExtensibleExtensions_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 ExtensibleExtensions_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -670,7 +710,7 @@
 	ExtensibleExtensions_constraint,
 	ExtensibleExtensions_decode_ber,
 	ExtensibleExtensions_encode_der,
-	0,				/* Not implemented yet */
+	ExtensibleExtensions_decode_xer,
 	ExtensibleExtensions_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_ExtensibleExtensions_tags,
@@ -720,6 +760,7 @@
 asn_constr_check_f Str2_constraint;
 ber_type_decoder_f Str2_decode_ber;
 der_type_encoder_f Str2_encode_der;
+xer_type_decoder_f Str2_decode_xer;
 xer_type_encoder_f Str2_encode_xer;
 
 /*** <<< CTABLES [Str2] >>> ***/
@@ -813,6 +854,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Str2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Str2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Str2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -835,7 +883,7 @@
 	Str2_constraint,
 	Str2_decode_ber,
 	Str2_encode_der,
-	0,				/* Not implemented yet */
+	Str2_decode_xer,
 	Str2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str2_tags,
@@ -866,6 +914,7 @@
 asn_constr_check_f Str3_constraint;
 ber_type_decoder_f Str3_decode_ber;
 der_type_encoder_f Str3_encode_der;
+xer_type_decoder_f Str3_decode_xer;
 xer_type_encoder_f Str3_encode_xer;
 
 /*** <<< CTABLES [Str3] >>> ***/
@@ -970,6 +1019,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Str3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Str3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Str3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -992,7 +1048,7 @@
 	Str3_constraint,
 	Str3_decode_ber,
 	Str3_encode_der,
-	0,				/* Not implemented yet */
+	Str3_decode_xer,
 	Str3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str3_tags,
@@ -1023,6 +1079,7 @@
 asn_constr_check_f Str4_constraint;
 ber_type_decoder_f Str4_decode_ber;
 der_type_encoder_f Str4_encode_der;
+xer_type_decoder_f Str4_decode_xer;
 xer_type_encoder_f Str4_encode_xer;
 
 /*** <<< CTABLES [Str4] >>> ***/
@@ -1113,6 +1170,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Str4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Str4_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Str4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1135,7 +1199,7 @@
 	Str4_constraint,
 	Str4_decode_ber,
 	Str4_encode_der,
-	0,				/* Not implemented yet */
+	Str4_decode_xer,
 	Str4_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str4_tags,
@@ -1166,6 +1230,7 @@
 asn_constr_check_f PER_Visible_constraint;
 ber_type_decoder_f PER_Visible_decode_ber;
 der_type_encoder_f PER_Visible_encode_der;
+xer_type_decoder_f PER_Visible_decode_xer;
 xer_type_encoder_f PER_Visible_encode_xer;
 
 /*** <<< CTABLES [PER-Visible] >>> ***/
@@ -1256,6 +1321,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+PER_Visible_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	PER_Visible_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 PER_Visible_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1278,7 +1350,7 @@
 	PER_Visible_constraint,
 	PER_Visible_decode_ber,
 	PER_Visible_encode_der,
-	0,				/* Not implemented yet */
+	PER_Visible_decode_xer,
 	PER_Visible_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_PER_Visible_tags,
@@ -1309,6 +1381,7 @@
 asn_constr_check_f PER_Visible_2_constraint;
 ber_type_decoder_f PER_Visible_2_decode_ber;
 der_type_encoder_f PER_Visible_2_encode_der;
+xer_type_decoder_f PER_Visible_2_decode_xer;
 xer_type_encoder_f PER_Visible_2_encode_xer;
 
 /*** <<< CTABLES [PER-Visible-2] >>> ***/
@@ -1399,6 +1472,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+PER_Visible_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	PER_Visible_2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 PER_Visible_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1421,7 +1501,7 @@
 	PER_Visible_2_constraint,
 	PER_Visible_2_decode_ber,
 	PER_Visible_2_encode_der,
-	0,				/* Not implemented yet */
+	PER_Visible_2_decode_xer,
 	PER_Visible_2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_PER_Visible_2_tags,
@@ -1452,6 +1532,7 @@
 asn_constr_check_f Not_PER_Visible_1_constraint;
 ber_type_decoder_f Not_PER_Visible_1_decode_ber;
 der_type_encoder_f Not_PER_Visible_1_encode_der;
+xer_type_decoder_f Not_PER_Visible_1_decode_xer;
 xer_type_encoder_f Not_PER_Visible_1_encode_xer;
 
 /*** <<< CTABLES [Not-PER-Visible-1] >>> ***/
@@ -1542,6 +1623,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Not_PER_Visible_1_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Not_PER_Visible_1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Not_PER_Visible_1_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1564,7 +1652,7 @@
 	Not_PER_Visible_1_constraint,
 	Not_PER_Visible_1_decode_ber,
 	Not_PER_Visible_1_encode_der,
-	0,				/* Not implemented yet */
+	Not_PER_Visible_1_decode_xer,
 	Not_PER_Visible_1_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_1_tags,
@@ -1595,6 +1683,7 @@
 asn_constr_check_f Not_PER_Visible_2_constraint;
 ber_type_decoder_f Not_PER_Visible_2_decode_ber;
 der_type_encoder_f Not_PER_Visible_2_encode_der;
+xer_type_decoder_f Not_PER_Visible_2_decode_xer;
 xer_type_encoder_f Not_PER_Visible_2_encode_xer;
 
 /*** <<< CTABLES [Not-PER-Visible-2] >>> ***/
@@ -1685,6 +1774,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Not_PER_Visible_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Not_PER_Visible_2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Not_PER_Visible_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1707,7 +1803,7 @@
 	Not_PER_Visible_2_constraint,
 	Not_PER_Visible_2_decode_ber,
 	Not_PER_Visible_2_encode_der,
-	0,				/* Not implemented yet */
+	Not_PER_Visible_2_decode_xer,
 	Not_PER_Visible_2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_2_tags,
@@ -1738,6 +1834,7 @@
 asn_constr_check_f Not_PER_Visible_3_constraint;
 ber_type_decoder_f Not_PER_Visible_3_decode_ber;
 der_type_encoder_f Not_PER_Visible_3_encode_der;
+xer_type_decoder_f Not_PER_Visible_3_decode_xer;
 xer_type_encoder_f Not_PER_Visible_3_encode_xer;
 
 /*** <<< CTABLES [Not-PER-Visible-3] >>> ***/
@@ -1828,6 +1925,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Not_PER_Visible_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Not_PER_Visible_3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Not_PER_Visible_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1850,7 +1954,7 @@
 	Not_PER_Visible_3_constraint,
 	Not_PER_Visible_3_decode_ber,
 	Not_PER_Visible_3_encode_der,
-	0,				/* Not implemented yet */
+	Not_PER_Visible_3_decode_xer,
 	Not_PER_Visible_3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_3_tags,
@@ -1881,6 +1985,7 @@
 asn_constr_check_f SIZE_but_not_FROM_constraint;
 ber_type_decoder_f SIZE_but_not_FROM_decode_ber;
 der_type_encoder_f SIZE_but_not_FROM_encode_der;
+xer_type_decoder_f SIZE_but_not_FROM_decode_xer;
 xer_type_encoder_f SIZE_but_not_FROM_encode_xer;
 
 /*** <<< CTABLES [SIZE-but-not-FROM] >>> ***/
@@ -1974,6 +2079,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+SIZE_but_not_FROM_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	SIZE_but_not_FROM_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 SIZE_but_not_FROM_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -1996,7 +2108,7 @@
 	SIZE_but_not_FROM_constraint,
 	SIZE_but_not_FROM_decode_ber,
 	SIZE_but_not_FROM_encode_der,
-	0,				/* Not implemented yet */
+	SIZE_but_not_FROM_decode_xer,
 	SIZE_but_not_FROM_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_SIZE_but_not_FROM_tags,
@@ -2027,6 +2139,7 @@
 asn_constr_check_f SIZE_and_FROM_constraint;
 ber_type_decoder_f SIZE_and_FROM_decode_ber;
 der_type_encoder_f SIZE_and_FROM_encode_der;
+xer_type_decoder_f SIZE_and_FROM_decode_xer;
 xer_type_encoder_f SIZE_and_FROM_encode_xer;
 
 /*** <<< CTABLES [SIZE-and-FROM] >>> ***/
@@ -2120,6 +2233,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+SIZE_and_FROM_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	SIZE_and_FROM_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 SIZE_and_FROM_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2142,7 +2262,7 @@
 	SIZE_and_FROM_constraint,
 	SIZE_and_FROM_decode_ber,
 	SIZE_and_FROM_encode_der,
-	0,				/* Not implemented yet */
+	SIZE_and_FROM_decode_xer,
 	SIZE_and_FROM_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_SIZE_and_FROM_tags,
@@ -2173,6 +2293,7 @@
 asn_constr_check_f Neither_SIZE_nor_FROM_constraint;
 ber_type_decoder_f Neither_SIZE_nor_FROM_decode_ber;
 der_type_encoder_f Neither_SIZE_nor_FROM_encode_der;
+xer_type_decoder_f Neither_SIZE_nor_FROM_decode_xer;
 xer_type_encoder_f Neither_SIZE_nor_FROM_encode_xer;
 
 /*** <<< CTABLES [Neither-SIZE-nor-FROM] >>> ***/
@@ -2263,6 +2384,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Neither_SIZE_nor_FROM_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Neither_SIZE_nor_FROM_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Neither_SIZE_nor_FROM_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2285,7 +2413,7 @@
 	Neither_SIZE_nor_FROM_constraint,
 	Neither_SIZE_nor_FROM_decode_ber,
 	Neither_SIZE_nor_FROM_encode_der,
-	0,				/* Not implemented yet */
+	Neither_SIZE_nor_FROM_decode_xer,
 	Neither_SIZE_nor_FROM_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Neither_SIZE_nor_FROM_tags,
@@ -2316,6 +2444,7 @@
 asn_constr_check_f Utf8_4_constraint;
 ber_type_decoder_f Utf8_4_decode_ber;
 der_type_encoder_f Utf8_4_encode_der;
+xer_type_decoder_f Utf8_4_decode_xer;
 xer_type_encoder_f Utf8_4_encode_xer;
 
 /*** <<< CTABLES [Utf8-4] >>> ***/
@@ -2400,6 +2529,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Utf8_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Utf8_4_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Utf8_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2422,7 +2558,7 @@
 	Utf8_4_constraint,
 	Utf8_4_decode_ber,
 	Utf8_4_encode_der,
-	0,				/* Not implemented yet */
+	Utf8_4_decode_xer,
 	Utf8_4_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_4_tags,
@@ -2453,6 +2589,7 @@
 asn_constr_check_f Utf8_3_constraint;
 ber_type_decoder_f Utf8_3_decode_ber;
 der_type_encoder_f Utf8_3_encode_der;
+xer_type_decoder_f Utf8_3_decode_xer;
 xer_type_encoder_f Utf8_3_encode_xer;
 
 /*** <<< CTABLES [Utf8-3] >>> ***/
@@ -2565,6 +2702,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Utf8_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Utf8_3_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Utf8_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2587,7 +2731,7 @@
 	Utf8_3_constraint,
 	Utf8_3_decode_ber,
 	Utf8_3_encode_der,
-	0,				/* Not implemented yet */
+	Utf8_3_decode_xer,
 	Utf8_3_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_3_tags,
@@ -2618,6 +2762,7 @@
 asn_constr_check_f Utf8_2_constraint;
 ber_type_decoder_f Utf8_2_decode_ber;
 der_type_encoder_f Utf8_2_encode_der;
+xer_type_decoder_f Utf8_2_decode_xer;
 xer_type_encoder_f Utf8_2_encode_xer;
 
 /*** <<< CODE [Utf8-2] >>> ***/
@@ -2700,6 +2845,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Utf8_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Utf8_2_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Utf8_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2722,7 +2874,7 @@
 	Utf8_2_constraint,
 	Utf8_2_decode_ber,
 	Utf8_2_encode_der,
-	0,				/* Not implemented yet */
+	Utf8_2_decode_xer,
 	Utf8_2_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_2_tags,
@@ -2791,6 +2943,7 @@
 asn_constr_check_f Identifier_constraint;
 ber_type_decoder_f Identifier_decode_ber;
 der_type_encoder_f Identifier_encode_der;
+xer_type_decoder_f Identifier_decode_xer;
 xer_type_encoder_f Identifier_encode_xer;
 
 /*** <<< CTABLES [Identifier] >>> ***/
@@ -2896,6 +3049,13 @@
 	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
 }
 
+asn_dec_rval_t
+Identifier_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, void *bufptr, size_t size) {
+	Identifier_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
 asn_enc_rval_t
 Identifier_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
@@ -2918,7 +3078,7 @@
 	Identifier_constraint,
 	Identifier_decode_ber,
 	Identifier_encode_der,
-	0,				/* Not implemented yet */
+	Identifier_decode_xer,
 	Identifier_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Identifier_tags,