introduce oer constraint code
diff --git a/skeletons/ANY.c b/skeletons/ANY.c
index a21a54d..9c7c561 100644
--- a/skeletons/ANY.c
+++ b/skeletons/ANY.c
@@ -35,6 +35,7 @@
 #endif  /* ASN_DISABLE_OER_SUPPORT */
 	0, /* Use generic outmost tag fetcher */
 	0, 0, 0, 0,
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	&asn_SPC_ANY_specs,
diff --git a/skeletons/BIT_STRING.c b/skeletons/BIT_STRING.c
index f576e5a..4ea94bf 100644
--- a/skeletons/BIT_STRING.c
+++ b/skeletons/BIT_STRING.c
@@ -48,6 +48,7 @@
 	asn_DEF_BIT_STRING_tags,	/* Same as above */
 	sizeof(asn_DEF_BIT_STRING_tags)
 	  / sizeof(asn_DEF_BIT_STRING_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	&asn_SPC_BIT_STRING_specs
diff --git a/skeletons/BMPString.c b/skeletons/BMPString.c
index bb9a6e9..38beddd 100644
--- a/skeletons/BMPString.c
+++ b/skeletons/BMPString.c
@@ -18,7 +18,7 @@
 	offsetof(BMPString_t, _asn_ctx),
 	ASN_OSUBV_U16	/* 16-bits character */
 };
-static asn_per_constraints_t asn_DEF_BMPString_constraints = {
+static asn_per_constraints_t asn_DEF_BMPString_per_constraints = {
 	{ APC_CONSTRAINED, 16, 16, 0, 65535 },
 	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },
 	0, 0
@@ -54,7 +54,8 @@
 	asn_DEF_BMPString_tags,
 	sizeof(asn_DEF_BMPString_tags)
 	  / sizeof(asn_DEF_BMPString_tags[0]),
-	&asn_DEF_BMPString_constraints,
+	0,	/* No OER visible constraints */
+	&asn_DEF_BMPString_per_constraints,
 	0, 0,	/* No members */
 	&asn_SPC_BMPString_specs
 };
diff --git a/skeletons/BOOLEAN.c b/skeletons/BOOLEAN.c
index 1bf79db..060edca 100644
--- a/skeletons/BOOLEAN.c
+++ b/skeletons/BOOLEAN.c
@@ -41,6 +41,7 @@
 	sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
 	asn_DEF_BOOLEAN_tags,	/* Same as above */
 	sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/ENUMERATED.c b/skeletons/ENUMERATED.c
index bde427e..f093575 100644
--- a/skeletons/ENUMERATED.c
+++ b/skeletons/ENUMERATED.c
@@ -43,6 +43,7 @@
 	sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]),
 	asn_DEF_ENUMERATED_tags,	/* Same as above */
 	sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/GeneralString.c b/skeletons/GeneralString.c
index 060d17e..f3d7199 100644
--- a/skeletons/GeneralString.c
+++ b/skeletons/GeneralString.c
@@ -43,6 +43,7 @@
 	asn_DEF_GeneralString_tags,
 	sizeof(asn_DEF_GeneralString_tags)
 	  / sizeof(asn_DEF_GeneralString_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/GeneralizedTime.c b/skeletons/GeneralizedTime.c
index ce70260..bcdd39b 100644
--- a/skeletons/GeneralizedTime.c
+++ b/skeletons/GeneralizedTime.c
@@ -202,6 +202,7 @@
 	asn_DEF_GeneralizedTime_tags,
 	sizeof(asn_DEF_GeneralizedTime_tags)
 	  / sizeof(asn_DEF_GeneralizedTime_tags[0]),
+	0,	/* No OER visible constraints */
 	&asn_DEF_GeneralizedTime_constraints,
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/GraphicString.c b/skeletons/GraphicString.c
index caa0614..1cec7f7 100644
--- a/skeletons/GraphicString.c
+++ b/skeletons/GraphicString.c
@@ -43,6 +43,7 @@
 	asn_DEF_GraphicString_tags,
 	sizeof(asn_DEF_GraphicString_tags)
 	  / sizeof(asn_DEF_GraphicString_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/IA5String.c b/skeletons/IA5String.c
index f767fb2..44784ad 100644
--- a/skeletons/IA5String.c
+++ b/skeletons/IA5String.c
@@ -12,7 +12,7 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),	/* [UNIVERSAL 22] IMPLICIT ...*/
 	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))	/* ... OCTET STRING */
 };
