/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "SABP-IEs"
 * 	found in "../../asn1/sabp/SABP-IEs.asn"
 */

#ifndef	_SABP_Number_of_Broadcasts_Completed_List_Item_H_
#define	_SABP_Number_of_Broadcasts_Completed_List_Item_H_


#include <asn_application.h>

/* Including external dependencies */
#include <osmocom/sabp/SABP_Service-Area-Identifier.h>
#include <NativeInteger.h>
#include <osmocom/sabp/SABP_Number-Of-Broadcasts-Completed-Info.h>
#include <osmocom/sabp/SABP_IE-Extensions.h>
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* SABP_Number-of-Broadcasts-Completed-List-Item */
typedef struct SABP_Number_of_Broadcasts_Completed_List_Item {
	SABP_Service_Area_Identifier_t	 service_area_identifier;
	long	 number_of_broadcasts_completed;
	SABP_Number_Of_Broadcasts_Completed_Info_t	*number_of_broadcasts_completed_info	/* OPTIONAL */;
	SABP_IE_Extensions_t	*iE_Extensions	/* OPTIONAL */;
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} SABP_Number_of_Broadcasts_Completed_List_Item_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SABP_Number_of_Broadcasts_Completed_List_Item;

#ifdef __cplusplus
}
#endif

#endif	/* _SABP_Number_of_Broadcasts_Completed_List_Item_H_ */
#include <asn_internal.h>
