/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RANAP-PDU"
 * 	found in "../../asn1/ranap/RANAP-PDU.asn"
 */

#include "RANAP_IuSigConId-IE-ContainerList.h"

static asn_per_constraints_t asn_PER_type_RANAP_IuSigConId_IE_ContainerList_constr_1 GCC_NOTUSED = {
	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
	{ APC_CONSTRAINED,	 8,  8,  1l,  250l }	/* (SIZE(1..250)) */,
	0, 0	/* No PER value map */
};
static asn_TYPE_member_t asn_MBR_RANAP_IuSigConId_IE_ContainerList_1[] = {
	{ ATF_POINTER, 0, 0,
		-1 /* Ambiguous tag (CHOICE?) */,
		0,
		&asn_DEF_RANAP_ProtocolIE_Container,
		0,	/* Defer constraints checking to the member type */
		0,	/* No PER visible constraints */
		0,
		""
		},
};
static const ber_tlv_tag_t asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn_SET_OF_specifics_t asn_SPC_RANAP_IuSigConId_IE_ContainerList_specs_1 = {
	sizeof(struct RANAP_IuSigConId_IE_ContainerList),
	offsetof(struct RANAP_IuSigConId_IE_ContainerList, _asn_ctx),
	0,	/* XER encoding is XMLDelimitedItemList */
};
asn_TYPE_descriptor_t asn_DEF_RANAP_IuSigConId_IE_ContainerList = {
	"RANAP_IuSigConId-IE-ContainerList",
	"RANAP_IuSigConId-IE-ContainerList",
	SEQUENCE_OF_free,
	SEQUENCE_OF_print,
	SEQUENCE_OF_constraint,
	SEQUENCE_OF_decode_ber,
	SEQUENCE_OF_encode_der,
	SEQUENCE_OF_decode_xer,
	SEQUENCE_OF_encode_xer,
	SEQUENCE_OF_decode_uper,
	SEQUENCE_OF_encode_uper,
	SEQUENCE_OF_decode_aper,
	SEQUENCE_OF_encode_aper,
	0,	/* Use generic outmost tag fetcher */
	asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1,
	sizeof(asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1)
		/sizeof(asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1[0]), /* 1 */
	asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1,	/* Same as above */
	sizeof(asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1)
		/sizeof(asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1[0]), /* 1 */
	&asn_PER_type_RANAP_IuSigConId_IE_ContainerList_constr_1,
	asn_MBR_RANAP_IuSigConId_IE_ContainerList_1,
	1,	/* Single element */
	&asn_SPC_RANAP_IuSigConId_IE_ContainerList_specs_1	/* Additional specs */
};