-static asn_per_constraints_t asn_DEF_IA5String_constraints = {
+static asn_per_constraints_t asn_DEF_IA5String_per_constraints = {
 	{ APC_CONSTRAINED, 7, 7, 0, 0x7f },	/* Value */
 	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },	/* Size */
 	0, 0
@@ -48,7 +48,8 @@
 	asn_DEF_IA5String_tags,
 	sizeof(asn_DEF_IA5String_tags)
 	  / sizeof(asn_DEF_IA5String_tags[0]),
-	&asn_DEF_IA5String_constraints,
+	0,	/* No OER visible constraints */
+	&asn_DEF_IA5String_per_constraints,
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c
index b26a81f..1533b47 100644
--- a/skeletons/INTEGER.c
+++ b/skeletons/INTEGER.c
@@ -44,6 +44,7 @@
 	sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
 	asn_DEF_INTEGER_tags,	/* Same as above */
 	sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/INTEGER.h b/skeletons/INTEGER.h
index 0986ec4..86b603b 100644
--- a/skeletons/INTEGER.h
+++ b/skeletons/INTEGER.h
@@ -7,6 +7,7 @@
 
 #include <asn_application.h>
 #include <asn_codecs_prim.h>
+#include <INTEGER_oer.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -41,8 +42,6 @@
 xer_type_encoder_f INTEGER_encode_xer;
 per_type_decoder_f INTEGER_decode_uper;
 per_type_encoder_f INTEGER_encode_uper;
-oer_type_decoder_f INTEGER_decode_oer;
-oer_type_encoder_f INTEGER_encode_oer;
 
 /***********************************
  * Some handy conversion routines. *
diff --git a/skeletons/ISO646String.c b/skeletons/ISO646String.c
index a29a130..5d30c28 100644
--- a/skeletons/ISO646String.c
+++ b/skeletons/ISO646String.c
@@ -12,7 +12,7 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),	/* [UNIVERSAL 26] IMPLICIT ...*/
 	(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))	/* ... OCTET STRING */
 };
-static asn_per_constraints_t asn_DEF_ISO646String_constraints = {
+static asn_per_constraints_t asn_DEF_ISO646String_per_constraints = {
 	{ APC_CONSTRAINED, 7, 7, 0x20, 0x7e },	/* Value */
 	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },	/* Size */
 	0, 0
@@ -48,7 +48,8 @@
 	asn_DEF_ISO646String_tags,
 	sizeof(asn_DEF_ISO646String_tags)
 	  / sizeof(asn_DEF_ISO646String_tags[0]),
-	&asn_DEF_ISO646String_constraints,
+	0,	/* No OER visible constraints */
+	&asn_DEF_ISO646String_per_constraints,
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/skeletons/NULL.c b/skeletons/NULL.c
index d966827..03090d1 100644
--- a/skeletons/NULL.c
+++ b/skeletons/NULL.c
@@ -42,6 +42,7 @@
 	sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
 	asn_DEF_NULL_tags,	/* Same as above */
 	sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/NativeEnumerated.c b/skeletons/NativeEnumerated.c
index c21f87a..3fb91ed 100644
--- a/skeletons/NativeEnumerated.c
+++ b/skeletons/NativeEnumerated.c
@@ -47,6 +47,7 @@
 	sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
 	asn_DEF_NativeEnumerated_tags,	/* Same as above */
 	sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/NativeInteger.c b/skeletons/NativeInteger.c
index 2839dc4..fde6557 100644
--- a/skeletons/NativeInteger.c
+++ b/skeletons/NativeInteger.c
@@ -48,6 +48,7 @@
 	sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
 	asn_DEF_NativeInteger_tags,	/* Same as above */
 	sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/NativeReal.c b/skeletons/NativeReal.c
index 5ecb59a..1118954 100644
--- a/skeletons/NativeReal.c
+++ b/skeletons/NativeReal.c
@@ -49,6 +49,7 @@
 	sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]),
 	asn_DEF_NativeReal_tags,	/* Same as above */
 	sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/NumericString.c b/skeletons/NumericString.c
