/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "S1AP-IEs"
 * 	found in "./asn1c/S1AP-IEs.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -gen-PER -findirect-choice -pdu=S1AP-PDU`
 */

#ifndef	_IMSvoiceEPSfallbackfrom5G_H_
#define	_IMSvoiceEPSfallbackfrom5G_H_


#include <asn_application.h>

/* Including external dependencies */
#include <NativeEnumerated.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum IMSvoiceEPSfallbackfrom5G {
	IMSvoiceEPSfallbackfrom5G_true	= 0
	/*
	 * Enumeration is extensible
	 */
} e_IMSvoiceEPSfallbackfrom5G;

/* IMSvoiceEPSfallbackfrom5G */
typedef long	 IMSvoiceEPSfallbackfrom5G_t;

/* Implementation */
extern asn_per_constraints_t asn_PER_type_IMSvoiceEPSfallbackfrom5G_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_IMSvoiceEPSfallbackfrom5G;
extern const asn_INTEGER_specifics_t asn_SPC_IMSvoiceEPSfallbackfrom5G_specs_1;
asn_struct_free_f IMSvoiceEPSfallbackfrom5G_free;
asn_struct_print_f IMSvoiceEPSfallbackfrom5G_print;
asn_constr_check_f IMSvoiceEPSfallbackfrom5G_constraint;
ber_type_decoder_f IMSvoiceEPSfallbackfrom5G_decode_ber;
der_type_encoder_f IMSvoiceEPSfallbackfrom5G_encode_der;
xer_type_decoder_f IMSvoiceEPSfallbackfrom5G_decode_xer;
xer_type_encoder_f IMSvoiceEPSfallbackfrom5G_encode_xer;
oer_type_decoder_f IMSvoiceEPSfallbackfrom5G_decode_oer;
oer_type_encoder_f IMSvoiceEPSfallbackfrom5G_encode_oer;
per_type_decoder_f IMSvoiceEPSfallbackfrom5G_decode_uper;
per_type_encoder_f IMSvoiceEPSfallbackfrom5G_encode_uper;
per_type_decoder_f IMSvoiceEPSfallbackfrom5G_decode_aper;
per_type_encoder_f IMSvoiceEPSfallbackfrom5G_encode_aper;

#ifdef __cplusplus
}
#endif

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