/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-Containers"
 * 	found in "Spec/e2_and_x2-combined-and-minimized.asn1"
 * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
 */

#include "ProtocolIE-Single-Container.h"

/*
 * This type is implemented using RICaction_ToBeSetup_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RICaction_Admitted_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RICaction_NotAdmitted_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RANfunction_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RANfunctionID_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using RANfunctionIDcause_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using CellInformation_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using CellToReport_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using MeasurementInitiationResult_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using MeasurementFailureCause_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using CompleteFailureCauseInformation_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
/*
 * This type is implemented using CellMeasurementResult_ItemIEs,
 * so here we adjust the DEF accordingly.
 */
static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P0_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P0 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P0_tags_1,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P0_tags_1)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P0_tags_1[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P0_tags_1,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P0_tags_1)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P0_tags_1[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RICaction_ToBeSetup_ItemIEs_1,
	3,	/* Elements count */
	&asn_SPC_RICaction_ToBeSetup_ItemIEs_specs_1	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P1_tags_2[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P1 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P1_tags_2,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P1_tags_2)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P1_tags_2[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P1_tags_2,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P1_tags_2)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P1_tags_2[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RICaction_Admitted_ItemIEs_5,
	3,	/* Elements count */
	&asn_SPC_RICaction_Admitted_ItemIEs_specs_5	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P2_tags_3[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P2 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P2_tags_3,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P2_tags_3)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P2_tags_3[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P2_tags_3,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P2_tags_3)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P2_tags_3[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RICaction_NotAdmitted_ItemIEs_9,
	3,	/* Elements count */
	&asn_SPC_RICaction_NotAdmitted_ItemIEs_specs_9	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P3_tags_4[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P3 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P3_tags_4,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P3_tags_4)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P3_tags_4[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P3_tags_4,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P3_tags_4)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P3_tags_4[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RANfunction_ItemIEs_13,
	3,	/* Elements count */
	&asn_SPC_RANfunction_ItemIEs_specs_13	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P4_tags_5[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P4 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P4_tags_5,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P4_tags_5)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P4_tags_5[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P4_tags_5,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P4_tags_5)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P4_tags_5[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RANfunctionID_ItemIEs_17,
	3,	/* Elements count */
	&asn_SPC_RANfunctionID_ItemIEs_specs_17	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P5_tags_6[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P5 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P5_tags_6,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P5_tags_6)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P5_tags_6[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P5_tags_6,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P5_tags_6)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P5_tags_6[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_RANfunctionIDcause_ItemIEs_21,
	3,	/* Elements count */
	&asn_SPC_RANfunctionIDcause_ItemIEs_specs_21	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P6_tags_7[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P6 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P6_tags_7,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P6_tags_7)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P6_tags_7[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P6_tags_7,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P6_tags_7)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P6_tags_7[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_CellInformation_ItemIEs_25,
	3,	/* Elements count */
	&asn_SPC_CellInformation_ItemIEs_specs_25	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P7_tags_8[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P7 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P7_tags_8,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P7_tags_8)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P7_tags_8[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P7_tags_8,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P7_tags_8)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P7_tags_8[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_CellToReport_ItemIEs_29,
	3,	/* Elements count */
	&asn_SPC_CellToReport_ItemIEs_specs_29	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P8_tags_9[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P8 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P8_tags_9,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P8_tags_9)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P8_tags_9[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P8_tags_9,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P8_tags_9)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P8_tags_9[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_MeasurementInitiationResult_ItemIEs_33,
	3,	/* Elements count */
	&asn_SPC_MeasurementInitiationResult_ItemIEs_specs_33	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P9_tags_10[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P9 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P9_tags_10,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P9_tags_10)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P9_tags_10[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P9_tags_10,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P9_tags_10)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P9_tags_10[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_MeasurementFailureCause_ItemIEs_37,
	3,	/* Elements count */
	&asn_SPC_MeasurementFailureCause_ItemIEs_specs_37	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P10_tags_11[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P10 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P10_tags_11,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P10_tags_11)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P10_tags_11[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P10_tags_11,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P10_tags_11)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P10_tags_11[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_CompleteFailureCauseInformation_ItemIEs_41,
	3,	/* Elements count */
	&asn_SPC_CompleteFailureCauseInformation_ItemIEs_specs_41	/* Additional specs */
};

static const ber_tlv_tag_t asn_DEF_ProtocolIE_Single_Container_8810P11_tags_12[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
asn_TYPE_descriptor_t asn_DEF_ProtocolIE_Single_Container_8810P11 = {
	"ProtocolIE-Single-Container",
	"ProtocolIE-Single-Container",
	&asn_OP_SEQUENCE,
	asn_DEF_ProtocolIE_Single_Container_8810P11_tags_12,
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P11_tags_12)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P11_tags_12[0]), /* 1 */
	asn_DEF_ProtocolIE_Single_Container_8810P11_tags_12,	/* Same as above */
	sizeof(asn_DEF_ProtocolIE_Single_Container_8810P11_tags_12)
		/sizeof(asn_DEF_ProtocolIE_Single_Container_8810P11_tags_12[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_CellMeasurementResult_ItemIEs_45,
	3,	/* Elements count */
	&asn_SPC_CellMeasurementResult_ItemIEs_specs_45	/* Additional specs */
};