index bb6a098..8405966 100644
--- a/skeletons/NumericString.c
+++ b/skeletons/NumericString.c
@@ -31,7 +31,7 @@
 		return 0x20;
 	}
 }
-static asn_per_constraints_t asn_DEF_NumericString_constraints = {
+static asn_per_constraints_t asn_DEF_NumericString_per_constraints = {
 	{ APC_CONSTRAINED, 4, 4, 0x20, 0x39 },	/* Value */
 	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },	/* Size */
 	asn_DEF_NumericString_v2c,
@@ -68,7 +68,8 @@
 	asn_DEF_NumericString_tags,
 	sizeof(asn_DEF_NumericString_tags)
 	  / sizeof(asn_DEF_NumericString_tags[0]),
-	&asn_DEF_NumericString_constraints,
+	0,	/* No OER visible constraints */
+	&asn_DEF_NumericString_per_constraints,
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/skeletons/OBJECT_IDENTIFIER.c b/skeletons/OBJECT_IDENTIFIER.c
index f414f68..4e865ae 100644
--- a/skeletons/OBJECT_IDENTIFIER.c
+++ b/skeletons/OBJECT_IDENTIFIER.c
@@ -46,6 +46,7 @@
 	asn_DEF_OBJECT_IDENTIFIER_tags,	/* Same as above */
 	sizeof(asn_DEF_OBJECT_IDENTIFIER_tags)
 	    / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/OCTET_STRING.c b/skeletons/OCTET_STRING.c
index fa3d65e..c533461 100644
--- a/skeletons/OCTET_STRING.c
+++ b/skeletons/OCTET_STRING.c
@@ -55,6 +55,7 @@
 	asn_DEF_OCTET_STRING_tags,	/* Same as above */
 	sizeof(asn_DEF_OCTET_STRING_tags)
 	  / sizeof(asn_DEF_OCTET_STRING_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	&asn_SPC_OCTET_STRING_specs
diff --git a/skeletons/ObjectDescriptor.c b/skeletons/ObjectDescriptor.c
index 65b00d5..478a7c7 100644
--- a/skeletons/ObjectDescriptor.c
+++ b/skeletons/ObjectDescriptor.c
@@ -43,6 +43,7 @@
 	asn_DEF_ObjectDescriptor_tags,
 	sizeof(asn_DEF_ObjectDescriptor_tags)
 	  / sizeof(asn_DEF_ObjectDescriptor_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/PrintableString.c b/skeletons/PrintableString.c
index 48ee751..3360c2d 100644
--- a/skeletons/PrintableString.c
+++ b/skeletons/PrintableString.c
@@ -41,7 +41,7 @@
 		return _PrintableString_code2value[code];
 	return -1;
 }
-static asn_per_constraints_t asn_DEF_PrintableString_constraints = {
+static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = {
 	{ APC_CONSTRAINED, 4, 4, 0x20, 0x39 },	/* Value */
 	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },	/* Size */
 	asn_DEF_PrintableString_v2c,
@@ -78,7 +78,8 @@
 	asn_DEF_PrintableString_tags,
 	sizeof(asn_DEF_PrintableString_tags)
 	  / sizeof(asn_DEF_PrintableString_tags[0]),
-	&asn_DEF_PrintableString_constraints,
+	0,	/* No OER visible constraints */
+	&asn_DEF_PrintableString_per_constraints,
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/skeletons/REAL.c b/skeletons/REAL.c
index 2993b7c..3a166fe 100644
--- a/skeletons/REAL.c
+++ b/skeletons/REAL.c
@@ -70,6 +70,7 @@
 	sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]),
 	asn_DEF_REAL_tags,	/* Same as above */
 	sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/RELATIVE-OID.c b/skeletons/RELATIVE-OID.c
index eb10510..0a2f534 100644
--- a/skeletons/RELATIVE-OID.c
+++ b/skeletons/RELATIVE-OID.c
@@ -47,6 +47,7 @@
 	asn_DEF_RELATIVE_OID_tags,	/* Same as above */
 	sizeof(asn_DEF_RELATIVE_OID_tags)
 	    / sizeof(asn_DEF_RELATIVE_OID_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/T61String.c b/skeletons/T61String.c
index 5f54e37..06c0dc6 100644
--- a/skeletons/T61String.c
+++ b/skeletons/T61String.c
@@ -43,6 +43,7 @@
 	asn_DEF_T61String_tags,
 	sizeof(asn_DEF_T61String_tags)
 	  / sizeof(asn_DEF_T61String_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/TeletexString.c b/skeletons/TeletexString.c
index 9076238..ad707c8 100644
--- a/skeletons/TeletexString.c
+++ b/skeletons/TeletexString.c
@@ -43,6 +43,7 @@
 	asn_DEF_TeletexString_tags,
 	sizeof(asn_DEF_TeletexString_tags)
 	  / sizeof(asn_DEF_TeletexString_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/UTCTime.c b/skeletons/UTCTime.c
index 8852d5b..024c069 100644
--- a/skeletons/UTCTime.c
+++ b/skeletons/UTCTime.c
@@ -59,6 +59,7 @@
 	asn_DEF_UTCTime_tags,
 	sizeof(asn_DEF_UTCTime_tags)
 	  / sizeof(asn_DEF_UTCTime_tags[0]),
+	0,	/* No OER visible constraints */
 	&asn_DEF_UTCTime_constraints,
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/UTF8String.c b/skeletons/UTF8String.c
index d7f5a38..7532864 100644
--- a/skeletons/UTF8String.c
+++ b/skeletons/UTF8String.c
@@ -44,6 +44,7 @@
 	asn_DEF_UTF8String_tags,
 	sizeof(asn_DEF_UTF8String_tags)
 	  / sizeof(asn_DEF_UTF8String_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/UniversalString.c b/skeletons/UniversalString.c
index 657fcc2..b947810 100644
--- a/skeletons/UniversalString.c
+++ b/skeletons/UniversalString.c
@@ -18,7 +18,7 @@
 	offsetof(UniversalString_t, _asn_ctx),
 	ASN_OSUBV_U32	/* 32-bits character */
 };
-static asn_per_constraints_t asn_DEF_UniversalString_constraints = {
+static asn_per_constraints_t asn_DEF_UniversalString_per_constraints = {
 	{ APC_CONSTRAINED, 32, 32, 0, 2147483647 },
 	{ APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },
 	0, 0
@@ -54,7 +54,8 @@
 	asn_DEF_UniversalString_tags,
 	sizeof(asn_DEF_UniversalString_tags)
 	  / sizeof(asn_DEF_UniversalString_tags[0]),
-	&asn_DEF_UniversalString_constraints,
+	0,	/* No OER visible constraints */
+	&asn_DEF_UniversalString_per_constraints,
 	0, 0,	/* No members */
 	&asn_SPC_UniversalString_specs
 };
diff --git a/skeletons/VideotexString.c b/skeletons/VideotexString.c
index 12063db..760fb06 100644
--- a/skeletons/VideotexString.c
+++ b/skeletons/VideotexString.c
@@ -43,6 +43,7 @@
 	asn_DEF_VideotexString_tags,
 	sizeof(asn_DEF_VideotexString_tags)
 	  / sizeof(asn_DEF_VideotexString_tags[0]),
+	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/VisibleString.c b/skeletons/VisibleString.c
index f57241c..0411b05 100644
--- a/skeletons/VisibleString.c
+++ b/skeletons/VisibleString.c
@@ -48,6 +48,7 @@
 	asn_DEF_VisibleString_tags,
 	sizeof(asn_DEF_VisibleString_tags)
 	  / sizeof(asn_DEF_VisibleString_tags[0]),
+	0,	/* No OER visible constraints */
 	&asn_DEF_VisibleString_constraints,
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/skeletons/constr_TYPE.h b/skeletons/constr_TYPE.h
index 651cc2e..19ab7ce 100644
--- a/skeletons/constr_TYPE.h
+++ b/skeletons/constr_TYPE.h
@@ -117,7 +117,8 @@
 	const ber_tlv_tag_t *all_tags;	/* Every tag for BER/containment */
 	int all_tags_count;		/* Number of tags */
 
-	asn_per_constraints_t *per_constraints;	/* PER compiled constraints */
+	asn_oer_constraints_t *oer_constraints;	/* OER constraints */
+	asn_per_constraints_t *per_constraints;	/* PER constraints */
 
 	/*
 	 * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE).