[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/protocol/interface/l4/nas_sv_struct.h b/mcu/protocol/interface/l4/nas_sv_struct.h
new file mode 100644
index 0000000..b3d1d2e
--- /dev/null
+++ b/mcu/protocol/interface/l4/nas_sv_struct.h
@@ -0,0 +1,1813 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2018
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*****************************************************************************
+*
+* Filename:
+* ---------
+* nas_sv_struct.h
+*
+* Project:
+* --------
+*   UMOLYE
+*
+* Description:
+* ------------
+*
+* Author:
+* -------
+ * -------
+******************************************************************************/
+
+#ifndef _NAS_SV_STRUCT_H_
+#define _NAS_SV_STRUCT_H_
+
+
+#include "kal_general_types.h"
+#include "ps_public_enum.h"
+#include "l3_inc_enums.h"
+#include "mcd_l3_inc_struct.h"
+
+
+
+#include "l3_inc_local.h"
+
+#include "gmss_public.h"
+#include "mm_mmi_enums.h"
+#include "mmi2mm_struct.h"
+
+#include "kal_public_defs.h"
+#include "sim_public_enum.h"
+#include "global_type.h"
+#include "irat_common_struct.h"
+//#include "c2k_irat_msg_struct.h"
+#include "l3_inc_enums_public.h"
+#include "ims_interface_md.h"
+#include "ps_public_struct.h"
+
+
+#define MAX_SEARCH_BAND_LIST_SIZE 32
+#define NAS_MAX_PS_RESULT_LIST 128
+#define NAS_MIN_PS_RSSI_VALUE -360
+#define MAX_NWSEL_MCC_POOL 6
+#define LEN_OF_ALL_ALLOWED_NSSAI 144
+
+typedef struct {
+    LOCAL_PARA_HDR
+    domain_id_enum attach_type;
+    kal_uint8 ready_timer_p;
+    gmmreg_timer_struct ready_timer_value;
+    kal_uint8 att_id;
+    mm_user_search_type_enum search_type;
+    kal_bool is_follow_on_request;
+    mm_user_search_cause_enum search_cause; //used for GSMA SIM block feature
+} nas_sv_any_attach_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    domain_id_enum detach_type;
+    kal_bool power_off;
+    kal_uint8 att_id;
+    l4c_rac_detach_cause_enum           detach_cause;
+    kal_bool is_user_ps_reattach;
+} nas_sv_any_detach_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat_mode;              /* RATCM_RAT_ENUM*/
+    rat_enum reported_rat;
+    irat_system_type_enum c2k_mode;
+    kal_bool is_rf_on;
+    vg_option_enum vg_option_map;
+} nas_sv_gmss_set_rat_mode_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    proc_status_enum status;
+    mm_cause_enum cause;
+} nas_sv_gmss_set_rat_mode_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_deact_cs;
+    kal_bool is_deact_ps;
+} nas_sv_gmss_c2k_deactivate_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    nas_sv_any_event_update_req_enum event;
+} nas_sv_any_event_update_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    nas_sv_any_event_update_ind_enum event;
+    rat_enum rat;
+} nas_sv_any_event_update_ind_struct;
+
+typedef nas_sv_any_event_update_ind_struct nas_sv_vgmm_event_update_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    erac_rat_enum               rat_mode;
+    erac_rat_enum               reported_rat;
+    rat_mode_change_cause_enum  rat_mode_change_cause;
+	irat_system_type_enum       c2k_mode;
+} nas_sv_emm_set_rat_mode_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    proc_status_enum            status;
+} nas_sv_emm_set_rat_mode_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    ho_from_lte_type_enum ir_ho_type;
+} nas_sv_any_rat_change_start_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    irat_result_enum irat_result;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    ho_from_lte_type_enum ir_ho_type;
+    // NAS_SV only updates for 23G. For other RATs, set it to Unknown
+    // This filed is requested by MOD_SMIC
+    nas_sv_camped_on_cell_type_enum camped_on_cell_type;
+} nas_sv_any_rat_change_finish_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8 trx_id;
+} nas_sv_emm_plmn_search_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8 trx_id;
+    rat_enum rat;
+} nas_sv_mm_plmn_search_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    active_nas_enum init_nas;
+    
+} nas_sv_smic_boot_up_init_nas_update_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8 trx_id;
+    rat_enum rat;
+    plmn_search_result_enum result;
+    kal_bool is_as_plmn_list_present;
+    as_plmn_list_struct as_plmn_list;
+    kal_uint8 multi_plmn_count;
+    plmn_id_struct multi_selected_plmn[MAX_NUM_MULTI_PLMN];
+    as_cell_type_enum multi_selected_cell_type[MAX_NUM_MULTI_PLMN];
+    scan_type_enum scan_type;
+    kal_bool is_stored_list_exist; // only for stored search not for fullband + fullband and stored
+    fullband_result_enum is_fullband_finished;
+    kal_bool is_ps_conn_releasing;
+    kal_bool is_quick_search;
+    kal_bool no_search_candidate;
+} nwsel_nas_sv_plmn_search_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8                   trx_id;
+    plmn_search_result_enum     result;
+    plmn_search_cant_proc_reason_enum   cant_proc_reason;
+    kal_bool                    is_as_plmn_list_present;
+    as_plmn_list_struct         as_plmn_list;
+    kal_uint8                   multi_plmn_count;
+    plmn_id_struct              multi_selected_plmn[MAX_NUM_MULTI_PLMN];
+    as_cell_type_enum           multi_selected_cell_type[MAX_NUM_MULTI_PLMN];
+    scan_type_enum              scan_type;
+    kal_bool                    is_stored_list_exist; // only for stored search not for fullband + fullband and stored
+    fullband_result_enum        is_fullband_finished;
+    kal_bool                    is_quick_search;
+    kal_bool                    no_search_candidate;
+} nas_sv_emm_plmn_search_cnf_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                  gibi_tag;
+    kal_uint8                   ta_code[2];
+    kal_uint8                   multi_plmn_count;
+    plmn_id_struct              multi_plmn_id[MAX_NUM_MULTI_PLMN];
+    as_cell_type_enum           multi_plmn_cell_type[MAX_NUM_MULTI_PLMN];
+    kal_uint8                   multi_ta_code[MAX_NUM_MULTI_PLMN][2]; // 36.331 R14 CR2912 EUTRAN sharing enhancement
+    kal_uint32                  multi_cell_id[MAX_NUM_MULTI_PLMN]; // 36.331 R14 CR2912 EUTRAN sharing enhancement
+    csg_access_mode_enum        csg_access_mode[MAX_NUM_MULTI_PLMN];
+    csg_info_struct             csg_info[MAX_NUM_MULTI_PLMN];
+    lte_duplex_type_enum        lte_type;
+    kal_bool                    ims_emergency_support;
+#ifdef __NG_ECALL_SUPPORT__
+    kal_bool                    ecall_over_ims_support;
+#endif /* __NG_ECALL_SUPPORT__ */
+    kal_bool is_c2k_as_irat;
+    kal_uint16                  band;
+    kal_bool                    is_3G_sib_scheduled;
+    kal_bool                    is_2G_sib_scheduled;
+    kal_bool                    is_C2K_sib_scheduled;
+    enasas_ssac_ac_barringfactor_enum ssac_voice_ac_barring_factor;
+    kal_bool                    match_op_cfg;
+
+    //--- Debug Only ---//
+    endc_sib_status_enum        endc_sib_status; /* "endc_sib_status" will be set to "ENDC_SIB_STATUS_SUPPORT" if the corresponding 
+                                                  * bit of selected PLMN in PLMN-InfoList-r15 from SIB2 is TRUE. 
+                                                  */
+    kal_bool                    endc_available;  /* "endc_available" wil be set to TRUE if any bit in PLMN-InfoList-r15 from SIB2 is TRUE */
+} nas_sv_emm_sys_info_update_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    ho_from_lte_type_enum ir_ho_type;
+    kal_uint8 nas_security_param_from_eutra;
+    gas_cipher_algo_enum gas_cipher_algo;
+    kal_bool csfb_ind;
+} nas_sv_emm_nas_ctxt_transfer_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    irat_result_enum irat_result;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+} nas_sv_emm_rat_change_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_container_errc_to_emm_struct irat_container;
+} nas_sv_emm_as_param_notify_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat_mode;              /* RATCM_RAT_ENUM*/
+    domain_id_enum detach_domain; //for UEMODE:PS_MODE_x, CS domain should be detached first in RAT_MODE which contains RAT_LTE
+    rat_enum reported_rat;
+    rat_mode_change_cause_enum  rat_mode_change_cause;
+} nas_sv_mm_set_rat_mode_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    proc_status_enum status;         /* proc_status_enum */
+    mm_cause_enum cause;          /* mm_cause_enum */
+} nas_sv_mm_set_rat_mode_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    kal_uint8 nas_security_param[NAS_SECURITY_PARAM_LEN];
+} nas_sv_mm_nas_ctxt_transfer_req_struct,nas_sv_mm_rat_change_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    irat_result_enum irat_result;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    irat_reject_cause_enum irat_reject_cause;
+} nas_sv_mm_rat_change_cnf_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    rat_enum reported_rat;
+} nas_sv_ratcm_set_rat_mode_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_successful;
+    mm_cause_enum cause;
+} nas_sv_ratcm_set_rat_mode_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    void* as_info_ptr;
+    kal_uint8 nas_security_param[NAS_SECURITY_PARAM_LEN];
+    //NAS security parameter (Only valid for IRHO from UAS)
+    //Byte1 ~ 4: NouceMME
+    //Byte5: Selected Algorithm (Ciphering/Integrity)
+    //Byte6: eKSI (including type of security context)
+} nas_sv_ratcm_rat_change_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    irat_result_enum irat_result;
+    irat_reject_cause_enum irat_reject_cause;
+    void* as_info_ptr;
+} nas_sv_ratcm_rat_change_rsp_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    void* as_info_ptr;
+    ratcm_gas_security_mode_req_struct gas_security;
+    uas_security_context_struct uas_security[2];
+    csfb_indicator_enum csfb_indicator;
+    loopback_mode_status_enum loopback_mode_status;
+    kal_bool is_lai_valid;
+    lai_struct lai;
+    kal_bool is_srvcc;
+    kal_bool is_mapped_rai_valid;
+    rai_struct mapped_rai;
+} nas_sv_ratcm_rat_change_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    irat_type_enum irat_type;
+    rat_type_enum source_rat;
+    rat_type_enum target_rat;
+    irat_result_enum irat_result;
+    void* as_info_ptr;
+    domain_id_enum connection_domain;
+    kal_bool is_gibi_tag_valid;
+    kal_uint16 gibi_tag;
+} nas_sv_ratcm_rat_change_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint16 gibi_tag;
+    rat_enum rat;
+    kal_bool is_data_pending;
+    kal_bool is_sys_info_present;
+    kal_uint8 multi_plmn_count;
+    plmn_id_struct multi_plmn_id[MAX_NUM_MULTI_PLMN];
+    as_cell_type_enum multi_plmn_cell_type[MAX_NUM_MULTI_PLMN];
+    plmn_id_struct plmn_id;
+    kal_uint8 la_code[2];
+    kal_uint8 ra_code;
+    kal_uint32 cell_id;
+    kal_bool cell_support_cs;
+    kal_bool cell_support_ps; /* if FALSE, nmo and ra_code should not refer. */
+    kal_bool is_acc_class_present;
+    kal_uint16 acc_class;
+    kal_uint8 extra_info_bitmask; /* for DSAC/data_speed_support update in connected mode*/
+    kal_uint8 dsac_plmn_bitmask;
+    kal_uint16 cs_dsac[MAX_NUM_MULTI_PLMN];
+    kal_uint16 ps_dsac[MAX_NUM_MULTI_PLMN];
+    kal_uint8 t3212_timer_val;
+    network_mode_enum nmo;
+    as_cell_type_enum cell_type;
+    att_flag_enum att_flag;
+    kal_bool mscr;
+    rr_mm_sgsnr_flag_enum sgsnr;
+    data_speed_support_enum cell_data_speed_support; /* MAUI_02361221: for egprs and hspa */
+    kal_uint8 ppacr_plmn_bitmask;
+    ppacr_info_struct ppacr_info_plmn_list[MAX_NUM_MULTI_PLMN];
+    csg_access_mode_enum csg_access_mode;
+    csg_info_struct csg_info;
+    kal_bool is_gprs_info_in_si13_deferred;
+    kal_uint8 band;
+} nas_sv_ratcm_sys_info_update_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8 trx_id;
+    plmn_search_result_enum result;
+    rat_enum rat;
+    plmn_id_struct selected_plmn;
+    kal_bool is_as_plmn_list_present;
+    as_plmn_list_struct as_plmn_list;
+    as_cell_type_enum   selected_cell_type;
+    kal_bool is_ps_conn_releasing;
+    kal_uint8 multi_plmn_count;
+    plmn_id_struct multi_selected_plmn[MAX_NUM_MULTI_PLMN];
+    as_cell_type_enum multi_selected_cell_type[MAX_NUM_MULTI_PLMN];
+    scan_type_enum scan_type;
+    kal_bool is_stored_list_exist; // only for stored search not for fullband + fullband and stored
+    fullband_result_enum is_fullband_finished;
+    kal_bool is_quick_search;
+} nas_sv_mm_plmn_search_cnf_struct;
+
+/* workaround need to remove */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16 gibi_tag;
+    kal_uint8 plmn_id_num;
+    plmn_id_struct plmn_id[MAX_NUM_MULTI_PLMN];
+    as_cell_type_enum multi_plmn_cell_type[MAX_NUM_MULTI_PLMN];
+    kal_uint8 ta_code[MAX_NUM_MULTI_PLMN][3];
+    kal_uint8 cell_id[MAX_NUM_MULTI_PLMN][5];
+    nrrc_ac1_selection_assistance_info_enum
+        ac1_selection_assistance_info[MAX_NUM_MULTI_PLMN];
+    kal_bool ims_emergency_support;
+    kal_uint16 band;
+    duplex_type_enum duplex_type;
+} nas_sv_nrrc_sys_info_update_ind_struct;
+/* workaround need to remove */
+
+
+typedef union
+{
+    nas_sv_ratcm_sys_info_update_ind_struct mm_sys_info;
+    nas_sv_emm_sys_info_update_ind_struct emm_sys_info;
+    nas_sv_nrrc_sys_info_update_ind_struct nrrc_sys_info;
+} nwsel_nas_sv_sys_info_update_ind_union;
+
+typedef union
+{
+    kal_uint8 nr_cell_id[MAX_NUM_MULTI_PLMN][5];
+    kal_uint32 lte_cell_id[MAX_NUM_MULTI_PLMN]; 
+    kal_uint32 umts_cell_id;                    
+    kal_uint16 gsm_cell_id;
+} cell_id_union;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    nwsel_nas_sv_sys_info_update_ind_union sys_info;
+} nwsel_nas_sv_sys_info_update_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8                   eq_plmn_count;
+    plmn_id_struct              eq_plmn_id[MAX_NUM_EQ_PLMN];
+} nwsel_nas_sv_nrrc_eq_plmn_list_update_req_struct;
+
+
+typedef struct
+{
+    kal_bool is_ecc_triggered;
+    /* filled by MM */
+    kal_bool is_csfb_ongoing;
+    kal_uint16 factory_mode_arfcn;
+} gsm_search_param_container_struct;
+
+typedef struct
+{
+    kal_bool is_manual_csg_sel; // identify if the csg_id below is valid
+    kal_uint32 csg_id;
+    kal_bool is_ecc_triggered;
+    /* filled by MM */
+    kal_bool is_csfb_ongoing;
+    kal_uint16 factory_mode_arfcn;
+} umts_search_param_container_struct;
+
+typedef struct
+{
+    lte_duplex_type_enum lte_type;
+    /* NWSEL search ANY and this flag set to True, ERRC will only find LTE with IMS support.Otherwise, ERRC report Not_Found */
+    kal_bool force_ims_ecc_cell;
+#ifdef __NG_ECALL_SUPPORT__
+    /* Indicate whether this search needs to prefer IMS ecc cell. If one of search preference and prefer_ims_ecc_cell is false, not prefer ims ecc cell.
+    * Check this field only when force_ims_ecc_cell is set to FALSE. */
+    kal_bool prefer_ims_ecc_cell;
+    /* Use in eCall only mode, force 4G AS to search cells with ecall_over_ims_support*/
+    kal_bool force_ecall_cell;
+#endif /* __NG_ECALL_SUPPORT__ */
+
+    /* OOS scenario, NWSEL need to search again Not-Found entry. AS should not apply U2D filter when this flag on */
+    kal_bool force_stored_search;
+    endc_search_enum endc_search; /* Search ENDC cell or not for LTE cell. */
+    kal_bool is_manual_csg_sel; // identify if the csg_id below is valid
+    kal_uint32 csg_id;
+    kal_bool is_mpsr_trigger; //for VzW MPSR expired based improvement
+    kal_uint32 factory_mode_arfcn;
+    /* OOS interleave source */
+    kal_uint8 additional_stored_freq_plmn_num;
+    plmn_id_struct additional_stored_freq_plmn[MAX_NUM_SEARCH_PLMN];
+} lte_search_param_container_struct;
+
+typedef struct
+{
+    NRARFCN factory_mode_arfcn;
+    /* NWSEL search ANY and this flag set to True, ERRC will only find LTE with IMS support.Otherwise, ERRC report Not_Found */
+    kal_bool force_ecc_cell;
+    /* OOS scenario, NWSEL need to search again Not-Found entry. AS should not apply U2D filter when this flag on */
+    kal_bool force_stored_search;
+    /* OOS interleave source */
+    kal_uint8 additional_stored_freq_plmn_num;
+    plmn_id_struct additional_stored_freq_plmn[MAX_NUM_SEARCH_PLMN];
+} nr_search_param_container_struct;
+
+
+typedef union
+{
+    gsm_search_param_container_struct gsm;
+    umts_search_param_container_struct umts;
+    lte_search_param_container_struct lte;
+    nr_search_param_container_struct nr;
+} search_rat_specific_param_container_union;
+
+typedef struct
+{
+    kal_bool is_power_on; //for CMCC case 5.1.1: is first search after power on
+    kal_bool is_manual_sel; // if search is manual selection
+    kal_bool trigger_by_signal_appear;
+    kal_bool is_higher_plmn_search;
+    kal_uint32 factory_mode_arfcn; //0xFFFFFFFF means invalid arfcn - do normal search. For fast camp on test machine
+
+    scan_type_enum scan_type;
+    search_period_enum search_period; // only a suggestion value for RAT switch.
+    /* number of valid items in the band list. */
+    kal_uint32 num_of_band;
+    /*band list for OP/MCC band and MRU/RAL */
+    kal_uint16 band_list[MAX_SEARCH_BAND_LIST_SIZE];
+    kal_bool is_band_list_sorted;
+    kal_bool is_quick_search;
+    kal_bool is_all_stored;
+    found_mcc_info_struct found_mcc_info;
+    kal_bool is_predict_search;
+} search_param_container_struct;
+
+
+typedef struct
+{
+    kal_bool force_to_release;
+    kal_bool is_clear_abnormal_state;
+    kal_bool is_srlte;
+    kal_bool is_to_deactivate_c2k_cs_service;
+} nas_control_param_container_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    kal_uint8 trx_id;
+    plmn_search_type_enum plmn_search_type;
+    kal_uint8 plmn_id_count;
+    plmn_id_struct plmn_id[MAX_NUM_SEARCH_PLMN];
+    nas_control_param_container_struct nas_ctrl_container;
+    search_param_container_struct as_param_container;
+    search_rat_specific_param_container_union as_specific_container;
+} nwsel_nas_sv_plmn_search_req_struct;
+
+typedef nwsel_nas_sv_plmn_search_req_struct nas_sv_emm_plmn_search_req_struct;
+typedef nwsel_nas_sv_plmn_search_req_struct nas_sv_mm_plmn_search_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                    is_manual_sel;
+} nwsel_nas_sv_manual_mode_update_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                    is_manual_list;
+    rat_enum                    rat;
+    lte_duplex_type_enum        lte_type; // phase out
+    kal_uint8                   plmn_id_count;
+    plmn_id_struct              plmn_id[MAX_NUM_SEARCH_PLMN];
+    scan_type_enum              scan_type;
+    kal_bool                    is_mpsr_trigger;   //for VzW MPSR expired based improvement
+    kal_bool                    is_elevator_mode;
+    found_mcc_info_struct       found_mcc_info;
+    kal_bool                    is_higher_plmn_search;
+    kal_bool                    list_endc_info; /* LIST ENDC info or not for LTE cell. ERRC will collect SIB2 for PLMN_LIST. */
+    /** number of valid items in the band list. */
+    kal_uint32 num_of_band;
+    /** band list for MCC Band for PLMN List Optimization */
+    kal_uint16 band_list[MAX_SEARCH_BAND_LIST_SIZE];
+    user_list_type_enum             user_list_type;    
+    kal_uint8                   given_number_of_plmn; // When xAS found the given number of plmn, xAS return PLMN_LIST_CNF. When value is 0 means xAS do complete list, no need care it.    
+    network_scan_input_struct   network_scan_input;
+} nwsel_nas_sv_plmn_list_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool is_user_plmn_list_ongoing;
+} nwsel_nas_sv_plmn_list_status_update_req_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    as_plmn_list_struct as_plmn_list;
+    scan_type_enum scan_type;
+    plmn_list_result_enum cause;
+    kal_bool is_complete; // If list not complete, the available list is not complete too.
+    kal_bool is_plmn_list_aborted; //indicate if the PLMN List is aborted by PLMN_LIST_ABORT_REQ
+} nwsel_nas_sv_plmn_list_cnf_struct;
+
+typedef nwsel_nas_sv_plmn_list_cnf_struct nas_sv_mm_plmn_list_cnf_struct;
+typedef nwsel_nas_sv_plmn_list_cnf_struct nas_sv_emm_plmn_list_cnf_struct;
+
+typedef nwsel_nas_sv_plmn_list_req_struct nas_sv_mm_plmn_list_req_struct;
+typedef nwsel_nas_sv_plmn_list_req_struct nas_sv_emm_plmn_list_req_struct;
+typedef nwsel_nas_sv_plmn_list_status_update_req_struct nas_sv_vgmm_plmn_list_status_update_req_struct;
+
+typedef struct 
+{ 
+    LOCAL_PARA_HDR 
+    network_scan_5g_output_struct   nw_scan_5g_output;
+} nwsel_nas_sv_plmn_scan_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum                    rat;
+    lte_duplex_type_enum        lte_type; // phase out
+    kal_uint8                   plmn_id_count;
+    plmn_id_struct              plmn_id[MAX_NUM_SEARCH_PLMN];
+} nwsel_nas_sv_csg_list_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    as_csg_list_struct as_csg_list;
+} nwsel_nas_sv_csg_list_cnf_struct;
+
+typedef nwsel_nas_sv_csg_list_cnf_struct nas_sv_mm_csg_list_cnf_struct;
+typedef nwsel_nas_sv_csg_list_cnf_struct nas_sv_emm_csg_list_cnf_struct;
+typedef nwsel_nas_sv_csg_list_cnf_struct nas_sv_nrrc_csg_list_cnf_struct;
+
+
+typedef nwsel_nas_sv_csg_list_req_struct nas_sv_mm_csg_list_req_struct;
+typedef nwsel_nas_sv_csg_list_req_struct nas_sv_emm_csg_list_req_struct;
+typedef nwsel_nas_sv_csg_list_req_struct nas_sv_nrrc_csg_list_req_struct;
+
+/* MSG_ID_NWSEL_NAS_SV_NRRC_PLMN_SEARCH_PREFERENCE_UPDATE_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool prefer_ims_emergency;
+} nwsel_nas_sv_nrrc_plmn_search_preference_update_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                    is_received;
+    kal_bool                    is_security_check;
+    kal_uint8                   sor_header;
+    kal_uint16                  oplmn_data_size;
+    kal_uint8                   *oplmn_data;
+} nwsel_nas_sv_sor_oplmn_list_update_ind_struct;
+
+typedef nwsel_nas_sv_sor_oplmn_list_update_ind_struct nas_sv_vgmm_sor_oplmn_list_update_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                    abort_reg_needed;
+} nwsel_nas_sv_sor_oplmn_list_update_rsp_struct;
+
+typedef nwsel_nas_sv_sor_oplmn_list_update_rsp_struct nas_sv_vgmm_sor_oplmn_list_update_rsp_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8                   size_of_addr;
+    kal_uint8                   addr[MAX_SIM_ADDR_LEN];
+} nwsel_nas_sv_sor_secure_packet_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                    is_successful;
+    kal_uint16                  size_of_sim_ack_data;
+    kal_uint8                   sim_ack_data[256];
+    kal_uint8                   cause;
+} nwsel_nas_sv_sor_secure_packet_rsp_struct;
+
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+} nwsel_nas_sv_plmn_search_ind_struct;
+
+/*Check Active RAT Req*/
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum check_rat;
+}nwsel_nas_sv_check_active_rat_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat; /*For RATCM only*/
+}nas_sv_ratcm_check_active_rat_req_struct;
+
+/*Set Active RAT Req*/
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat; /*For RATCM only*/
+}nas_sv_ratcm_set_active_rat_req_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat; /*For RATCM only*/
+}nas_sv_ratcm_sniffer_stop_req_struct;
+
+
+/*Check Active RAT Cnf*/
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat; /*For RATCM only*/
+    kal_bool is_active_rat;
+}nas_sv_any_check_active_rat_cnf_struct;
+
+typedef nas_sv_any_check_active_rat_cnf_struct nas_sv_ratcm_check_active_rat_cnf_struct;
+
+/*Set Active RAT Cnf*/
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat; /*For RATCM only*/
+    kal_bool is_success;
+}nas_sv_any_set_active_rat_cnf_struct;
+
+typedef nas_sv_any_set_active_rat_cnf_struct nas_sv_ratcm_set_active_rat_cnf_struct;
+typedef nas_sv_any_set_active_rat_cnf_struct nas_sv_emm_set_active_rat_cnf_struct;
+typedef nas_sv_any_set_active_rat_cnf_struct nas_sv_vgmm_set_active_rat_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    // sniff RPLMN
+    // only valid when the conditions hold
+    // plmn_search_status  == PLMN_SEARCH_UNRELATED
+    // mm_proc_status == (MS_IN_NO_SERVICE || MS_IN_LIMITED_SERVICE)
+    as_sniffer_req_service_enum sniffer_service_type;
+    as_sniffer_plmn_list_operate_type_enum plmn_list_operate_type;
+    kal_uint8                   plmn_id_count;
+    plmn_id_struct              plmn_id[MAX_NUM_SNIFFER_PLMN];
+
+}nwsel_nas_sv_sniffer_start_req_struct;
+
+typedef nwsel_nas_sv_sniffer_start_req_struct nas_sv_ratcm_sniffer_start_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat; /*stop rat*/
+}nwsel_nas_sv_sniffer_stop_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum  rat;
+    kal_uint8 plmn_id_count;
+    plmn_id_struct              plmn_id[MAX_NUM_SIGNAL_APPEAR_PLMN];
+    kal_uint32 num_of_detected_band;
+    kal_uint16 detected_band_list[MAX_SEARCH_BAND_LIST_SIZE];
+}nwsel_nas_sv_signal_appear_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum  rat;
+    kal_uint32 num_of_detected_band;
+    kal_uint16 detected_band_list[MAX_SEARCH_BAND_LIST_SIZE];
+}nas_sv_ratcm_signal_appear_ind_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    nwsel_status_enum nwsel_search_status;
+} nwsel_nas_sv_display_search_status_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    kal_uint8 plmn_band_count;
+    plmn_band_struct plmn_band[MAX_PLMN_BAND_NUM];
+} nwsel_nas_sv_plmn_band_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool force_to_release;
+} nas_sv_mm_deactivate_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_completed;
+    kal_bool is_ps_conn_releasing;
+} nas_sv_mm_deactivate_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool force_to_release;
+} nas_sv_emm_deactivate_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_completed;
+} nas_sv_emm_deactivate_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    ratcm_gas_security_mode_req_struct gas_security;
+    uas_security_context_struct uas_security[2];
+    csfb_indicator_enum csfb_indicator;
+    loopback_mode_status_enum loopback_mode_status;
+    kal_bool is_lai_valid;
+    lai_struct lai;
+    kal_bool is_srvcc;
+    kal_bool is_mapped_rai_valid;
+    rai_struct mapped_rai;
+} nas_sv_mm_nas_ctxt_transfer_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_csfb_fast_return;
+} nas_sv_emm_as_param_update_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8 kasme[KASME_NUM];
+} nas_sv_emm_nas_ctxt_transfer_cnf_struct, nas_sv_emm_as_param_update_ind_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    domain_id_enum connection_domain;
+    kal_bool is_gibi_tag_valid;
+    kal_uint16 gibi_tag;
+} nas_sv_mm_as_param_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    no_action_cause_enum        cause;
+    kal_uint8 trx_id;
+} nas_sv_emm_no_action_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 trx_id;
+} nas_sv_mm_no_action_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    no_action_cause_enum        cause;
+} nwsel_nas_sv_no_action_ind_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    enasas_add_epsbearer_list_struct add_list;
+} nas_sv_esm_as_param_update_req_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    domain_id_enum attach_type;
+    mm_cause_enum cause; /* failure cause*/
+    kal_uint8 att_id; /* Johnny: 3G RAC, for attach_req and detach_req using */
+    mm_cause_enum abnormal_lu_cause; /* MAUI_01650679 */
+    cell_info_and_rat_struct cell_info; /* registered cell info*/
+} nas_sv_mm_attach_cnf_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8                       att_id;
+    domain_id_enum                  attach_type;
+    cell_info_and_rat_struct        cell_info;
+    additional_update_result_enum   additional_update_result;
+    kal_bool                        is_lai_valid;
+    lai_struct                      lai;
+} nas_sv_emm_attach_cnf_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8                   att_id;
+    vgmm_cause_enum             cause; /* failure cause*/
+    cell_info_and_rat_struct    cell_info; /* registered cell info*/
+    kal_uint8 allowed_nssai_length; /* Number of bytes in allowed NSSAI */
+    kal_uint8 allowed_nssai[LEN_OF_ALL_ALLOWED_NSSAI]; /* Allowed NSSAI */
+} nas_sv_vgmm_attach_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8                   att_id;
+    vgmm_cause_enum             cause;
+    cell_info_and_rat_struct    cell_info;
+    kal_bool                    is_reged; /* 5GMM registration status */
+    kal_bool                    is_reattach;
+    sat_loc_send_type_enum      sat_send_type;
+} nas_sv_vgmm_detach_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    emm_nw_feature_support_struct   eps_nw_feature;
+} nas_sv_emm_nw_feature_support_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    domain_id_enum detach_type;
+    mm_cause_enum cause;
+    //kal_bool issearching;
+    kal_bool is_reged;
+    kal_uint8 att_id;
+    cell_info_and_rat_struct cell_info;
+    integ_protect_status_enum is_integ_protected;
+    kal_uint8 invalid_cs_sim_counter;
+    kal_uint8 invalid_ps_sim_counter;
+    sat_loc_send_type_enum sat_send_type;
+    kal_bool  is_reattach;
+} nas_sv_mm_detach_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8                   att_id;
+    domain_id_enum              detach_type;
+    emm_cause_enum              emm_cause;
+    emm_cause_source_enum       emm_cause_source;
+    esm_cause_enum              esm_cause;
+    kal_bool                    is_reged;
+    cell_info_and_rat_struct    cell_info;
+    kal_bool                    is_reattach;
+    sat_loc_send_type_enum      sat_send_type;
+    dos_enhance_info_struct     dos_enhance_info;
+	kal_bool                    is_auth_reject_during_attach;
+} nas_sv_emm_detach_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    umts_duplex_mode_type source_umts_duplex_mode;
+    umts_duplex_mode_type target_umts_duplex_mode;
+    lte_duplex_mode_type source_lte_duplex_mode;
+    lte_duplex_mode_type target_lte_duplex_mode;
+    mode_switch_cause_enum  cause;
+} nas_sv_any_duplex_mode_change_req_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool result;
+} nas_sv_any_duplex_mode_change_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rfoff_cause_enum rfoff_cause;
+} nas_sv_any_rfoff_req_struct;
+
+typedef nas_sv_any_rfoff_req_struct nas_sv_pam_rfoff_ntf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+} nas_sv_ratcm_cell_change_finish_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 multi_plmn_count;
+    plmn_id_struct multi_plmn_id[MAX_NUM_MULTI_PLMN];
+    as_cell_type_enum multi_plmn_cell_type[MAX_NUM_MULTI_PLMN];
+    /* Only for LTE */
+    kal_uint8 multi_ta_code[MAX_NUM_MULTI_PLMN][2]; // 36.331 R14 CR2912 EUTRAN sharing enhancement
+    rat_enum rat;
+    ue_capability_struct acting_capability;
+    kal_bool is_nw_endc_disabled;
+    nas_sv_capability_update_procedure_type_enum query_proc;
+    domain_id_enum capability_query_attach_type;
+    mm_user_search_type_enum capability_query_search_type;    
+} nwsel_nas_sv_capability_query_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    ue_capability_struct capability;
+    kal_bool is_nw_endc_disabled;
+    kal_bool will_trigger_search;   // if nwsel trigger search, can update by next sys_info.
+    nas_sv_local_release_cause_enum local_rel_cause;
+} nwsel_nas_sv_capability_query_cnf_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    ue_capability_struct capability;
+    kal_bool is_nw_endc_disabled;
+    nas_sv_local_release_cause_enum local_rel_cause;
+} nwsel_nas_sv_capability_update_req_struct;
+
+typedef struct{
+    LOCAL_PARA_HDR
+    nas_sv_capability_rat_enum target_rat;
+    ue_capability_struct capability;
+} nas_sv_ratcm_cap_update_req_struct;
+
+typedef struct{
+    LOCAL_PARA_HDR
+    nas_sv_capability_rat_enum target_rat;
+    kal_bool is_successful; /* Indicates whether enabling or disabling capability is successful. */
+} nas_sv_ratcm_cap_update_cnf_struct;
+
+typedef struct {
+    kal_uint32 begin;
+    kal_uint32 end;
+} nas_freq_range_struct;
+
+typedef struct {
+    nas_freq_range_struct freq_range;
+    kal_int16 rssi;
+    kal_uint16 band;
+} nas_ps_result_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum power_scan_rat; // could be multi-rat
+    kal_uint32 nr_num_of_band;
+    kal_uint16 nr_band_list[MAX_SEARCH_BAND_LIST_SIZE];
+    kal_uint32 lte_num_of_band;
+    kal_uint16 lte_band_list[MAX_SEARCH_BAND_LIST_SIZE];
+} nwsel_nas_sv_power_scan_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint16 power_scan_result_list_num;
+    nas_ps_result_struct power_scan_result_list[NAS_MAX_PS_RESULT_LIST];
+} nwsel_nas_sv_power_scan_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint16 power_scan_result_list_num;
+    nas_ps_result_struct power_scan_result_list[NAS_MAX_PS_RESULT_LIST];
+} nwsel_nas_sv_power_scan_ind_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    ps_cause_enum               cause;
+} nas_sv_esm_eps_attach_needed_rej_rsp_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    plmn_id_struct current_plmn_id;
+
+} nas_sv_esm_eps_attach_needed_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool                        force_emc_attach;
+} nas_sv_esm_emc_attach_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    srvcc_status_enum       status;
+} nas_sv_any_srvcc_status_update_ind_struct;
+
+typedef struct
+{
+    kal_bool forbidden_plmn_update_not_allowed; /*MM may change NW reject cause, and no need to add forbidden PLMN */
+    kal_bool is_back_to_abnormal_la;
+    kal_bool is_rau_performed;
+    mm_check_ecall_status_enum ecall_status;
+    kal_bool is_mobility_rau; /*To check whether update_type is periodic rau or mobility rau */
+    integ_protect_status_enum  is_integ_protected;
+    kal_uint8                  invalid_cs_sim_counter;
+    kal_uint8                  invalid_ps_sim_counter;
+
+    /* todo remove, NWSEL shall not know those status*/
+    kal_bool stored_lai_valid;
+    kal_bool stored_rai_valid;
+    gsm_state_enum gsm_attach_state;
+    gprs_state_enum gprs_attach_state;
+    gsm_update_status_enum gsm_update_status;
+    gprs_update_status_enum gprs_update_status;
+
+    /* todo use seperate interface to update */
+    plmn_id_struct rplmn; //from stored lai. Valid when LR_ACCEPT & LR_ACCEPT_PS_ONLY
+   kal_bool is_update_eq_plmn_needed; /* always check; indicate if NWSEL need to update EPLMN */
+    kal_uint8 eq_plmn_byte_count;
+    kal_uint8 eq_plmn_id[MAX_NUM_EQ_PLMN*3]; /* the EPLMN list from NW; 3 is NWSEL_PLMN_LEN */
+
+}mm_rat_specific_param_container_struct;
+
+#include "nwsel_eval_enums.h"
+
+typedef struct
+{
+    kal_bool                        stored_lai_valid;
+    kal_bool                        stored_guti_valid;
+    gsm_state_enum                  gsm_attach_state;
+    eps_state_enum                  lte_attach_state;
+    gsm_update_status_enum          gsm_update_status;
+    eps_update_status_enum          lte_update_status;
+#ifdef __NG_ECALL_SUPPORT__
+    mm_check_ecall_status_enum      ecall_status;
+#endif /* __NG_ECALL_SUPPORT__ */
+} update_param_struct;
+
+typedef struct
+{
+    esm_cause_enum                esm_cause;
+    mm_cause_enum               airlr_cause; // If above lr_cause is replaced, EMM will bring real 'air cause' by this parameter. If it is none, just use lr_cause.
+    kal_bool                    is_esm_attempt_max_times;
+    additional_update_result_enum    additional_update_result;
+    eps_attach_update_result_enum    eps_attach_update_result;
+    kal_bool                        is_ims_vops_support;
+    lte_duplex_type_enum        lte_type;
+    //CR1917: REL12 feature, use REL11 temporarily
+    /* is_eutran_not_allowed should be checked only when Reject#15. Disable E-UTRAN if #15 and this field is True. */
+    kal_bool                    is_eutran_not_allowed;
+    kal_bool                    is_ps_reattach;
+    kal_bool                    is_service_request_max_times;
+    kal_bool                    is_t3402_valid;
+    kal_uint16                    t3402;
+    kal_bool                    is_rach_fail_max_times;
+    integ_protect_status_enum    is_integ_protected;
+    kal_uint8                    invalid_cs_sim_counter;
+    kal_uint8                    invalid_ps_sim_counter;
+    /* use to identify the TA is change or not when TAU/Combined TAU */
+    kal_bool                    is_mobility_tau;
+    kal_bool                    is_persistent_EPS_bearer_exist;
+    kal_bool                    is_emc_bs_support;
+    restrict_dcnr_enum          restrict_dcnr_ind;
+    kal_bool                    is_tau_before_search;
+    update_param_struct         update_param;    
+    /* [TMO] notify NAS_SV not to Disable S1 under real network   */
+    kal_bool                    is_t3402_not_start;
+}emm_rat_specific_param_container_struct;
+
+typedef struct
+{
+    mm_cause_enum                   airlr_cause;
+    vg_ims_3gpp_ind_enum            ims_vops_supported_indicator;
+    vg_emergency_service_ind_enum   emc_supported_indicator;
+    vg_emergency_fallback_ind_enum  emc_fallback_supported_indicator;
+    vgmm_5g_update_status_enum      vg_update_status;
+}vgmm_rat_specific_param_container_struct;
+
+typedef union
+{
+    mm_rat_specific_param_container_struct mm;
+    emm_rat_specific_param_container_struct emm;
+    vgmm_rat_specific_param_container_struct vgmm;
+} nas_rat_specific_param_container_union;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    nas_proc_enum               nas_proc;
+    lr_result_enum              lr_result;
+    mm_cause_enum               lr_cause;    // This value may be replaced by customized cause.
+    kal_uint8                   attempt_counter;
+    nas_rat_specific_param_container_union nas_specific_container;
+} nas_sv_any_regn_result_ind_struct;
+
+typedef nas_sv_any_regn_result_ind_struct nwsel_nas_sv_regn_result_ind_struct;
+
+typedef nwsel_nas_sv_plmn_band_ind_struct nas_sv_ratcm_plmn_band_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    plmn_search_status_enum plmn_search_status;
+    plmn_search_type_enum plmn_search_type; /* new plmn search type */
+} nwsel_nas_sv_nrrc_regn_status_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool    normal_oos_recovery_round_present;
+    kal_uint8   normal_oos_recovery_round;  // default value = 5
+    kal_bool    inactive_fullband_period_present;
+    kal_uint16  inactive_fullband_period;   // default = 200s
+    kal_bool    inactive_sniffer_period_present;    
+    kal_uint8   inactive_sniffer_period;    // default = 30s
+    kal_bool    is_inactive_mode_present;
+    kal_bool    is_inactive_mode;           // True: enter inactive mode, False: leave inactive mode
+} nwsel_nas_sv_nrrc_inactive_mode_configuration_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool is_over_inactive_mode_threshold;
+} nwsel_nas_sv_nrrc_service_recovery_round_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    regn_proc_status_enum mm_proc_status;
+}nwsel_nas_sv_vgmm_regn_status_update_req_struct;
+
+
+/* NRRC related NAS interface */
+
+/* shall sync nas_sv_nrrc_plmn_loss_ind_struct */
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool is_as_plmn_list_present;
+    as_plmn_list_struct as_plmn_list;
+} nwsel_nas_sv_nr_plmn_loss_ind_struct;
+
+/* common */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8                   multi_plmn_count;
+    plmn_id_struct              multi_plmn_id[MAX_NUM_MULTI_PLMN];
+    as_cell_type_enum           multi_cell_type[MAX_NUM_MULTI_PLMN];
+    /// source from cell reselection or search
+    found_ind_source_enum source;
+    rat_enum rat;
+    cell_id_union cell_id;
+} nas_sv_any_plmn_found_ind_struct;
+
+typedef nas_sv_any_plmn_found_ind_struct nwsel_nas_sv_plmn_found_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    rat_enum anchor_rat;
+    plmn_search_status_enum plmn_search_status;
+    as_cell_type_enum cell_type;
+    plmn_search_type_enum       plmn_search_type; /* Only for EMM/PLMNSEL to know if needed to check Forbidden TA list */
+} nas_sv_any_search_status_update_req_struct;
+
+typedef nas_sv_any_search_status_update_req_struct nwsel_nas_sv_search_status_update_req_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    rat_enum disable_rat;
+} nas_sv_any_rat_disable_config_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool is_user_plmn_list_ongoing;
+} nas_sv_any_plmn_list_status_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8                   plmn_id_count;
+    plmn_id_struct              plmn_id[MD1_MAX_NUM_HPLMN];
+    kal_uint8                   home_country_mcc[3];
+} nas_sv_any_hplmn_info_update_req_struct;
+
+typedef nas_sv_any_hplmn_info_update_req_struct nwsel_nas_sv_hplmn_info_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    update_eplmn_struct         eplmn_info;
+} nas_sv_any_eplmn_update_ind_struct;
+
+typedef nas_sv_any_eplmn_update_ind_struct nwsel_nas_sv_eplmn_update_ind_struct;
+
+/* eval refactor */
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    update_param_struct         update_param;
+} nas_sv_emm_update_param_ind_struct;
+
+typedef nas_sv_emm_update_param_ind_struct nwsel_nas_sv_emm_update_param_ind_struct;
+
+/***** message structure definition *****/
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool                    is_plmn_search_2G3G_ongoing;
+    as_cell_type_enum           cell_type;               // 2G/3G camped on cell type
+    plmn_search_type_enum       plmn_search_type; /* Only for EMM/PLMNSEL to know if needed to check Forbidden TA list */
+
+} nas_sv_emm_search_status_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool                    prefer_ims_emergency;
+} nas_sv_emm_search_preference_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    regn_proc_status_enum       mm_proc_status;         // indicate if MS is in limited or no service
+    plmn_search_status_enum     plmn_search_status;
+    plmn_search_type_enum       plmn_search_type;
+    // sniff RPLMN
+    // only valid when the conditions hold
+    // plmn_search_status  == PLMN_SEARCH_UNRELATED
+    // mm_proc_status == (MS_IN_NO_SERVICE || MS_IN_LIMITED_SERVICE)
+    kal_uint8                   plmn_id_count;
+    plmn_id_struct              plmn_id[MAX_NUM_SEARCH_PLMN];
+    kal_bool                    is_send_to_as;
+    kal_bool                    other_rat_found_notify_4G;
+} nas_sv_emm_regn_status_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    domain_id_enum  conn_domain;
+    kal_bool        is_waiting_cell; //RRC connection release, no cell case, need to wiat ERRC to report a new cell
+} nas_sv_emm_out_of_service_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    as_plmn_list_struct         eas_plmn_list;
+    kal_bool                    full_band_searched_4g;
+    plmn_loss_reason_enum       plmn_loss_reason;
+} nas_sv_emm_plmn_loss_ind_struct;
+
+//#if defined( __VOLTE_SUPPORT__) || defined (UNIT_TEST)
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8                   emc_fplmn_count;
+    plmn_id_struct              emc_fplmn_list[MAX_NUM_EMC_FPLMN];
+    // band 0 => all band disabled, bar this PLMN
+    kal_uint16                  emc_fplmn_band[MAX_NUM_EMC_FPLMN];
+} nas_sv_emm_emc_fplmn_list_update_req_struct;
+//#endif
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    voice_domain_preference_enum    eutran_voice_domain_preference;
+    ue_mode_enum                    ue_mode;
+    kal_bool                        sms_only;
+    voice_domain_preference_enum    utran_voice_domain_preference;
+} nas_sv_emm_uemode_param_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16           t3402_value;   // t3402 value in seconds
+} nas_sv_emm_t3402_change_ind_struct;  // __REL10__: t3402
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    plmn_id_struct current_plmn_id;
+    timer_status_enum status;
+} rac_nas_sv_t3402_stop_ind_struct;
+
+typedef rac_nas_sv_t3402_stop_ind_struct nas_sv_emm_t3402_stop_ind_struct;
+
+//#if defined( __VOLTE_SUPPORT__) || defined (UNIT_TEST)
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool        prefer_ims_emergency;
+} nas_sv_emm_plmn_search_preference_update_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    emc_status_enum         emc_status;
+    emc_pdn_status_enum     emc_pdn_status;
+} nas_sv_emm_emergency_status_update_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    rat_enum rat;
+    kal_uint32 num_of_band;
+    kal_uint16 band_list[MAX_SEARCH_BAND_LIST_SIZE];
+} nwsel_nas_sv_background_band_learning_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    rat_enum rat;
+} nwsel_nas_sv_background_band_learning_cnf_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    rat_enum rat;
+} nwsel_nas_sv_background_band_learning_stop_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    rat_enum rat;
+} nwsel_nas_sv_background_band_learning_stop_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR    
+    kal_uint8 local_rel_cause;
+} nas_sv_check_cap_update_ind_struct;
+
+//#endif // __VOLTE_SUPPORT__
+#if defined(__LTE_RAT__) && (defined(__GSM_RAT__) || defined(__UMTS_RAT__))
+
+typedef errc_sim_protect_req_struct nas_sv_emm_power_on_protection_req_struct;
+
+#endif
+
+#ifdef __FIVEG_NAS__
+
+typedef struct
+{
+    /* VGMM Definitions */
+    vgmm_bcast_regn_update_enum  vgmm_regn_update_type;
+    
+    kal_bool                    vgmm_msg_type_present;
+    vgmm_msg_type_enum          vgmm_msg_type;
+
+    kal_bool                    vgmm_reg_type_present;
+    vgmm_reg_type_enum          vgmm_reg_type;
+    
+    kal_bool                    vgmm_detach_type_present;
+    vgmm_detach_type_enum       vgmm_detach_type;
+
+    kal_bool                    vgmm_cause_present;
+    vgmm_cause_enum             vgmm_cause;
+
+    kal_bool                    vgmm_attempt_cnt_present;
+    kal_uint8                   vgmm_attempt_cnt;
+
+    kal_bool                    vgmm_ims_voice_over_ps_ind_present;    
+    ims_ind_enum                vgmm_ims_voice_over_ps_ind;
+    /* End of VGMM Definitions */
+}nas_sv_vgmm_broadcast_regn_result_struct;
+#endif //__FIVEG_NAS__
+
+typedef struct
+{
+    /* EMM Definitions */    
+    emm_msg_type_enum           emm_msg_type;
+
+    kal_bool                    emm_cause_present;
+    emm_cause_enum              emm_cause;
+
+    /* Whether the UE is registered or not according to state  and current executing procedure in EMM view 
+         used for EMM/VGMM un-sync state checking for any_xmm_broadcast_regn_result handling */
+    emm_bcast_regn_update_enum  emm_regn_update_type;
+    /* End of EMM Definitions */
+}nas_sv_emm_broadcast_regn_result_struct;
+
+typedef struct
+{
+    /* MM Definitions */    
+    mm_msg_type_enum            mm_msg_type;
+
+    kal_bool                    is_mm_rej_cause_present;
+    mm_cause_enum               mm_rej_cause;
+	
+    kal_bool                    is_mm_attempt_cnt_present;
+    kal_uint8                   mm_attempt_cnt;
+    /* End of MM Definitions */
+}nas_sv_mm_broadcast_regn_result_struct;
+
+typedef struct
+{
+    /* GMM Definitions */    
+    gmm_msg_type_enum           gmm_msg_type;
+	
+    kal_bool                    is_gmm_proc_direction_present;
+    gmm_proc_direction_enum     gmm_proc_direction;
+	
+    kal_bool                    is_gmm_attach_type_present;
+    gmm_attach_type_enum        gmm_attach_type;
+	
+    kal_bool                    is_gmm_update_type_present;
+    gmm_update_type_enum        gmm_update_type;
+	
+    kal_bool                    is_gmm_detach_type_present;
+    gmm_detach_type_enum        gmm_detach_type; 
+	
+    kal_bool                    is_gmm_attach_result_present;
+    gmm_attach_result_enum      gmm_attach_result;
+
+	kal_bool                    is_gmm_update_result_present;
+    gmm_update_result_enum      gmm_update_result;
+	
+    kal_bool                    is_gmm_cause_present;
+    mm_cause_enum               gmm_cause;
+		
+    kal_bool                    is_gmm_attempt_cnt_present;
+    kal_uint8                   gmm_attempt_cnt;
+    /* End of GMM Definitions */
+}nas_sv_gmm_broadcast_regn_result_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+
+    /* XMM Common Definitions */
+    rat_type_enum source_rat;
+    integ_protect_status_enum   is_integ_protected;
+    domain_id_enum cn_domain;
+    /* End of XMM Common Definitions */
+
+    union
+    {
+    #ifdef __FIVEG_NAS__
+        /* VGMM Definitions */
+        nas_sv_vgmm_broadcast_regn_result_struct    vgmm_info;
+    #endif //__FIVEG_NAS__
+
+        /* EMM Definitions */
+        nas_sv_emm_broadcast_regn_result_struct     emm_info;
+
+	/* MM Definitions */
+        nas_sv_mm_broadcast_regn_result_struct      mm_info;
+
+	/* GMM Definitions */
+        nas_sv_gmm_broadcast_regn_result_struct     gmm_info;
+    }info;
+    
+} nas_sv_xmm_broadcast_regn_result_struct;
+
+typedef nas_sv_xmm_broadcast_regn_result_struct nas_sv_vgmm_broadcast_regn_result_ind_struct;
+typedef nas_sv_xmm_broadcast_regn_result_struct nas_sv_emm_broadcast_regn_result_ind_struct;
+typedef nas_sv_xmm_broadcast_regn_result_struct nas_sv_mm_broadcast_regn_result_ind_struct;
+typedef nas_sv_xmm_broadcast_regn_result_struct nas_sv_any_broadcast_regn_result_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+
+
+    xmm_common_timer_id_enum xmm_common_timer_id;
+    kal_bool status;                                /**< KAL_FALSE:Stop, KAL_TRUE:start*/
+    plmn_id_struct backoff_timer_plmn;
+    kal_bool is_backoff_timer_plmn_in_eq_plmn_list;
+
+#ifdef __SUPPORT_CLIB_TIME__                        /**< Target & MoDIS */
+    kal_int64 expire_time;                          /**< unit is seconds */
+#else                                               /**< UESIM */
+    kal_uint16 remaining_time;                      /**< unit is seconds */
+#endif
+} nas_sv_xmm_broadcast_timer_status_struct;
+
+typedef nas_sv_xmm_broadcast_timer_status_struct nas_sv_vgmm_broadcast_timer_status_ind_struct;
+typedef nas_sv_xmm_broadcast_timer_status_struct nas_sv_emm_broadcast_timer_status_ind_struct;
+typedef nas_sv_xmm_broadcast_timer_status_struct nas_sv_mm_broadcast_timer_status_ind_struct;
+typedef nas_sv_xmm_broadcast_timer_status_struct nas_sv_any_broadcast_timer_status_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+
+    /* XMM Common Definitions */
+    rat_type_enum source_rat;
+
+} nas_sv_xmm_broadcast_detach_required_struct;
+
+typedef nas_sv_xmm_broadcast_detach_required_struct nas_sv_emm_broadcast_detach_required_ind_struct;
+typedef nas_sv_xmm_broadcast_detach_required_struct nas_sv_any_broadcast_detach_required_ind_struct;
+
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_allow;
+} nas_sv_any_operation_allow_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    nas_sv_any_operation_enum operation_to_be_allowed;
+} nas_sv_any_operation_allow_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    nas_sv_manipulate_connection_enum operation_to_be_exe;
+    kal_bool is_local_release_later;
+} nas_sv_any_manipulate_connection_req_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool is_triggered_by_sys_info;
+    ue_capability_struct capability;
+} nas_sv_any_mm_cap_update_req_struct;
+
+typedef struct 
+{
+    LOCAL_PARA_HDR
+    vg_option_enum vg_option_bitmap; 
+    kal_bool is_need_local_release;
+    kal_bool is_trigger_nr_search; //used for option 2 is turned on and search SA
+} rac_nas_sv_vg_option_update_req_struct;
+
+typedef rac_nas_sv_vg_option_update_req_struct nas_sv_any_vg_option_update_req_struct;
+
+typedef l4c_general_modem_configure_set_req_struct nas_sv_any_general_modem_configure_set_req_struct;
+typedef l4c_general_modem_configure_set_cnf_struct nas_sv_any_general_modem_configure_set_cnf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    mode_switch_cause_enum  cause;
+} nwsel_nas_sv_vgmm_global_mode_change_start_req_struct;
+
+typedef struct 
+{
+    LOCAL_PARA_HDR
+    kal_bool is_persistent_pdu_session_exist;
+} nas_sv_vgsm_persistent_pdu_session_ind_struct;
+
+typedef nas_sv_vgsm_persistent_pdu_session_ind_struct nwsel_nas_sv_vgsm_persistent_pdu_session_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool is_roaming;
+    nwsel_capability_disabled_reason_enum disabled_reason;
+} nwsel_nas_sv_disable_info_update_ntf_struct;
+
+typedef nwsel_nas_sv_disable_info_update_ntf_struct nas_sv_any_disable_info_update_ntf_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_searching;
+} nwsel_nas_sv_as_plmn_search_report_ind_struct;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+
+#endif
+
+