/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "E2AP-Containers"
 * 	found in "/home/sjana/ASN-Defns/e2ap-oran-wg3-v01.00.asn"
 * 	`asn1c -fno-include-deps -fcompound-names -findirect-choice -gen-PER -no-gen-OER`
 */

#include "ProtocolIE-Container.h"

#include "ProtocolIE-Field.h"
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P0_constr_1 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P1_constr_3 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P2_constr_5 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P3_constr_7 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P4_constr_9 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P5_constr_11 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P6_constr_13 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P7_constr_15 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P8_constr_17 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P9_constr_19 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P10_constr_21 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P11_constr_23 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P12_constr_25 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P13_constr_27 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P14_constr_29 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P15_constr_31 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P16_constr_33 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P17_constr_35 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P18_constr_37 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_per_constraints_t asn_PER_type_ProtocolIE_Container_1412P19_constr_39 CC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (SIZE(0..65535)) */,
	0, 0	/* No PER value map */
};
asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P0_1[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionRequest_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P0_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P0_specs_1 = {
	sizeof(struct ProtocolIE_Container_1412P0),
	offsetof(struct ProtocolIE_Container_1412P0, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P0 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P0_tags_1,
	sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P0_tags_1,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P0_tags_1[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P0_constr_1, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P0_1,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P0_specs_1	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P1_3[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionResponse_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P1_tags_3[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P1_specs_3 = {
	sizeof(struct ProtocolIE_Container_1412P1),
	offsetof(struct ProtocolIE_Container_1412P1, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P1 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P1_tags_3,
	sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P1_tags_3,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P1_tags_3[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P1_constr_3, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P1_3,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P1_specs_3	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P2_5[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionFailure_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P2_tags_5[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P2_specs_5 = {
	sizeof(struct ProtocolIE_Container_1412P2),
	offsetof(struct ProtocolIE_Container_1412P2, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P2 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P2_tags_5,
	sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P2_tags_5,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P2_tags_5[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P2_constr_5, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P2_5,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P2_specs_5	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P3_7[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionDeleteRequest_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P3_tags_7[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P3_specs_7 = {
	sizeof(struct ProtocolIE_Container_1412P3),
	offsetof(struct ProtocolIE_Container_1412P3, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P3 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P3_tags_7,
	sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P3_tags_7,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P3_tags_7[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P3_constr_7, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P3_7,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P3_specs_7	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P4_9[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionDeleteResponse_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P4_tags_9[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P4_specs_9 = {
	sizeof(struct ProtocolIE_Container_1412P4),
	offsetof(struct ProtocolIE_Container_1412P4, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P4 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P4_tags_9,
	sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P4_tags_9,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P4_tags_9[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P4_constr_9, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P4_9,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P4_specs_9	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P5_11[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICsubscriptionDeleteFailure_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P5_tags_11[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P5_specs_11 = {
	sizeof(struct ProtocolIE_Container_1412P5),
	offsetof(struct ProtocolIE_Container_1412P5, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P5 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P5_tags_11,
	sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P5_tags_11,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P5_tags_11[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P5_constr_11, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P5_11,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P5_specs_11	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P6_13[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICindication_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P6_tags_13[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P6_specs_13 = {
	sizeof(struct ProtocolIE_Container_1412P6),
	offsetof(struct ProtocolIE_Container_1412P6, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P6 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P6_tags_13,
	sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P6_tags_13,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P6_tags_13[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P6_constr_13, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P6_13,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P6_specs_13	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P7_15[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICcontrolRequest_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P7_tags_15[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P7_specs_15 = {
	sizeof(struct ProtocolIE_Container_1412P7),
	offsetof(struct ProtocolIE_Container_1412P7, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P7 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P7_tags_15,
	sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P7_tags_15,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P7_tags_15[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P7_constr_15, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P7_15,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P7_specs_15	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P8_17[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICcontrolAcknowledge_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P8_tags_17[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P8_specs_17 = {
	sizeof(struct ProtocolIE_Container_1412P8),
	offsetof(struct ProtocolIE_Container_1412P8, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P8 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P8_tags_17,
	sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P8_tags_17,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P8_tags_17[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P8_constr_17, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P8_17,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P8_specs_17	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P9_19[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICcontrolFailure_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P9_tags_19[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P9_specs_19 = {
	sizeof(struct ProtocolIE_Container_1412P9),
	offsetof(struct ProtocolIE_Container_1412P9, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P9 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P9_tags_19,
	sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P9_tags_19,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P9_tags_19[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P9_constr_19, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P9_19,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P9_specs_19	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P10_21[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_ErrorIndication_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P10_tags_21[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P10_specs_21 = {
	sizeof(struct ProtocolIE_Container_1412P10),
	offsetof(struct ProtocolIE_Container_1412P10, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P10 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P10_tags_21,
	sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P10_tags_21,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P10_tags_21[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P10_constr_21, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P10_21,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P10_specs_21	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P11_23[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_E2setupRequestIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P11_tags_23[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P11_specs_23 = {
	sizeof(struct ProtocolIE_Container_1412P11),
	offsetof(struct ProtocolIE_Container_1412P11, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P11 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P11_tags_23,
	sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P11_tags_23,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P11_tags_23[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P11_constr_23, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P11_23,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P11_specs_23	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P12_25[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_E2setupResponseIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P12_tags_25[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P12_specs_25 = {
	sizeof(struct ProtocolIE_Container_1412P12),
	offsetof(struct ProtocolIE_Container_1412P12, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P12 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P12_tags_25,
	sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P12_tags_25,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P12_tags_25[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P12_constr_25, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P12_25,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P12_specs_25	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P13_27[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_E2setupFailureIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P13_tags_27[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P13_specs_27 = {
	sizeof(struct ProtocolIE_Container_1412P13),
	offsetof(struct ProtocolIE_Container_1412P13, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P13 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P13_tags_27,
	sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P13_tags_27,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P13_tags_27[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P13_constr_27, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P13_27,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P13_specs_27	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P14_29[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_ResetRequestIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P14_tags_29[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P14_specs_29 = {
	sizeof(struct ProtocolIE_Container_1412P14),
	offsetof(struct ProtocolIE_Container_1412P14, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P14 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P14_tags_29,
	sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P14_tags_29,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P14_tags_29[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P14_constr_29, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P14_29,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P14_specs_29	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P15_31[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_ResetResponseIEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P15_tags_31[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P15_specs_31 = {
	sizeof(struct ProtocolIE_Container_1412P15),
	offsetof(struct ProtocolIE_Container_1412P15, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P15 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P15_tags_31,
	sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P15_tags_31,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P15_tags_31[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P15_constr_31, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P15_31,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P15_specs_31	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P16_33[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICserviceUpdate_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P16_tags_33[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P16_specs_33 = {
	sizeof(struct ProtocolIE_Container_1412P16),
	offsetof(struct ProtocolIE_Container_1412P16, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P16 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P16_tags_33,
	sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P16_tags_33,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P16_tags_33[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P16_constr_33, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P16_33,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P16_specs_33	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P17_35[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICserviceUpdateAcknowledge_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P17_tags_35[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P17_specs_35 = {
	sizeof(struct ProtocolIE_Container_1412P17),
	offsetof(struct ProtocolIE_Container_1412P17, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P17 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P17_tags_35,
	sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P17_tags_35,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P17_tags_35[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P17_constr_35, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P17_35,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P17_specs_35	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P18_37[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICserviceUpdateFailure_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P18_tags_37[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P18_specs_37 = {
	sizeof(struct ProtocolIE_Container_1412P18),
	offsetof(struct ProtocolIE_Container_1412P18, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P18 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P18_tags_37,
	sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P18_tags_37,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P18_tags_37[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P18_constr_37, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P18_37,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P18_specs_37	/* Additional specs */
};

asn_TYPE_member_t asn_MBR_ProtocolIE_Container_1412P19_39[] = {
	{ ATF_POINTER, 0, 0,
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_RICserviceQuery_IEs,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		""
		},
};
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Container_1412P19_tags_39[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_SET_OF_specifics_t asn_SPC_ProtocolIE_Container_1412P19_specs_39 = {
	sizeof(struct ProtocolIE_Container_1412P19),
	offsetof(struct ProtocolIE_Container_1412P19, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Container_1412P19 = {
	"ProtocolIE-Container",
	"ProtocolIE-Container",
	&asn_OP_SEQUENCE_OF,
	asn_DEF_ProtocolIE_Container_1412P19_tags_39,
	sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39[0]), /* 1 */
	asn_DEF_ProtocolIE_Container_1412P19_tags_39,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39)
		/sizeof(asn_DEF_ProtocolIE_Container_1412P19_tags_39[0]), /* 1 */
	{ 0, &asn_PER_type_ProtocolIE_Container_1412P19_constr_39, SEQUENCE_OF_constraint },
	asn_MBR_ProtocolIE_Container_1412P19_39,
	1,	/* Single element */
	&asn_SPC_ProtocolIE_Container_1412P19_specs_39	/* Additional specs */
};

