/*
 *
 *  oFono - Open Source Telephony
 *
 *  Copyright (C) 2008-2011  Intel Corporation. All rights reserved.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

#include <glib.h>
#include <ell/ell.h>

#include <ofono/types.h>
#include "smsutil.h"
#include "stkutil.h"
#include "util.h"

#include "stk-test-data.h"

#define MAX_ITEM 100

struct sms_submit_test {
	gboolean rd;
	enum sms_validity_period_format vpf;
	gboolean rp;
	gboolean udhi;
	gboolean srr;
	guint8 mr;
	struct sms_address daddr;
	guint8 pid;
	guint8 dcs;
	struct sms_validity_period vp;
	guint8 udl;
	guint8 ud[160];
};

struct sms_test {
	struct sms_address sc_addr;
	enum sms_type type;
	union {
		struct sms_deliver deliver;
		struct sms_deliver_ack_report deliver_ack_report;
		struct sms_deliver_err_report deliver_err_report;
		struct sms_submit_test submit;
		struct sms_submit_ack_report submit_ack_report;
		struct sms_submit_err_report submit_err_report;
		struct sms_command command;
		struct sms_status_report status_report;
	};
};

static gboolean g_mem_equal(const unsigned char *v1, const unsigned char *v2,
				unsigned int len)
{
	unsigned int i;

	for (i = 0; i < len; i++)
		if (v1[i] != v2[i])
			return FALSE;

	return TRUE;
}

static inline void check_common_bool(const ofono_bool_t command,
					const ofono_bool_t test)
{
	g_assert(command == test);
}

static inline void check_common_byte(const unsigned char command,
					const unsigned char test)
{
	g_assert(command == test);
}

static inline void check_common_text(const char *command, const char *test)
{
	if (test == NULL) {
		g_assert(command == NULL);
		return;
	}

	g_assert(command != NULL);
	g_assert(g_str_equal(command, test));
}

static inline void check_common_byte_array(
				const struct stk_common_byte_array *command,
				const struct stk_common_byte_array *test)
{
	if (test->len == 0) {
		g_assert(command->len == 0);
		return;
	}

	g_assert(command->len != 0);
	g_assert(command->len == test->len);
	g_assert(g_mem_equal(command->array, test->array, test->len));
}

/* Defined in TS 102.223 Section 8.1 */
static inline void check_address(const struct stk_address *command,
					const struct stk_address *test)
{
	g_assert(command->ton_npi == test->ton_npi);
	check_common_text(command->number, test->number);
}

/* Defined in TS 102.223 Section 8.2 */
static inline void check_alpha_id(const char *command, const char *test)
{
	if (test != NULL && strlen(test) > 0)
		check_common_text(command, test);
	else
		g_assert(command == NULL);
}

/* Defined in TS 102.223 Section 8.3 */
static void check_subaddress(const struct stk_subaddress *command,
					const struct stk_subaddress *test)
{
	if (test->len == 0) {
		g_assert(command->len == 0);
		return;
	}

	g_assert(command->len != 0);
	g_assert(g_mem_equal(command->subaddr, test->subaddr, test->len));
}

/* Defined in TS 102.223 Section 8.4 */
static void check_ccp(const struct stk_ccp *command,
					const struct stk_ccp *test)
{
	if (test->len == 0) {
		g_assert(command->len == 0);
		return;
	}

	g_assert(command->len != 0);
	g_assert(g_mem_equal(command->ccp, test->ccp, test->len));
}

/* Defined in TS 102.223 Section 8.8 */
static void check_duration(const struct stk_duration *command,
					const struct stk_duration *test)
{
	g_assert(command->unit == test->unit);
	g_assert(command->interval == test->interval);
}

/* Defined in TS 102.223 Section 8.9 */
static void check_item(const struct stk_item *command,
					const struct stk_item *test)
{
	g_assert(command->id == test->id);
	check_common_text(command->text, test->text);
}

/* Defined in TS 102.223 Section 8.10 */
static inline void check_item_id(const unsigned char command,
					const unsigned char test)
{
	check_common_byte(command, test);
}

static void check_items(struct l_queue *command, const struct stk_item *test)
{
	struct stk_item *si;
	const struct l_queue_entry *entry;
	unsigned int i = 0;

	for (entry = l_queue_get_entries(command); entry; entry = entry->next) {
		si = entry->data;
		check_item(si, &test[i++]);
	}

	g_assert(test[i].id == 0);
}

/* Defined in TS 102.223 Section 8.11 */
static void check_response_length(const struct stk_response_length *command,
					const struct stk_response_length *test)
{
	g_assert(command->min == test->min);
	g_assert(command->max == test->max);
}

/* Defined in TS 102.223 Section 8.13 */
static void check_gsm_sms(const struct sms *command,
					const struct sms_test *test)
{
	g_assert(command->sc_addr.number_type == test->sc_addr.number_type);
	g_assert(command->sc_addr.numbering_plan ==
			test->sc_addr.numbering_plan);
	g_assert(g_str_equal(command->sc_addr.address, test->sc_addr.address));

	switch (test->type) {
	case SMS_TYPE_SUBMIT: {
		const struct sms_submit *cs = &command->submit;
		const struct sms_submit_test *ts = &test->submit;
		enum sms_charset charset;

		g_assert(cs->rd == ts->rd);
		g_assert(cs->vpf == ts->vpf);
		g_assert(cs->rp == ts->rp);
		g_assert(cs->udhi == ts->udhi);
		g_assert(cs->srr == ts->srr);
		g_assert(cs->mr == ts->mr);

		g_assert(cs->daddr.number_type == ts->daddr.number_type);
		g_assert(cs->daddr.numbering_plan == ts->daddr.numbering_plan);
		g_assert(g_str_equal(cs->daddr.address, ts->daddr.address));

		g_assert(cs->pid == ts->pid);
		g_assert(cs->dcs == ts->dcs);

		switch (ts->vpf) {
		case SMS_VALIDITY_PERIOD_FORMAT_RELATIVE:
			g_assert(cs->vp.relative == ts->vp.relative);
			break;
		case SMS_VALIDITY_PERIOD_FORMAT_ABSOLUTE: {
			const struct sms_scts *ca = &cs->vp.absolute;
			const struct sms_scts *ta = &ts->vp.absolute;
			g_assert(ca->year == ta->year);
			g_assert(ca->month == ta->month);
			g_assert(ca->day == ta->day);
			g_assert(ca->hour == ta->hour);
			g_assert(ca->minute == ta->minute);
			g_assert(ca->second == ta->second);
			g_assert(ca->has_timezone == ta->has_timezone);

			if (ta->has_timezone)
				g_assert(ca->timezone == ta->timezone);

			break;
		}
		case SMS_VALIDITY_PERIOD_FORMAT_ENHANCED:
			g_assert(g_mem_equal(cs->vp.enhanced,
							ts->vp.enhanced, 7));
			break;
		default:
			break;
		}

		g_assert(cs->udl == ts->udl);

		sms_dcs_decode(ts->dcs, NULL, &charset, NULL, NULL);

		if (charset == SMS_CHARSET_8BIT)
			g_assert(g_str_equal(cs->ud, ts->ud));
		else {
			GSList *sms_list = NULL;
			char *message;
			sms_list = g_slist_prepend(sms_list, (void *)command);
			message = sms_decode_text(sms_list);
			g_assert(g_str_equal(message, ts->ud));
			g_free(message);
			g_slist_free(sms_list);
		}

		break;
	}
	default:
		g_assert(FALSE);
	}
}

/* Defined in TS 102.223 Section 8.14 */
static inline void check_ss(const struct stk_ss *command,
					const struct stk_ss *test)
{
	g_assert(command->ton_npi == test->ton_npi);
	check_common_text(command->ss, test->ss);
}

/* Defined in TS 102.223 Section 8.15 */
static inline void check_text(const char *command, const char *test)
{
	check_common_text(command, test);
}

/* Defined in TS 102.223 Section 8.16 */
static inline void check_tone(const ofono_bool_t command,
					const ofono_bool_t test)
{
	check_common_bool(command, test);
}

/* Defined in TS 102.223 Section 8.17 */
static inline void check_ussd(const struct stk_ussd_string *command,
							const char *test)
{
	char *utf8 = ussd_decode(command->dcs, command->len, command->string);
	check_common_text(utf8, test);
	g_free(utf8);
}

/* Defined in TS 102.223 Section 8.18 */
static void check_file_list(struct l_queue *command,
						const struct stk_file *test)
{
	struct stk_file *sf;
	const struct l_queue_entry *entry = l_queue_get_entries(command);
	unsigned int i = 0;

	for (; entry; entry = entry->next) {
		sf = entry->data;
		g_assert(sf->len == test[i].len);
		g_assert(!memcmp(sf->file, test[i++].file, sf->len));
	}

	g_assert(test[i].len == 0);
}

/* Defined in TS 102.223 Section 8.23 */
static inline void check_default_text(const char *command, const char *test)
{
	check_common_text(command, test);
}

/* Defined in TS 102.223 Section 8.24 */
static void check_items_next_action_indicator(
			const struct stk_items_next_action_indicator *command,
			const struct stk_items_next_action_indicator *test)
{
	g_assert(command->len == test->len);
	g_assert(g_mem_equal(command->list, test->list, test->len));
}

/* Defined in TS 102.223 Section 8.25 */
static void check_event_list(const struct stk_event_list *command,
				const struct stk_event_list *test)
{
	g_assert(command->len == test->len);
	g_assert(g_mem_equal(command->list, test->list, test->len));
}

/* Defined in TS 102.223 Section 8.31 */
static void check_icon_id(const struct stk_icon_id *command,
					const struct stk_icon_id *test)
{
	g_assert(command->id == test->id);
	g_assert(command->qualifier == test->qualifier);
}

/* Defined in TS 102.223 Section 8.32 */
static void check_item_icon_id_list(const struct stk_item_icon_id_list *command,
				const struct stk_item_icon_id_list *test)
{
	g_assert(command->qualifier == test->qualifier);
	g_assert(command->len == test->len);
	g_assert(g_mem_equal(command->list, test->list, test->len));
}

/* Defined in TS 102.223 Section 8.35 */
static void check_c_apdu(const struct stk_c_apdu *command,
				const struct stk_c_apdu *test)
{
	g_assert(command->cla == test->cla);
	g_assert(command->ins == test->ins);
	g_assert(command->p1 == test->p1);
	g_assert(command->p2 == test->p2);
	g_assert(command->lc == test->lc);
	g_assert(g_mem_equal(command->data, test->data, test->lc));

	if (test->has_le)
		g_assert(command->le == test->le);
}

/* Defined in TS 102.223 Section 8.37 */
static inline void check_timer_id(const unsigned char command,
					const unsigned char test)
{
	check_common_byte(command, test);
}

/* Defined in TS 102.223 Section 8.38 */
static inline void check_timer_value(const struct stk_timer_value *command,
					const struct stk_timer_value *test)
{
	g_assert(command->hour == test->hour);
	g_assert(command->minute == test->minute);
	g_assert(command->second == test->second);
}

/* Defined in TS 102.223 Section 8.40 */
static inline void check_at_command(const char *command, const char *test)
{
	check_common_text(command, test);
}

/* Defined in TS 102.223 Section 8.43 */
static inline void check_imm_resp(const unsigned char command,
					const unsigned char test)
{
	check_common_byte(command, test);
}

/* Defined in TS 102.223 Section 8.44 */
static inline void check_dtmf_string(const char *command, const char *test)
{
	check_common_text(command, test);
}

/* Defined in TS 102.223 Section 8.45 */
static inline void check_language(const char *command, const char *test)
{
	check_common_text(command, test);
}

/* Defined in TS 102.223 Section 8.47 */
static inline void check_browser_id(const unsigned char command,
					const unsigned char test)
{
	check_common_byte(command, test);
}

/* Defined in TS 102.223 Section 8.48 */
static inline void check_url(const char *command, const char *test)
{
	check_common_text(command, test);
}

/* Defined in TS 102.223 Section 8.49 */
static inline void check_bearer(const struct stk_common_byte_array *command,
				const struct stk_common_byte_array *test)
{
	check_common_byte_array(command, test);
}

/* Defined in TS 102.223 Section 8.50 */
static void check_provisioning_file_reference(const struct stk_file *command,
					const struct stk_file *test)
{
	g_assert(command->len == test->len);
	g_assert(g_mem_equal(command->file, test->file, test->len));
}

static void check_provisioning_file_references(struct l_queue *command,
						const struct stk_file *test)
{
	struct stk_file *sf;
	const struct l_queue_entry *l;
	unsigned int i = 0;

	for (l = l_queue_get_entries(command); l; l = l->next) {
		sf = l->data;
		check_provisioning_file_reference(sf, &test[i++]);
	}

	g_assert(test[i].len == 0);
}

/* Defined in TS 102.223 Section 8.52 */
static void check_bearer_desc(const struct stk_bearer_description *command,
				const struct stk_bearer_description *test)
{
	g_assert(command->type == test->type);

	if (test->type == STK_BEARER_TYPE_GPRS_UTRAN) {
		check_common_byte(command->gprs.precedence,
				test->gprs.precedence);
		check_common_byte(command->gprs.delay,
				test->gprs.delay);
		check_common_byte(command->gprs.reliability,
				test->gprs.reliability);
		check_common_byte(command->gprs.peak,
				test->gprs.peak);
		check_common_byte(command->gprs.mean,
				test->gprs.mean);
		check_common_byte(command->gprs.pdp_type,
				test->gprs.pdp_type);

		return;
	}
}

/* Defined in TS 102.223 Section 8.53 */
static inline void check_channel_data(
				const struct stk_common_byte_array *command,
				const struct stk_common_byte_array *test)
{
	check_common_byte_array(command, test);
}

/* Defined in TS 102.223 Section 8.58 */
static inline void check_other_address(
				const struct stk_other_address *command,
				const struct stk_other_address *test)
{
	check_common_byte(command->type, test->type);

	if (test->type == STK_ADDRESS_IPV4)
		g_assert(command->addr.ipv4 == test->addr.ipv4);
	else
		g_assert(g_mem_equal(command->addr.ipv6, test->addr.ipv6, 16));
}

/* Defined in TS 102.223 Section 8.59 */
static void check_uicc_te_interface(const struct stk_uicc_te_interface *command,
				const struct stk_uicc_te_interface *test)
{
	check_common_byte(command->protocol, test->protocol);
	g_assert(command->port == test->port);
}

/* Defined in TS 102.223 Section 8.60 */
static inline void check_aid(const struct stk_aid *command,
					const struct stk_aid *test)
{
	g_assert(g_mem_equal(command->aid, test->aid, test->len));
}

/* Defined in TS 102.223 Section 8.70 */
static inline void check_network_access_name(const char *command,
						const char *test)
{
	check_common_text(command, test);
}

/* Defined in TS 102.223 Section 8.71 */
static inline void check_cdma_sms_tpdu(
				const struct stk_common_byte_array *command,
				const struct stk_common_byte_array *test)
{
	check_common_byte_array(command, test);
}

static void check_text_attr_html(const struct stk_text_attribute *test,
				char *text, const char *expected_html)
{
	char *html;
	unsigned short attrs[256];
	int i;

	if (expected_html == NULL)
		return;

	for (i = 0; i < test->len; i += 4) {
		attrs[i] = test->attributes[i];
		attrs[i + 1] = test->attributes[i + 1];
		attrs[i + 2] = test->attributes[i + 2];
		attrs[i + 3] = test->attributes[i + 3];
	}
	html = stk_text_to_html(text, attrs, test->len / 4);

	g_assert(memcmp(html, expected_html, strlen(expected_html)) == 0);

	g_free(html);
}

/* Defined in TS 102.223 Section 8.72 */
static void check_text_attr(const struct stk_text_attribute *command,
					const struct stk_text_attribute *test)
{
	g_assert(command->len == test->len);
	g_assert(g_mem_equal(command->attributes, test->attributes, test->len));
}

/* Defined in TS 102.223 Section 8.73 */
static void check_item_text_attribute_list(
			const struct stk_item_text_attribute_list *command,
			const struct stk_item_text_attribute_list *test)
{
	g_assert(command->len == test->len);
	g_assert(g_mem_equal(command->list, test->list, test->len));
}

/* Defined in TS 102.223 Section 8.80 */
static void check_frame_id(const struct stk_frame_id *command,
					const struct stk_frame_id *test)
{
	g_assert(command->has_id == test->has_id);
	if (test->has_id)
		g_assert(command->id == test->id);
}

struct display_text_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	const char *text;
	struct stk_icon_id icon_id;
	ofono_bool_t immediate_response;
	struct stk_duration duration;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
	const char *html;
};

static struct display_text_test display_text_data_111 = {
	.pdu = display_text_111,
	.pdu_len = sizeof(display_text_111),
	.qualifier = 0x80,
	.text = "Toolkit Test 1"
};

static struct display_text_test display_text_data_131 = {
	.pdu = display_text_131,
	.pdu_len = sizeof(display_text_131),
	.qualifier = 0x81,
	.text = "Toolkit Test 2"
};

static struct display_text_test display_text_data_141 = {
	.pdu = display_text_141,
	.pdu_len = sizeof(display_text_141),
	.qualifier = 0x80,
	.text = "Toolkit Test 3"
};

static struct display_text_test display_text_data_151 = {
	.pdu = display_text_151,
	.pdu_len = sizeof(display_text_151),
	.qualifier = 0x00,
	.text = "Toolkit Test 4"
};

static struct display_text_test display_text_data_161 = {
	.pdu = display_text_161,
	.pdu_len = sizeof(display_text_161),
	.qualifier = 0x80,
	.text = "This command instructs the ME to display a text message. "
			"It allows the SIM to define the priority of that "
			"message, and the text string format. Two types of "
			"prio"
};

static struct display_text_test display_text_data_171 = {
	.pdu = display_text_171,
	.pdu_len = sizeof(display_text_171),
	.qualifier = 0x80,
	.text = "<GO-BACKWARDS>"
};

static struct display_text_test display_text_data_511 = {
	.pdu = display_text_511,
	.pdu_len = sizeof(display_text_511),
	.qualifier = 0x80,
	.text = "Basic Icon",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct display_text_test display_text_data_521 = {
	.pdu = display_text_521,
	.pdu_len = sizeof(display_text_521),
	.qualifier = 0x80,
	.text = "Colour Icon",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct display_text_test display_text_data_531 = {
	.pdu = display_text_531,
	.pdu_len = sizeof(display_text_531),
	.qualifier = 0x80,
	.text = "Basic Icon",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct display_text_test display_text_data_611 = {
	.pdu = display_text_611,
	.pdu_len = sizeof(display_text_611),
	.qualifier = 0x80,
	.text = "ЗДРАВСТВУЙТЕ"
};

static struct display_text_test display_text_data_711 = {
	.pdu = display_text_711,
	.pdu_len = sizeof(display_text_711),
	.qualifier = 0x80,
	.text = "10 Second",
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 10,
	}
};

static struct display_text_test display_text_data_811 = {
	.pdu = display_text_811,
	.pdu_len = sizeof(display_text_811),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 },
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 1</span>"
		"</div>",
};

static struct display_text_test display_text_data_821 = {
	.pdu = display_text_821,
	.pdu_len = sizeof(display_text_821),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x01, 0xB4 },
	},
	.html = "<div style=\"text-align: center;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 1</span>"
		"</div>",
};

static struct display_text_test display_text_data_831 = {
	.pdu = display_text_831,
	.pdu_len = sizeof(display_text_831),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x02, 0xB4 },
	},
	.html = "<div style=\"text-align: right;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 1</span>"
		"</div>",
};

static struct display_text_test display_text_data_841 = {
	.pdu = display_text_841,
	.pdu_len = sizeof(display_text_841),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x04, 0xB4 },
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"big;color: #347235;background-color: #FFFF00;\">"
		"Text Attribute 1</span></div>",
};

static struct display_text_test display_text_data_851 = {
	.pdu = display_text_851,
	.pdu_len = sizeof(display_text_851),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x08, 0xB4 },
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"small;color: #347235;background-color: #FFFF00;\">"
		"Text Attribute 1</span></div>",
};

static struct display_text_test display_text_data_861 = {
	.pdu = display_text_861,
	.pdu_len = sizeof(display_text_861),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x10, 0xB4 },
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-weight: "
		"bold;color: #347235;background-color: #FFFF00;\">"
		"Text Attribute 1</span></div>",
};

static struct display_text_test display_text_data_871 = {
	.pdu = display_text_871,
	.pdu_len = sizeof(display_text_871),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x20, 0xB4 },
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-style: "
		"italic;color: #347235;background-color: #FFFF00;\">"
		"Text Attribute 1</span></div>",
};

static struct display_text_test display_text_data_881 = {
	.pdu = display_text_881,
	.pdu_len = sizeof(display_text_881),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x40, 0xB4 },
	},
	.html = "<div style=\"text-align: left;\"><span style=\""
		"text-decoration: underline;color: #347235;"
		"background-color: #FFFF00;\">Text Attribute 1</span></div>",
};

static struct display_text_test display_text_data_891 = {
	.pdu = display_text_891,
	.pdu_len = sizeof(display_text_891),
	.qualifier = 0x80,
	.text = "Text Attribute 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x80, 0xB4 },
	},
	.html = "<div style=\"text-align: left;\"><span style=\""
		"text-decoration: line-through;color: #347235;"
		"background-color: #FFFF00;\">Text Attribute 1</span></div>",
};

static struct display_text_test display_text_data_911 = {
	.pdu = display_text_911,
	.pdu_len = sizeof(display_text_911),
	.qualifier = 0x80,
	.text = "你好"
};

static struct display_text_test display_text_data_1011 = {
	.pdu = display_text_1011,
	.pdu_len = sizeof(display_text_1011),
	.qualifier = 0x80,
	.text = "80ル"
};

/* Defined in TS 102.384 Section 27.22.4.1 */
static void test_display_text(gconstpointer data)
{
	const struct display_text_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_DISPLAY_TEXT);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_DISPLAY);

	g_assert(command->display_text.text);
	check_text(command->display_text.text, test->text);
	check_icon_id(&command->display_text.icon_id, &test->icon_id);
	check_imm_resp(command->display_text.immediate_response,
						test->immediate_response);
	check_duration(&command->display_text.duration, &test->duration);
	check_text_attr(&command->display_text.text_attr,
						&test->text_attr);
	check_text_attr_html(&command->display_text.text_attr,
				command->display_text.text,
				test->html);
	check_frame_id(&command->display_text.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct get_inkey_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *text;
	struct stk_icon_id icon_id;
	struct stk_duration duration;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
	char *html;
};

static unsigned char get_inkey_711[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x80, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x2B, 0x22 };

static unsigned char get_inkey_712[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x80, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x2B, 0x22 };

static unsigned char get_inkey_912[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_922[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_932[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_942[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22, 0xD0, 0x04, 0x00,
						0x09, 0x00, 0xB4 };

static unsigned char get_inkey_943[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_952[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22, 0xD0, 0x04, 0x00,
						0x09, 0x00, 0xB4 };

static unsigned char get_inkey_953[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_962[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22, 0xD0, 0x04, 0x00,
						0x09, 0x00, 0xB4 };

static unsigned char get_inkey_963[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_972[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22, 0xD0, 0x04, 0x00,
						0x09, 0x00, 0xB4 };

static unsigned char get_inkey_973[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_982[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22, 0xD0, 0x04, 0x00,
						0x09, 0x00, 0xB4 };

static unsigned char get_inkey_983[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_992a[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22, 0xD0, 0x04, 0x00,
						0x09, 0x00, 0xB4 };

static unsigned char get_inkey_992b[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_993[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static unsigned char get_inkey_9102[] = { 0xD0, 0x15, 0x81, 0x03, 0x01, 0x22,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0A, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x22,
						0x23, 0x22 };

static struct get_inkey_test get_inkey_data_111 = {
	.pdu = get_inkey_111,
	.pdu_len = sizeof(get_inkey_111),
	.qualifier = 0x00,
	.text = "Enter \"+\""
};

static struct get_inkey_test get_inkey_data_121 = {
	.pdu = get_inkey_121,
	.pdu_len = sizeof(get_inkey_121),
	.qualifier = 0x00,
	.text = "Enter \"0\""
};

static struct get_inkey_test get_inkey_data_131 = {
	.pdu = get_inkey_131,
	.pdu_len = sizeof(get_inkey_131),
	.qualifier = 0x00,
	.text = "<GO-BACKWARDS>"
};

static struct get_inkey_test get_inkey_data_141 = {
	.pdu = get_inkey_141,
	.pdu_len = sizeof(get_inkey_141),
	.qualifier = 0x00,
	.text = "<ABORT>"
};

static struct get_inkey_test get_inkey_data_151 = {
	.pdu = get_inkey_151,
	.pdu_len = sizeof(get_inkey_151),
	.qualifier = 0x01,
	.text = "Enter \"q\""
};

static struct get_inkey_test get_inkey_data_161 = {
	.pdu = get_inkey_161,
	.pdu_len = sizeof(get_inkey_161),
	.qualifier = 0x01,
	.text = "Enter \"x\". This command instructs the ME to display text, "
		"and to expect the user to enter a single character. Any "
		"response entered by the user shall be passed t"
};

static struct get_inkey_test get_inkey_data_211 = {
	.pdu = get_inkey_211,
	.pdu_len = sizeof(get_inkey_211),
	.qualifier = 0x00,
	.text = "<TIME-OUT>"
};

static struct get_inkey_test get_inkey_data_311 = {
	.pdu = get_inkey_311,
	.pdu_len = sizeof(get_inkey_311),
	.qualifier = 0x00,
	.text = "ЗДРАВСТВУЙТЕ"
};

static struct get_inkey_test get_inkey_data_321 = {
	.pdu = get_inkey_321,
	.pdu_len = sizeof(get_inkey_321),
	.qualifier = 0x00,
	.text = "ЗДРАВСТВУЙТЕЗДРАВСТВУЙТЕ"
		"ЗДРАВСТВУЙТЕЗДРАВСТВУЙТЕ"
		"ЗДРАВСТВУЙТЕЗДРАВСТВУЙ"
};

static struct get_inkey_test get_inkey_data_411 = {
	.pdu = get_inkey_411,
	.pdu_len = sizeof(get_inkey_411),
	.qualifier = 0x03,
	.text = "Enter"
};

static struct get_inkey_test get_inkey_data_511 = {
	.pdu = get_inkey_511,
	.pdu_len = sizeof(get_inkey_511),
	.qualifier = 0x04,
	.text = "Enter YES"
};

static struct get_inkey_test get_inkey_data_512 = {
	.pdu = get_inkey_512,
	.pdu_len = sizeof(get_inkey_512),
	.qualifier = 0x04,
	.text = "Enter NO"
};

static struct get_inkey_test get_inkey_data_611 = {
	.pdu = get_inkey_611,
	.pdu_len = sizeof(get_inkey_611),
	.qualifier = 0x00,
	.text = "<NO-ICON>",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct get_inkey_test get_inkey_data_621 = {
	.pdu = get_inkey_621,
	.pdu_len = sizeof(get_inkey_621),
	.qualifier = 0x00,
	.text = "<BASIC-ICON>",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct get_inkey_test get_inkey_data_631 = {
	.pdu = get_inkey_631,
	.pdu_len = sizeof(get_inkey_631),
	.qualifier = 0x00,
	.text = "<NO-ICON>",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct get_inkey_test get_inkey_data_641 = {
	.pdu = get_inkey_641,
	.pdu_len = sizeof(get_inkey_641),
	.qualifier = 0x00,
	.text = "<COLOUR-ICON>",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct get_inkey_test get_inkey_data_711 = {
	.pdu = get_inkey_711,
	.pdu_len = sizeof(get_inkey_711),
	.qualifier = 0x80,
	.text = "Enter \"+\""
};

static struct get_inkey_test get_inkey_data_712 = {
	.pdu = get_inkey_712,
	.pdu_len = sizeof(get_inkey_712),
	.qualifier = 0x80,
	.text = "Enter \"+\""
};

static struct get_inkey_test get_inkey_data_811 = {
	.pdu = get_inkey_811,
	.pdu_len = sizeof(get_inkey_811),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 10
	}
};

static struct get_inkey_test get_inkey_data_911 = {
	.pdu = get_inkey_911,
	.pdu_len = sizeof(get_inkey_911),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"+\"</span></div>",
};

static struct get_inkey_test get_inkey_data_912 = {
	.pdu = get_inkey_912,
	.pdu_len = sizeof(get_inkey_912),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_921 = {
	.pdu = get_inkey_921,
	.pdu_len = sizeof(get_inkey_921),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x01, 0xB4 }
	},
	.html = "<div style=\"text-align: center;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"+\"</span>"
		"</div>",
};

static struct get_inkey_test get_inkey_data_922 = {
	.pdu = get_inkey_922,
	.pdu_len = sizeof(get_inkey_922),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_931 = {
	.pdu = get_inkey_931,
	.pdu_len = sizeof(get_inkey_931),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x02, 0xB4 }
	},
	.html = "<div style=\"text-align: right;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"+\"</span>"
		"</div>",
};

static struct get_inkey_test get_inkey_data_932 = {
	.pdu = get_inkey_932,
	.pdu_len = sizeof(get_inkey_932),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_941 = {
	.pdu = get_inkey_941,
	.pdu_len = sizeof(get_inkey_941),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x04, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"big;color: #347235;background-color: #FFFF00;\">Enter \"+\""
		"</span></div>",
};

static struct get_inkey_test get_inkey_data_942 = {
	.pdu = get_inkey_942,
	.pdu_len = sizeof(get_inkey_942),
	.qualifier = 0x00,
	.text = "Enter \"#\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"#\"</span></div>",
};

static struct get_inkey_test get_inkey_data_943 = {
	.pdu = get_inkey_943,
	.pdu_len = sizeof(get_inkey_943),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_951 = {
	.pdu = get_inkey_951,
	.pdu_len = sizeof(get_inkey_951),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x08, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"small;color: #347235;background-color: #FFFF00;\">"
		"Enter \"+\"</span></div>",
};

static struct get_inkey_test get_inkey_data_952 = {
	.pdu = get_inkey_952,
	.pdu_len = sizeof(get_inkey_952),
	.qualifier = 0x00,
	.text = "Enter \"#\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"#\"</span></div>",
};

static struct get_inkey_test get_inkey_data_953 = {
	.pdu = get_inkey_953,
	.pdu_len = sizeof(get_inkey_953),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_961 = {
	.pdu = get_inkey_961,
	.pdu_len = sizeof(get_inkey_961),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x10, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-weight: "
		"bold;color: #347235;background-color: #FFFF00;\">Enter \"+\""
		"</span></div>",
};

static struct get_inkey_test get_inkey_data_962 = {
	.pdu = get_inkey_962,
	.pdu_len = sizeof(get_inkey_962),
	.qualifier = 0x00,
	.text = "Enter \"#\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"#\"</span></div>",
};

static struct get_inkey_test get_inkey_data_963 = {
	.pdu = get_inkey_963,
	.pdu_len = sizeof(get_inkey_963),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_971 = {
	.pdu = get_inkey_971,
	.pdu_len = sizeof(get_inkey_971),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x20, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-style: "
		"italic;color: #347235;background-color: #FFFF00;\">"
		"Enter \"+\"</span></div>",
};

static struct get_inkey_test get_inkey_data_972 = {
	.pdu = get_inkey_972,
	.pdu_len = sizeof(get_inkey_972),
	.qualifier = 0x00,
	.text = "Enter \"#\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"#\"</span></div>",
};

static struct get_inkey_test get_inkey_data_973 = {
	.pdu = get_inkey_973,
	.pdu_len = sizeof(get_inkey_973),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_981 = {
	.pdu = get_inkey_981,
	.pdu_len = sizeof(get_inkey_981),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x40, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\""
		"text-decoration: underline;color: #347235;"
		"background-color: #FFFF00;\">Enter \"+\"</span></div>",
};

static struct get_inkey_test get_inkey_data_982 = {
	.pdu = get_inkey_982,
	.pdu_len = sizeof(get_inkey_982),
	.qualifier = 0x00,
	.text = "Enter \"#\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"#\"</span></div>",
};

static struct get_inkey_test get_inkey_data_983 = {
	.pdu = get_inkey_983,
	.pdu_len = sizeof(get_inkey_983),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_991 = {
	.pdu = get_inkey_991,
	.pdu_len = sizeof(get_inkey_991),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x80, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\""
		"text-decoration: line-through;color: #347235;"
		"background-color: #FFFF00;\">Enter \"+\"</span></div>",
};

static struct get_inkey_test get_inkey_data_992a = {
	.pdu = get_inkey_992a,
	.pdu_len = sizeof(get_inkey_992a),
	.qualifier = 0x00,
	.text = "Enter \"#\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"#\"</span></div>",
};

static struct get_inkey_test get_inkey_data_992b = {
	.pdu = get_inkey_992b,
	.pdu_len = sizeof(get_inkey_992b),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_993 = {
	.pdu = get_inkey_993,
	.pdu_len = sizeof(get_inkey_993),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_9101 = {
	.pdu = get_inkey_9101,
	.pdu_len = sizeof(get_inkey_9101),
	.qualifier = 0x00,
	.text = "Enter \"+\"",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter \"+\"</span></div>",
};

static struct get_inkey_test get_inkey_data_9102 = {
	.pdu = get_inkey_9102,
	.pdu_len = sizeof(get_inkey_9102),
	.qualifier = 0x00,
	.text = "Enter \"#\""
};

static struct get_inkey_test get_inkey_data_1011 = {
	.pdu = get_inkey_1011,
	.pdu_len = sizeof(get_inkey_1011),
	.qualifier = 0x00,
	.text = "你好"
};

static struct get_inkey_test get_inkey_data_1021 = {
	.pdu = get_inkey_1021,
	.pdu_len = sizeof(get_inkey_1021),
	.qualifier = 0x00,
	.text = "你好你好你好你好你好你好你好你好你好你好"
		"你好你好你好你好你好你好你好你好你好你好"
		"你好你好你好你好你好你好你好你好你好你好"
		"你好你好你好你好你好"
};

static struct get_inkey_test get_inkey_data_1111 = {
	.pdu = get_inkey_1111,
	.pdu_len = sizeof(get_inkey_1111),
	.qualifier = 0x03,
	.text = "Enter"
};

static struct get_inkey_test get_inkey_data_1211 = {
	.pdu = get_inkey_1211,
	.pdu_len = sizeof(get_inkey_1211),
	.qualifier = 0x00,
	.text = "ル"
};

static struct get_inkey_test get_inkey_data_1221 = {
	.pdu = get_inkey_1221,
	.pdu_len = sizeof(get_inkey_1221),
	.qualifier = 0x00,
	.text = "ルルルルルルルルルルルルルルルルルルルル"
		"ルルルルルルルルルルルルルルルルルルルル"
		"ルルルルルルルルルルルルルルルルルルルル"
		"ルルルルルルルルルル"
};

static struct get_inkey_test get_inkey_data_1311 = {
	.pdu = get_inkey_1311,
	.pdu_len = sizeof(get_inkey_1311),
	.qualifier = 0x03,
	.text = "Enter"
};

/* Defined in TS 102.384 Section 27.22.4.2 */
static void test_get_inkey(gconstpointer data)
{
	const struct get_inkey_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_GET_INKEY);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	g_assert(command->get_inkey.text);
	check_text(command->get_inkey.text, test->text);
	check_icon_id(&command->get_inkey.icon_id, &test->icon_id);
	check_duration(&command->get_inkey.duration, &test->duration);
	check_text_attr(&command->get_inkey.text_attr,
						&test->text_attr);
	check_text_attr_html(&command->get_inkey.text_attr,
				command->get_inkey.text, test->html);
	check_frame_id(&command->get_inkey.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct get_input_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *text;
	struct stk_response_length resp_len;
	char *default_text;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
	char *html;
};

static unsigned char get_input_711[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x80, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x31,
						0x32, 0x33, 0x34, 0x35, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_812[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_822[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_832[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_842[] = { 0xD0, 0x21, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05, 0xD0, 0x04,
						0x00, 0x0B, 0x00, 0xB4 };

static unsigned char get_input_843[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x33,
						0x33, 0x33, 0x33, 0x33, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_852[] = { 0xD0, 0x21, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05, 0xD0, 0x04,
						0x00, 0x0B, 0x00, 0xB4 };

static unsigned char get_input_853[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x33,
						0x33, 0x33, 0x33, 0x33, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_862[] = { 0xD0, 0x21, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05, 0xD0, 0x04,
						0x00, 0x0B, 0x00, 0xB4 };

static unsigned char get_input_863[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x33,
						0x33, 0x33, 0x33, 0x33, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_872[] = { 0xD0, 0x21, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05, 0xD0, 0x04,
						0x00, 0x0B, 0x00, 0xB4 };

static unsigned char get_input_873[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x33,
						0x33, 0x33, 0x33, 0x33, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_882[] = { 0xD0, 0x21, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05, 0xD0, 0x04,
						0x00, 0x0B, 0x00, 0xB4 };

static unsigned char get_input_883[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x33,
						0x33, 0x33, 0x33, 0x33, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_892[] = { 0xD0, 0x21, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05, 0xD0, 0x04,
						0x00, 0x0B, 0x00, 0xB4 };

static unsigned char get_input_893[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x33,
						0x33, 0x33, 0x33, 0x33, 0x91,
						0x02, 0x05, 0x05 };

static unsigned char get_input_8102[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x23,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x8D, 0x0C, 0x04, 0x45, 0x6E,
						0x74, 0x65, 0x72, 0x20, 0x32,
						0x32, 0x32, 0x32, 0x32, 0x91,
						0x02, 0x05, 0x05 };

static struct get_input_test get_input_data_111 = {
	.pdu = get_input_111,
	.pdu_len = sizeof(get_input_111),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_121 = {
	.pdu = get_input_121,
	.pdu_len = sizeof(get_input_121),
	.qualifier = 0x08,
	.text = "Enter 67*#+",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_131 = {
	.pdu = get_input_131,
	.pdu_len = sizeof(get_input_131),
	.qualifier = 0x01,
	.text = "Enter AbCdE",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_141 = {
	.pdu = get_input_141,
	.pdu_len = sizeof(get_input_141),
	.qualifier = 0x04,
	.text = "Password 1<SEND>2345678",
	.resp_len = {
		.min = 4,
		.max = 8
	}
};

static struct get_input_test get_input_data_151 = {
	.pdu = get_input_151,
	.pdu_len = sizeof(get_input_151),
	.qualifier = 0x00,
	.text = "Enter 1..9,0..9,0(1)",
	.resp_len = {
		.min = 1,
		.max = 20
	}
};

static struct get_input_test get_input_data_161 = {
	.pdu = get_input_161,
	.pdu_len = sizeof(get_input_161),
	.qualifier = 0x00,
	.text = "<GO-BACKWARDS>",
	.resp_len = {
		.min = 0,
		.max = 8
	}
};

static struct get_input_test get_input_data_171 = {
	.pdu = get_input_171,
	.pdu_len = sizeof(get_input_171),
	.qualifier = 0x00,
	.text = "<ABORT>",
	.resp_len = {
		.min = 0,
		.max = 8
	}
};

static struct get_input_test get_input_data_181 = {
	.pdu = get_input_181,
	.pdu_len = sizeof(get_input_181),
	.qualifier = 0x00,
	.text = "***1111111111###***2222222222###***3333333333###"
		"***4444444444###***5555555555###***6666666666###"
		"***7777777777###***8888888888###***9999999999###"
		"***0000000000###",
	.resp_len = {
		.min = 160,
		.max = 160
	}
};

static struct get_input_test get_input_data_191 = {
	.pdu = get_input_191,
	.pdu_len = sizeof(get_input_191),
	.qualifier = 0x00,
	.text = "<SEND>",
	.resp_len = {
		.min = 0,
		.max = 1
	}
};

static struct get_input_test get_input_data_1101 = {
	.pdu = get_input_1101,
	.pdu_len = sizeof(get_input_1101),
	.qualifier = 0x00,
	.text = "",
	.resp_len = {
		.min = 1,
		.max = 5
	}
};

static struct get_input_test get_input_data_211 = {
	.pdu = get_input_211,
	.pdu_len = sizeof(get_input_211),
	.qualifier = 0x00,
	.text = "<TIME-OUT>",
	.resp_len = {
		.min = 0,
		.max = 10
	}
};

static struct get_input_test get_input_data_311 = {
	.pdu = get_input_311,
	.pdu_len = sizeof(get_input_311),
	.qualifier = 0x01,
	.text = "ЗДРАВСТВУЙТЕ",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_321 = {
	.pdu = get_input_321,
	.pdu_len = sizeof(get_input_321),
	.qualifier = 0x01,
	.text = "ЗДРАВСТВУЙТЕЗДРАВСТВУЙТЕ"
		"ЗДРАВСТВУЙТЕЗДРАВСТВУЙТЕ"
		"ЗДРАВСТВУЙТЕЗДРАВСТВУЙ",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_411 = {
	.pdu = get_input_411,
	.pdu_len = sizeof(get_input_411),
	.qualifier = 0x03,
	.text = "Enter Hello",
	.resp_len = {
		.min = 12,
		.max = 12
	}
};

static struct get_input_test get_input_data_421 = {
	.pdu = get_input_421,
	.pdu_len = sizeof(get_input_421),
	.qualifier = 0x03,
	.text = "Enter Hello",
	.resp_len = {
		.min = 5,
		.max = 0xFF
	}
};

static struct get_input_test get_input_data_511 = {
	.pdu = get_input_511,
	.pdu_len = sizeof(get_input_511),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.default_text = "12345"
};

static struct get_input_test get_input_data_521 = {
	.pdu = get_input_521,
	.pdu_len = sizeof(get_input_521),
	.qualifier = 0x00,
	.text = "Enter:",
	.resp_len = {
		.min = 160,
		.max = 160
	},
	.default_text = "***1111111111###***2222222222###***3333333333###"
			"***4444444444###***5555555555###***6666666666###"
			"***7777777777###***8888888888###***9999999999###"
			"***0000000000###"
};

static struct get_input_test get_input_data_611 = {
	.pdu = get_input_611,
	.pdu_len = sizeof(get_input_611),
	.qualifier = 0x00,
	.text = "<NO-ICON>",
	.resp_len = {
		.min = 0,
		.max = 10
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct get_input_test get_input_data_621 = {
	.pdu = get_input_621,
	.pdu_len = sizeof(get_input_621),
	.qualifier = 0x00,
	.text = "<BASIC-ICON>",
	.resp_len = {
		.min = 0,
		.max = 10
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct get_input_test get_input_data_631 = {
	.pdu = get_input_631,
	.pdu_len = sizeof(get_input_631),
	.qualifier = 0x00,
	.text = "<NO-ICON>",
	.resp_len = {
		.min = 0,
		.max = 10
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct get_input_test get_input_data_641 = {
	.pdu = get_input_641,
	.pdu_len = sizeof(get_input_641),
	.qualifier = 0x00,
	.text = "<COLOUR-ICON>",
	.resp_len = {
		.min = 0,
		.max = 10
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct get_input_test get_input_data_711 = {
	.pdu = get_input_711,
	.pdu_len = sizeof(get_input_711),
	.qualifier = 0x80,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_811 = {
	.pdu = get_input_811,
	.pdu_len = sizeof(get_input_811),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 12345</span></div>"
};

static struct get_input_test get_input_data_812 = {
	.pdu = get_input_812,
	.pdu_len = sizeof(get_input_812),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_821 = {
	.pdu = get_input_821,
	.pdu_len = sizeof(get_input_821),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x01, 0xB4 }
	},
	.html = "<div style=\"text-align: center;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 12345</span>"
		"</div>",
};

static struct get_input_test get_input_data_822 = {
	.pdu = get_input_822,
	.pdu_len = sizeof(get_input_822),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_831 = {
	.pdu = get_input_831,
	.pdu_len = sizeof(get_input_831),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x02, 0xB4 }
	},
	.html = "<div style=\"text-align: right;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 12345</span>"
		"</div>",
};

static struct get_input_test get_input_data_832 = {
	.pdu = get_input_832,
	.pdu_len = sizeof(get_input_832),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_841 = {
	.pdu = get_input_841,
	.pdu_len = sizeof(get_input_841),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x04, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"big;color: #347235;background-color: #FFFF00;\">Enter 12345"
		"</span></div>",
};

static struct get_input_test get_input_data_842 = {
	.pdu = get_input_842,
	.pdu_len = sizeof(get_input_842),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 22222</span></div>"
};

static struct get_input_test get_input_data_843 = {
	.pdu = get_input_843,
	.pdu_len = sizeof(get_input_843),
	.qualifier = 0x00,
	.text = "Enter 33333",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_851 = {
	.pdu = get_input_851,
	.pdu_len = sizeof(get_input_851),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x08, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"small;color: #347235;background-color: #FFFF00;\">Enter "
		"12345</span></div>",
};

static struct get_input_test get_input_data_852 = {
	.pdu = get_input_852,
	.pdu_len = sizeof(get_input_852),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 22222</span></div>",
};

static struct get_input_test get_input_data_853 = {
	.pdu = get_input_853,
	.pdu_len = sizeof(get_input_853),
	.qualifier = 0x00,
	.text = "Enter 33333",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_861 = {
	.pdu = get_input_861,
	.pdu_len = sizeof(get_input_861),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x10, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-weight: "
		"bold;color: #347235;background-color: #FFFF00;\">Enter "
		"12345</span></div>"
};

static struct get_input_test get_input_data_862 = {
	.pdu = get_input_862,
	.pdu_len = sizeof(get_input_862),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 22222</span></div>",
};

static struct get_input_test get_input_data_863 = {
	.pdu = get_input_863,
	.pdu_len = sizeof(get_input_863),
	.qualifier = 0x00,
	.text = "Enter 33333",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_871 = {
	.pdu = get_input_871,
	.pdu_len = sizeof(get_input_871),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x20, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-style: "
		"italic;color: #347235;background-color: #FFFF00;\">Enter "
		"12345</span></div>",
};

static struct get_input_test get_input_data_872 = {
	.pdu = get_input_872,
	.pdu_len = sizeof(get_input_872),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 22222</span></div>",
};

static struct get_input_test get_input_data_873 = {
	.pdu = get_input_873,
	.pdu_len = sizeof(get_input_873),
	.qualifier = 0x00,
	.text = "Enter 33333",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_881 = {
	.pdu = get_input_881,
	.pdu_len = sizeof(get_input_881),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x40, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: underline;color: #347235;"
		"background-color: #FFFF00;\">Enter 12345</span></div>",
};

static struct get_input_test get_input_data_882 = {
	.pdu = get_input_882,
	.pdu_len = sizeof(get_input_882),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 22222</span></div>",
};

static struct get_input_test get_input_data_883 = {
	.pdu = get_input_883,
	.pdu_len = sizeof(get_input_883),
	.qualifier = 0x00,
	.text = "Enter 33333",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_891 = {
	.pdu = get_input_891,
	.pdu_len = sizeof(get_input_891),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x80, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: line-through;color: #347235;"
		"background-color: #FFFF00;\">Enter 12345</span></div>",
};

static struct get_input_test get_input_data_892 = {
	.pdu = get_input_892,
	.pdu_len = sizeof(get_input_892),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 22222</span></div>",
};

static struct get_input_test get_input_data_893 = {
	.pdu = get_input_893,
	.pdu_len = sizeof(get_input_893),
	.qualifier = 0x00,
	.text = "Enter 33333",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_8101 = {
	.pdu = get_input_8101,
	.pdu_len = sizeof(get_input_8101),
	.qualifier = 0x00,
	.text = "Enter 12345",
	.resp_len = {
		.min = 5,
		.max = 5
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Enter 12345</span></div>",
};

static struct get_input_test get_input_data_8102 = {
	.pdu = get_input_8102,
	.pdu_len = sizeof(get_input_8102),
	.qualifier = 0x00,
	.text = "Enter 22222",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_911 = {
	.pdu = get_input_911,
	.pdu_len = sizeof(get_input_911),
	.qualifier = 0x01,
	.text = "你好",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_921 = {
	.pdu = get_input_921,
	.pdu_len = sizeof(get_input_921),
	.qualifier = 0x01,
	.text = "你好你好你好你好你好你好你好你好你好你好"
		"你好你好你好你好你好你好你好你好你好你好"
		"你好你好你好你好你好你好你好你好你好你好"
		"你好你好你好你好你好",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_1011 = {
	.pdu = get_input_1011,
	.pdu_len = sizeof(get_input_1011),
	.qualifier = 0x03,
	.text = "Enter Hello",
	.resp_len = {
		.min = 2,
		.max = 2
	}
};

static struct get_input_test get_input_data_1021 = {
	.pdu = get_input_1021,
	.pdu_len = sizeof(get_input_1021),
	.qualifier = 0x03,
	.text = "Enter Hello",
	.resp_len = {
		.min = 5,
		.max = 0xFF
	}
};

static struct get_input_test get_input_data_1111 = {
	.pdu = get_input_1111,
	.pdu_len = sizeof(get_input_1111),
	.qualifier = 0x01,
	.text = "ル",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_1121 = {
	.pdu = get_input_1121,
	.pdu_len = sizeof(get_input_1121),
	.qualifier = 0x01,
	.text = "ルルルルルルルルルルルルルルルルルルルル"
		"ルルルルルルルルルルルルルルルルルルルル"
		"ルルルルルルルルルルルルルルルルルルルル"
		"ルルルルルルルルルル",
	.resp_len = {
		.min = 5,
		.max = 5
	}
};

static struct get_input_test get_input_data_1211 = {
	.pdu = get_input_1211,
	.pdu_len = sizeof(get_input_1211),
	.qualifier = 0x03,
	.text = "Enter Hello",
	.resp_len = {
		.min = 2,
		.max = 2
	}
};

static struct get_input_test get_input_data_1221 = {
	.pdu = get_input_1221,
	.pdu_len = sizeof(get_input_1221),
	.qualifier = 0x03,
	.text = "Enter Hello",
	.resp_len = {
		.min = 5,
		.max = 0xFF
	}
};

/* Defined in TS 102.384 Section 27.22.4.3 */
static void test_get_input(gconstpointer data)
{
	const struct get_input_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_GET_INPUT);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	if (test->text)
		g_assert(command->get_input.text);
	check_text(command->get_input.text, test->text);
	check_response_length(&command->get_input.resp_len, &test->resp_len);
	check_default_text(command->get_input.default_text, test->default_text);
	check_icon_id(&command->get_input.icon_id, &test->icon_id);
	check_text_attr(&command->get_input.text_attr,
						&test->text_attr);
	check_text_attr_html(&command->get_input.text_attr,
				command->get_input.text, test->html);
	check_frame_id(&command->get_input.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct more_time_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
};

static struct more_time_test more_time_data_111 = {
	.pdu = more_time_111,
	.pdu_len = sizeof(more_time_111),
	.qualifier = 0x00,
};

/* Defined in TS 102.384 Section 27.22.4.4 */
static void test_more_time(gconstpointer data)
{
	const struct get_input_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_MORE_TIME);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	stk_command_free(command);
}

struct play_tone_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	unsigned char tone;
	struct stk_duration duration;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
	char *html;
};

static struct play_tone_test play_tone_data_111 = {
	.pdu = play_tone_111,
	.pdu_len = sizeof(play_tone_111),
	.qualifier = 0x00,
	.alpha_id = "Dial Tone",
	.tone = STK_TONE_TYPE_DIAL_TONE,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_112 = {
	.pdu = play_tone_112,
	.pdu_len = sizeof(play_tone_112),
	.qualifier = 0x00,
	.alpha_id = "Sub. Busy",
	.tone = STK_TONE_TYPE_BUSY_TONE,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_113 = {
	.pdu = play_tone_113,
	.pdu_len = sizeof(play_tone_113),
	.qualifier = 0x00,
	.alpha_id = "Congestion",
	.tone = STK_TONE_TYPE_CONGESTION,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_114 = {
	.pdu = play_tone_114,
	.pdu_len = sizeof(play_tone_114),
	.qualifier = 0x00,
	.alpha_id = "RP Ack",
	.tone = STK_TONE_TYPE_RP_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_115 = {
	.pdu = play_tone_115,
	.pdu_len = sizeof(play_tone_115),
	.qualifier = 0x00,
	.alpha_id = "No RP",
	.tone = STK_TONE_TYPE_CALL_DROPPED,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_116 = {
	.pdu = play_tone_116,
	.pdu_len = sizeof(play_tone_116),
	.qualifier = 0x00,
	.alpha_id = "Spec Info",
	.tone = STK_TONE_TYPE_ERROR,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_117 = {
	.pdu = play_tone_117,
	.pdu_len = sizeof(play_tone_117),
	.qualifier = 0x00,
	.alpha_id = "Call Wait",
	.tone = STK_TONE_TYPE_CALL_WAITING,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_118 = {
	.pdu = play_tone_118,
	.pdu_len = sizeof(play_tone_118),
	.qualifier = 0x00,
	.alpha_id = "Ring Tone",
	.tone = STK_TONE_TYPE_RINGING,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_119 = {
	.pdu = play_tone_119,
	.pdu_len = sizeof(play_tone_119),
	.qualifier = 0x00,
	.alpha_id = "This command instructs the ME to play an audio tone. "
			"Upon receiving this command, the ME shall check "
			"if it is currently in, or in the process of setting "
			"up (SET-UP message sent to the network, see "
			"GSM\"04.08\"(8)), a speech call. - If the ME I"
};

static struct play_tone_test play_tone_data_1110 = {
	.pdu = play_tone_1110,
	.pdu_len = sizeof(play_tone_1110),
	.qualifier = 0x00,
	.alpha_id = "Beep",
	.tone = STK_TONE_TYPE_GENERAL_BEEP,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_1111 = {
	.pdu = play_tone_1111,
	.pdu_len = sizeof(play_tone_1111),
	.qualifier = 0x00,
	.alpha_id = "Positive",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_1112 = {
	.pdu = play_tone_1112,
	.pdu_len = sizeof(play_tone_1112),
	.qualifier = 0x00,
	.alpha_id = "Negative",
	.tone = STK_TONE_TYPE_NEGATIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_1113 = {
	.pdu = play_tone_1113,
	.pdu_len = sizeof(play_tone_1113),
	.qualifier = 0x00,
	.alpha_id = "Quick",
	.tone = STK_TONE_TYPE_GENERAL_BEEP,
	.duration = {
		.unit = STK_DURATION_TYPE_SECOND_TENTHS,
		.interval = 2
	}
};

static struct play_tone_test play_tone_data_1114 = {
	.pdu = play_tone_1114,
	.pdu_len = sizeof(play_tone_1114),
	.qualifier = 0x00,
	.alpha_id = "<ABORT>",
	.tone = STK_TONE_TYPE_ERROR,
	.duration = {
		.unit = STK_DURATION_TYPE_MINUTES,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_1115 = {
	.pdu = play_tone_1115,
	.pdu_len = sizeof(play_tone_1115),
	.qualifier = 0x00
};

static struct play_tone_test play_tone_data_211 = {
	.pdu = play_tone_211,
	.pdu_len = sizeof(play_tone_211),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_212 = {
	.pdu = play_tone_212,
	.pdu_len = sizeof(play_tone_212),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_213 = {
	.pdu = play_tone_213,
	.pdu_len = sizeof(play_tone_213),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_311 = {
	.pdu = play_tone_311,
	.pdu_len = sizeof(play_tone_311),
	.qualifier = 0x00,
	.alpha_id = "<BASIC-ICON>",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.icon_id = {
	    .qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
	    .id = 0x01
	}
};

static struct play_tone_test play_tone_data_321 = {
	.pdu = play_tone_321,
	.pdu_len = sizeof(play_tone_321),
	.qualifier = 0x00,
	.alpha_id = "<BASIC-ICON>",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.icon_id = {
	    .qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
	    .id = 0x01
	}
};

static struct play_tone_test play_tone_data_331 = {
	.pdu = play_tone_331,
	.pdu_len = sizeof(play_tone_331),
	.qualifier = 0x00,
	.alpha_id = "<COLOUR-ICON>",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.icon_id = {
	    .qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
	    .id = 0x02
	}
};

static struct play_tone_test play_tone_data_341 = {
	.pdu = play_tone_341,
	.pdu_len = sizeof(play_tone_341),
	.qualifier = 0x00,
	.alpha_id = "<COLOUR-ICON>",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.icon_id = {
	    .qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
	    .id = 0x02
	}
};

static struct play_tone_test play_tone_data_411 = {
	.pdu = play_tone_411,
	.pdu_len = sizeof(play_tone_411),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 1</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_412 = {
	.pdu = play_tone_412,
	.pdu_len = sizeof(play_tone_412),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_421 = {
	.pdu = play_tone_421,
	.pdu_len = sizeof(play_tone_421),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x01, 0xB4 }
	},
	.html = "<div style=\"text-align: center;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 1</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_422 = {
	.pdu = play_tone_422,
	.pdu_len = sizeof(play_tone_422),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_431 = {
	.pdu = play_tone_431,
	.pdu_len = sizeof(play_tone_431),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x02, 0xB4 }
	},
	.html = "<div style=\"text-align: right;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 1</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_432 = {
	.pdu = play_tone_432,
	.pdu_len = sizeof(play_tone_432),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_441 = {
	.pdu = play_tone_441,
	.pdu_len = sizeof(play_tone_441),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x04, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"big;color: #347235;background-color: #FFFF00;\">"
		"Text Attribute 1</span></div>",
};

static struct play_tone_test play_tone_data_442 = {
	.pdu = play_tone_442,
	.pdu_len = sizeof(play_tone_442),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 2</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_443 = {
	.pdu = play_tone_443,
	.pdu_len = sizeof(play_tone_443),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_451 = {
	.pdu = play_tone_451,
	.pdu_len = sizeof(play_tone_451),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x08, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"small;color: #347235;background-color: #FFFF00;\">"
		"Text Attribute 1</span></div>",
};

static struct play_tone_test play_tone_data_452 = {
	.pdu = play_tone_452,
	.pdu_len = sizeof(play_tone_452),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 2</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_453 = {
	.pdu = play_tone_453,
	.pdu_len = sizeof(play_tone_453),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_461 = {
	.pdu = play_tone_461,
	.pdu_len = sizeof(play_tone_461),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x10, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-weight: "
		"bold;color: #347235;background-color: #FFFF00;\">"
		"Text Attribute</span></div> 1"
};

static struct play_tone_test play_tone_data_462 = {
	.pdu = play_tone_462,
	.pdu_len = sizeof(play_tone_462),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 2</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_463 = {
	.pdu = play_tone_463,
	.pdu_len = sizeof(play_tone_463),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_471 = {
	.pdu = play_tone_471,
	.pdu_len = sizeof(play_tone_471),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x20, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-style: "
		"italic;color: #347235;background-color: #FFFF00;\">"
		"Text Attribute</span></div> 1",
};

static struct play_tone_test play_tone_data_472 = {
	.pdu = play_tone_472,
	.pdu_len = sizeof(play_tone_472),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 2</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_473 = {
	.pdu = play_tone_473,
	.pdu_len = sizeof(play_tone_473),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_481 = {
	.pdu = play_tone_481,
	.pdu_len = sizeof(play_tone_481),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x40, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: underline;color: #347235;"
		"background-color: #FFFF00;\">Text Attribute 1</span></div>",
};

static struct play_tone_test play_tone_data_482 = {
	.pdu = play_tone_482,
	.pdu_len = sizeof(play_tone_482),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 2</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_483 = {
	.pdu = play_tone_483,
	.pdu_len = sizeof(play_tone_483),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_491 = {
	.pdu = play_tone_491,
	.pdu_len = sizeof(play_tone_491),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x80, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: line-through;color: #347235;"
		"background-color: #FFFF00;\">Text Attribute 1</span></div>",
};

static struct play_tone_test play_tone_data_492 = {
	.pdu = play_tone_492,
	.pdu_len = sizeof(play_tone_492),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 2</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_493 = {
	.pdu = play_tone_493,
	.pdu_len = sizeof(play_tone_493),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_4101 = {
	.pdu = play_tone_4101,
	.pdu_len = sizeof(play_tone_4101),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Text Attribute 1</span>"
		"</div>",
};

static struct play_tone_test play_tone_data_4102 = {
	.pdu = play_tone_4102,
	.pdu_len = sizeof(play_tone_4102),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_511 = {
	.pdu = play_tone_511,
	.pdu_len = sizeof(play_tone_511),
	.qualifier = 0x00,
	.alpha_id = "中一",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_512 = {
	.pdu = play_tone_512,
	.pdu_len = sizeof(play_tone_512),
	.qualifier = 0x00,
	.alpha_id = "中一",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_513 = {
	.pdu = play_tone_513,
	.pdu_len = sizeof(play_tone_513),
	.qualifier = 0x00,
	.alpha_id = "中一",
	.tone = STK_TONE_TYPE_POSITIVE_ACK,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 1
	}
};

static struct play_tone_test play_tone_data_611 = {
	.pdu = play_tone_611,
	.pdu_len = sizeof(play_tone_611),
	.qualifier = 0x00,
	.alpha_id = "80ル0",
	.tone = STK_TONE_TYPE_DIAL_TONE,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_612 = {
	.pdu = play_tone_612,
	.pdu_len = sizeof(play_tone_612),
	.qualifier = 0x00,
	.alpha_id = "81ル1",
	.tone = STK_TONE_TYPE_DIAL_TONE,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

static struct play_tone_test play_tone_data_613 = {
	.pdu = play_tone_613,
	.pdu_len = sizeof(play_tone_613),
	.qualifier = 0x00,
	.alpha_id = "82ル2",
	.tone = STK_TONE_TYPE_DIAL_TONE,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 5
	}
};

/* Defined in TS 102.384 Section 27.22.4.5 */
static void test_play_tone(gconstpointer data)
{
	const struct play_tone_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_PLAY_TONE);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_EARPIECE);

	check_alpha_id(command->play_tone.alpha_id, test->alpha_id);
	check_tone(command->play_tone.tone, test->tone);
	check_duration(&command->play_tone.duration, &test->duration);
	check_icon_id(&command->play_tone.icon_id, &test->icon_id);
	check_text_attr(&command->play_tone.text_attr, &test->text_attr);
	check_text_attr_html(&command->play_tone.text_attr,
				command->play_tone.alpha_id, test->html);
	check_frame_id(&command->play_tone.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct poll_interval_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	struct stk_duration duration;
};

static struct poll_interval_test poll_interval_data_111 = {
	.pdu = poll_interval_111,
	.pdu_len = sizeof(poll_interval_111),
	.qualifier = 0x00,
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 20
	}
};

/* Defined in TS 102.384 Section 27.22.4.6 */
static void test_poll_interval(gconstpointer data)
{
	const struct poll_interval_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_POLL_INTERVAL);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_duration(&command->poll_interval.duration, &test->duration);

	stk_command_free(command);
}

struct setup_menu_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	struct stk_item items[MAX_ITEM];
	struct stk_items_next_action_indicator next_act;
	struct stk_icon_id icon_id;
	struct stk_item_icon_id_list item_icon_id_list;
	struct stk_text_attribute text_attr;
	struct stk_item_text_attribute_list item_text_attr_list;
	char *html;
};

static unsigned char setup_menu_111[] = { 0xD0, 0x3B, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0C, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x8F,
						0x07, 0x01, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x31, 0x8F, 0x07,
						0x02, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x32, 0x8F, 0x07, 0x03,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x33, 0x8F, 0x07, 0x04, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x34 };

static unsigned char setup_menu_112[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0C, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x8F,
						0x04, 0x11, 0x4F, 0x6E, 0x65,
						0x8F, 0x04, 0x12, 0x54, 0x77,
						0x6F };

static unsigned char setup_menu_113[] = { 0xD0, 0x0D, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x00, 0x8F, 0x00 };

static unsigned char setup_menu_121[] = { 0xD0, 0x81, 0xFC, 0x81, 0x03, 0x01,
						0x25, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0A, 0x4C, 0x61,
						0x72, 0x67, 0x65, 0x4D, 0x65,
						0x6E, 0x75, 0x31, 0x8F, 0x05,
						0x50, 0x5A, 0x65, 0x72, 0x6F,
						0x8F, 0x04, 0x4F, 0x4F, 0x6E,
						0x65, 0x8F, 0x04, 0x4E, 0x54,
						0x77, 0x6F, 0x8F, 0x06, 0x4D,
						0x54, 0x68, 0x72, 0x65, 0x65,
						0x8F, 0x05, 0x4C, 0x46, 0x6F,
						0x75, 0x72, 0x8F, 0x05, 0x4B,
						0x46, 0x69, 0x76, 0x65, 0x8F,
						0x04, 0x4A, 0x53, 0x69, 0x78,
						0x8F, 0x06, 0x49, 0x53, 0x65,
						0x76, 0x65, 0x6E, 0x8F, 0x06,
						0x48, 0x45, 0x69, 0x67, 0x68,
						0x74, 0x8F, 0x05, 0x47, 0x4E,
						0x69, 0x6E, 0x65, 0x8F, 0x06,
						0x46, 0x41, 0x6C, 0x70, 0x68,
						0x61, 0x8F, 0x06, 0x45, 0x42,
						0x72, 0x61, 0x76, 0x6F, 0x8F,
						0x08, 0x44, 0x43, 0x68, 0x61,
						0x72, 0x6C, 0x69, 0x65, 0x8F,
						0x06, 0x43, 0x44, 0x65, 0x6C,
						0x74, 0x61, 0x8F, 0x05, 0x42,
						0x45, 0x63, 0x68, 0x6F, 0x8F,
						0x09, 0x41, 0x46, 0x6F, 0x78,
						0x2D, 0x74, 0x72, 0x6F, 0x74,
						0x8F, 0x06, 0x40, 0x42, 0x6C,
						0x61, 0x63, 0x6B, 0x8F, 0x06,
						0x3F, 0x42, 0x72, 0x6F, 0x77,
						0x6E, 0x8F, 0x04, 0x3E, 0x52,
						0x65, 0x64, 0x8F, 0x07, 0x3D,
						0x4F, 0x72, 0x61, 0x6E, 0x67,
						0x65, 0x8F, 0x07, 0x3C, 0x59,
						0x65, 0x6C, 0x6C, 0x6F, 0x77,
						0x8F, 0x06, 0x3B, 0x47, 0x72,
						0x65, 0x65, 0x6E, 0x8F, 0x05,
						0x3A, 0x42, 0x6C, 0x75, 0x65,
						0x8F, 0x07, 0x39, 0x56, 0x69,
						0x6F, 0x6C, 0x65, 0x74, 0x8F,
						0x05, 0x38, 0x47, 0x72, 0x65,
						0x79, 0x8F, 0x06, 0x37, 0x57,
						0x68, 0x69, 0x74, 0x65, 0x8F,
						0x06, 0x36, 0x6D, 0x69, 0x6C,
						0x6C, 0x69, 0x8F, 0x06, 0x35,
						0x6D, 0x69, 0x63, 0x72, 0x6F,
						0x8F, 0x05, 0x34, 0x6E, 0x61,
						0x6E, 0x6F, 0x8F, 0x05, 0x33,
						0x70, 0x69, 0x63, 0x6F };

static unsigned char setup_menu_122[] = { 0xD0, 0x81, 0xF3, 0x81, 0x03, 0x01,
						0x25, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0A, 0x4C, 0x61,
						0x72, 0x67, 0x65, 0x4D, 0x65,
						0x6E, 0x75, 0x32, 0x8F, 0x1D,
						0xFF, 0x31, 0x20, 0x43, 0x61,
						0x6C, 0x6C, 0x20, 0x46, 0x6F,
						0x72, 0x77, 0x61, 0x72, 0x64,
						0x20, 0x55, 0x6E, 0x63, 0x6F,
						0x6E, 0x64, 0x69, 0x74, 0x69,
						0x6F, 0x6E, 0x61, 0x6C, 0x8F,
						0x1C, 0xFE, 0x32, 0x20, 0x43,
						0x61, 0x6C, 0x6C, 0x20, 0x46,
						0x6F, 0x72, 0x77, 0x61, 0x72,
						0x64, 0x20, 0x4F, 0x6E, 0x20,
						0x55, 0x73, 0x65, 0x72, 0x20,
						0x42, 0x75, 0x73, 0x79, 0x8F,
						0x1B, 0xFD, 0x33, 0x20, 0x43,
						0x61, 0x6C, 0x6C, 0x20, 0x46,
						0x6F, 0x72, 0x77, 0x61, 0x72,
						0x64, 0x20, 0x4F, 0x6E, 0x20,
						0x4E, 0x6F, 0x20, 0x52, 0x65,
						0x70, 0x6C, 0x79, 0x8F, 0x25,
						0xFC, 0x34, 0x20, 0x43, 0x61,
						0x6C, 0x6C, 0x20, 0x46, 0x6F,
						0x72, 0x77, 0x61, 0x72, 0x64,
						0x20, 0x4F, 0x6E, 0x20, 0x55,
						0x73, 0x65, 0x72, 0x20, 0x4E,
						0x6F, 0x74, 0x20, 0x52, 0x65,
						0x61, 0x63, 0x68, 0x61, 0x62,
						0x6C, 0x65, 0x8F, 0x20, 0xFB,
						0x35, 0x20, 0x42, 0x61, 0x72,
						0x72, 0x69, 0x6E, 0x67, 0x20,
						0x4F, 0x66, 0x20, 0x41, 0x6C,
						0x6C, 0x20, 0x4F, 0x75, 0x74,
						0x67, 0x6F, 0x69, 0x6E, 0x67,
						0x20, 0x43, 0x61, 0x6C, 0x6C,
						0x73, 0x8F, 0x24, 0xFA, 0x36,
						0x20, 0x42, 0x61, 0x72, 0x72,
						0x69, 0x6E, 0x67, 0x20, 0x4F,
						0x66, 0x20, 0x41, 0x6C, 0x6C,
						0x20, 0x4F, 0x75, 0x74, 0x67,
						0x6F, 0x69, 0x6E, 0x67, 0x20,
						0x49, 0x6E, 0x74, 0x20, 0x43,
						0x61, 0x6C, 0x6C, 0x73, 0x8F,
						0x13, 0xF9, 0x37, 0x20, 0x43,
						0x4C, 0x49, 0x20, 0x50, 0x72,
						0x65, 0x73, 0x65, 0x6E, 0x74,
						0x61, 0x74, 0x69, 0x6F, 0x6E };

static unsigned char setup_menu_123[] = { 0xD0, 0x81, 0xFC, 0x81, 0x03, 0x01,
						0x25, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x81, 0xEC, 0x54,
						0x68, 0x65, 0x20, 0x53, 0x49,
						0x4D, 0x20, 0x73, 0x68, 0x61,
						0x6C, 0x6C, 0x20, 0x73, 0x75,
						0x70, 0x70, 0x6C, 0x79, 0x20,
						0x61, 0x20, 0x73, 0x65, 0x74,
						0x20, 0x6F, 0x66, 0x20, 0x6D,
						0x65, 0x6E, 0x75, 0x20, 0x69,
						0x74, 0x65, 0x6D, 0x73, 0x2C,
						0x20, 0x77, 0x68, 0x69, 0x63,
						0x68, 0x20, 0x73, 0x68, 0x61,
						0x6C, 0x6C, 0x20, 0x62, 0x65,
						0x20, 0x69, 0x6E, 0x74, 0x65,
						0x67, 0x72, 0x61, 0x74, 0x65,
						0x64, 0x20, 0x77, 0x69, 0x74,
						0x68, 0x20, 0x74, 0x68, 0x65,
						0x20, 0x6D, 0x65, 0x6E, 0x75,
						0x20, 0x73, 0x79, 0x73, 0x74,
						0x65, 0x6D, 0x20, 0x28, 0x6F,
						0x72, 0x20, 0x6F, 0x74, 0x68,
						0x65, 0x72, 0x20, 0x4D, 0x4D,
						0x49, 0x20, 0x66, 0x61, 0x63,
						0x69, 0x6C, 0x69, 0x74, 0x79,
						0x29, 0x20, 0x69, 0x6E, 0x20,
						0x6F, 0x72, 0x64, 0x65, 0x72,
						0x20, 0x74, 0x6F, 0x20, 0x67,
						0x69, 0x76, 0x65, 0x20, 0x74,
						0x68, 0x65, 0x20, 0x75, 0x73,
						0x65, 0x72, 0x20, 0x74, 0x68,
						0x65, 0x20, 0x6F, 0x70, 0x70,
						0x6F, 0x72, 0x74, 0x75, 0x6E,
						0x69, 0x74, 0x79, 0x20, 0x74,
						0x6F, 0x20, 0x63, 0x68, 0x6F,
						0x6F, 0x73, 0x65, 0x20, 0x6F,
						0x6E, 0x65, 0x20, 0x6F, 0x66,
						0x20, 0x74, 0x68, 0x65, 0x73,
						0x65, 0x20, 0x6D, 0x65, 0x6E,
						0x75, 0x20, 0x69, 0x74, 0x65,
						0x6D, 0x73, 0x20, 0x61, 0x74,
						0x20, 0x68, 0x69, 0x73, 0x20,
						0x6F, 0x77, 0x6E, 0x20, 0x64,
						0x69, 0x73, 0x63, 0x72, 0x65,
						0x74, 0x69, 0x6F, 0x6E, 0x2E,
						0x20, 0x45, 0x61, 0x63, 0x68,
						0x20, 0x69, 0x74, 0x65, 0x6D,
						0x20, 0x63, 0x6F, 0x6D, 0x70,
						0x72, 0x69, 0x73, 0x65, 0x73,
						0x20, 0x61, 0x20, 0x73, 0x68,
						0x8F, 0x02, 0x01, 0x59 };

static unsigned char setup_menu_211[] = { 0xD0, 0x3B, 0x81, 0x03, 0x01, 0x25,
						0x80, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0C, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x8F,
						0x07, 0x01, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x31, 0x8F, 0x07,
						0x02, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x32, 0x8F, 0x07, 0x03,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x33, 0x8F, 0x07, 0x04, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x34 };

static unsigned char setup_menu_311[] = { 0xD0, 0x41, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0C, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x8F,
						0x07, 0x01, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x31, 0x8F, 0x07,
						0x02, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x32, 0x8F, 0x07, 0x03,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x33, 0x8F, 0x07, 0x04, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x34,
						0x18, 0x04, 0x13, 0x10, 0x15,
						0x26 };

static unsigned char setup_menu_411[] = { 0xD0, 0x3C, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0C, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x8F,
						0x07, 0x01, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x31, 0x8F, 0x07,
						0x02, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x32, 0x8F, 0x07, 0x03,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x33, 0x9E, 0x02, 0x01, 0x01,
						0x9F, 0x04, 0x01, 0x05, 0x05,
						0x05 };

static unsigned char setup_menu_421[] = { 0xD0, 0x3C, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0C, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x8F,
						0x07, 0x01, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x31, 0x8F, 0x07,
						0x02, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x32, 0x8F, 0x07, 0x03,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x33, 0x9E, 0x02, 0x00, 0x01,
						0x9F, 0x04, 0x00, 0x05, 0x05,
						0x05 };

static unsigned char setup_menu_511[] = { 0xD0, 0x29, 0x81, 0x03, 0x01, 0x25,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0C, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x8F,
						0x07, 0x01, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x31, 0x8F, 0x07,
						0x02, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x32 };

static unsigned char setup_menu_611[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x00, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x00, 0xB4,
						0x00, 0x06, 0x00, 0xB4, 0x00,
						0x06, 0x00, 0xB4 };

static unsigned char setup_menu_612[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x32, 0x8F, 0x07, 0x04, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x34,
						0x8F, 0x07, 0x05, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x35, 0x8F,
						0x07, 0x06, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x36 };

static unsigned char setup_menu_621[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x01, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x01, 0xB4,
						0x00, 0x06, 0x01, 0xB4, 0x00,
						0x06, 0x01, 0xB4 };

static unsigned char setup_menu_622[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x32, 0x8F, 0x07, 0x04, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x34,
						0x8F, 0x07, 0x05, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x35, 0x8F,
						0x07, 0x06, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x36 };

static unsigned char setup_menu_631[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x02, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x02, 0xB4,
						0x00, 0x06, 0x02, 0xB4, 0x00,
						0x06, 0x02, 0xB4 };

static unsigned char setup_menu_632[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x32, 0x8F, 0x07, 0x04, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x34,
						0x8F, 0x07, 0x05, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x35, 0x8F,
						0x07, 0x06, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x36 };

static unsigned char setup_menu_641[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x04, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x04, 0xB4,
						0x00, 0x06, 0x04, 0xB4, 0x00,
						0x06, 0x04, 0xB4 };

static unsigned char setup_menu_642[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x32, 0x8F, 0x07, 0x04, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x34,
						0x8F, 0x07, 0x05, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x35, 0x8F,
						0x07, 0x06, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x36, 0xD0, 0x04,
						0x00, 0x0E, 0x00, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x00, 0xB4,
						0x00, 0x06, 0x00, 0xB4, 0x00,
						0x06, 0x00, 0xB4 };

static unsigned char setup_menu_643[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x33, 0x8F, 0x07, 0x07, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x37,
						0x8F, 0x07, 0x08, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x38, 0x8F,
						0x07, 0x09, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x39 };

static unsigned char setup_menu_651[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x08, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x08, 0xB4,
						0x00, 0x06, 0x08, 0xB4, 0x00,
						0x06, 0x08, 0xB4 };

static unsigned char setup_menu_661[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x10, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x10, 0xB4,
						0x00, 0x06, 0x10, 0xB4, 0x00,
						0x06, 0x10, 0xB4 };

static unsigned char setup_menu_671[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x20, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x20, 0xB4,
						0x00, 0x06, 0x20, 0xB4, 0x00,
						0x06, 0x20, 0xB4 };

static unsigned char setup_menu_681[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x40, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x40, 0xB4,
						0x00, 0x06, 0x40, 0xB4, 0x00,
						0x06, 0x40, 0xB4 };

static unsigned char setup_menu_691[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x20,
						0x31, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0xD0, 0x04,
						0x00, 0x0E, 0x80, 0xB4, 0xD1,
						0x0C, 0x00, 0x06, 0x80, 0xB4,
						0x00, 0x06, 0x80, 0xB4, 0x00,
						0x06, 0x80, 0xB4 };

static unsigned char setup_menu_6101[] = { 0xD0, 0x46, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0C, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x4D, 0x65, 0x6E, 0x75, 0x8F,
						0x07, 0x01, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x31, 0x8F, 0x07,
						0x02, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x32, 0x8F, 0x07, 0x03,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x33, 0xD0, 0x04, 0x00, 0x0C,
						0x00, 0xB4, 0xD1, 0x0C, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4, 0x00, 0x06, 0x00,
						0xB4 };

static unsigned char setup_menu_711[] = { 0xD0, 0x81, 0x9C, 0x81, 0x03, 0x01,
						0x25, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x19, 0x80, 0x04,
						0x17, 0x04, 0x14, 0x04, 0x20,
						0x04, 0x10, 0x04, 0x12, 0x04,
						0x21, 0x04, 0x22, 0x04, 0x12,
						0x04, 0x23, 0x04, 0x19, 0x04,
						0x22, 0x04, 0x15, 0x8F, 0x1C,
						0x01, 0x80, 0x04, 0x17, 0x04,
						0x14, 0x04, 0x20, 0x04, 0x10,
						0x04, 0x12, 0x04, 0x21, 0x04,
						0x22, 0x04, 0x12, 0x04, 0x23,
						0x04, 0x19, 0x04, 0x22, 0x04,
						0x15, 0x00, 0x31, 0x8F, 0x1C,
						0x02, 0x80, 0x04, 0x17, 0x04,
						0x14, 0x04, 0x20, 0x04, 0x10,
						0x04, 0x12, 0x04, 0x21, 0x04,
						0x22, 0x04, 0x12, 0x04, 0x23,
						0x04, 0x19, 0x04, 0x22, 0x04,
						0x15, 0x00, 0x32, 0x8F, 0x1C,
						0x03, 0x80, 0x04, 0x17, 0x04,
						0x14, 0x04, 0x20, 0x04, 0x10,
						0x04, 0x12, 0x04, 0x21, 0x04,
						0x22, 0x04, 0x12, 0x04, 0x23,
						0x04, 0x19, 0x04, 0x22, 0x04,
						0x15, 0x00, 0x33, 0x8F, 0x1C,
						0x04, 0x80, 0x04, 0x17, 0x04,
						0x14, 0x04, 0x20, 0x04, 0x10,
						0x04, 0x12, 0x04, 0x21, 0x04,
						0x22, 0x04, 0x12, 0x04, 0x23,
						0x04, 0x19, 0x04, 0x22, 0x04,
						0x15, 0x00, 0x34 };

static unsigned char setup_menu_712[] = { 0xD0, 0x60, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x19, 0x80, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15, 0x8F, 0x1C, 0x11,
						0x80, 0x04, 0x17, 0x04, 0x14,
						0x04, 0x20, 0x04, 0x10, 0x04,
						0x12, 0x04, 0x21, 0x04, 0x22,
						0x04, 0x12, 0x04, 0x23, 0x04,
						0x19, 0x04, 0x22, 0x04, 0x15,
						0x00, 0x35, 0x8F, 0x1C, 0x12,
						0x80, 0x04, 0x17, 0x04, 0x14,
						0x04, 0x20, 0x04, 0x10, 0x04,
						0x12, 0x04, 0x21, 0x04, 0x22,
						0x04, 0x12, 0x04, 0x23, 0x04,
						0x19, 0x04, 0x22, 0x04, 0x15,
						0x00, 0x36 };

static unsigned char setup_menu_713[] = { 0xD0, 0x0D, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x00, 0x8F, 0x00 };

static unsigned char setup_menu_811[] = { 0xD0, 0x3C, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x09, 0x80, 0x5D, 0xE5,
						0x51, 0x77, 0x7B, 0xB1, 0x53,
						0x55, 0x8F, 0x08, 0x01, 0x80,
						0x98, 0x79, 0x76, 0xEE, 0x4E,
						0x00, 0x8F, 0x08, 0x02, 0x80,
						0x98, 0x79, 0x76, 0xEE, 0x4E,
						0x8C, 0x8F, 0x08, 0x03, 0x80,
						0x98, 0x79, 0x76, 0xEE, 0x4E,
						0x09, 0x8F, 0x08, 0x04, 0x80,
						0x98, 0x79, 0x76, 0xEE, 0x56,
						0xDB };

static unsigned char setup_menu_812[] = { 0xD0, 0x20, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x09, 0x80, 0x5D, 0xE5,
						0x51, 0x77, 0x7B, 0xB1, 0x53,
						0x55, 0x8F, 0x04, 0x11, 0x80,
						0x4E, 0x00, 0x8F, 0x04, 0x12,
						0x80, 0x4E, 0x8C };

static unsigned char setup_menu_813[] = { 0xD0, 0x0D, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x00, 0x8F, 0x00 };

static unsigned char setup_menu_911[] = { 0xD0, 0x44, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x09, 0x80, 0x00, 0x38,
						0x00, 0x30, 0x30, 0xEB, 0x00,
						0x30, 0x8F, 0x0A, 0x01, 0x80,
						0x00, 0x38, 0x00, 0x30, 0x30,
						0xEB, 0x00, 0x31, 0x8F, 0x0A,
						0x02, 0x80, 0x00, 0x38, 0x00,
						0x30, 0x30, 0xEB, 0x00, 0x32,
						0x8F, 0x0A, 0x03, 0x80, 0x00,
						0x38, 0x00, 0x30, 0x30, 0xEB,
						0x00, 0x33, 0x8F, 0x0A, 0x04,
						0x80, 0x00, 0x38, 0x00, 0x30,
						0x30, 0xEB, 0x00, 0x34 };

static unsigned char setup_menu_912[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x09, 0x80, 0x00, 0x38,
						0x00, 0x30, 0x30, 0xEB, 0x00,
						0x30, 0x8F, 0x0A, 0x11, 0x80,
						0x00, 0x38, 0x00, 0x30, 0x30,
						0xEB, 0x00, 0x35, 0x8F, 0x0A,
						0x12, 0x80, 0x00, 0x38, 0x00,
						0x30, 0x30, 0xEB, 0x00, 0x36 };

static unsigned char setup_menu_913[] = { 0xD0, 0x0D, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x00, 0x8F, 0x00 };

/* Negative case: No item is present */
static unsigned char setup_menu_neg_1[] = { 0xD0, 0x0B, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x00 };

/* Negative case: Two empty items*/
static unsigned char setup_menu_neg_2[] = { 0xD0, 0x0F, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x00, 0x8F, 0x00, 0x8F,
						0x00 };

/* Negative case: valid item + empty item */
static unsigned char setup_menu_neg_3[] = { 0xD0, 0x16, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x00, 0x8F, 0x07, 0x01,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x31, 0x8F, 0x00 };

/* Negative case: empty item + valid item */
static unsigned char setup_menu_neg_4[] = { 0xD0, 0x16, 0x81, 0x03, 0x01, 0x25,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x00, 0x8F, 0x00, 0x8F,
						0x07, 0x01, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x31 };

static struct setup_menu_test setup_menu_data_111 = {
	.pdu = setup_menu_111,
	.pdu_len = sizeof(setup_menu_111),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
		{ .id = 4, .text = "Item 4" },
	}
};

static struct setup_menu_test setup_menu_data_112 = {
	.pdu = setup_menu_112,
	.pdu_len = sizeof(setup_menu_112),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu",
	.items = {
		{ .id = 0x11, .text = "One" },
		{ .id = 0x12, .text = "Two" },
	}
};

static struct setup_menu_test setup_menu_data_113 = {
	.pdu = setup_menu_113,
	.pdu_len = sizeof(setup_menu_113),
	.qualifier = 0x00,
	.alpha_id = ""
};

static struct setup_menu_test setup_menu_data_121 = {
	.pdu = setup_menu_121,
	.pdu_len = sizeof(setup_menu_121),
	.qualifier = 0x00,
	.alpha_id = "LargeMenu1",
	.items = {
		{ .id = 0x50, .text = "Zero" },
		{ .id = 0x4F, .text = "One" },
		{ .id = 0x4E, .text = "Two" },
		{ .id = 0x4D, .text = "Three" },
		{ .id = 0x4C, .text = "Four" },
		{ .id = 0x4B, .text = "Five" },
		{ .id = 0x4A, .text = "Six" },
		{ .id = 0x49, .text = "Seven" },
		{ .id = 0x48, .text = "Eight" },
		{ .id = 0x47, .text = "Nine" },
		{ .id = 0x46, .text = "Alpha" },
		{ .id = 0x45, .text = "Bravo" },
		{ .id = 0x44, .text = "Charlie" },
		{ .id = 0x43, .text = "Delta" },
		{ .id = 0x42, .text = "Echo" },
		{ .id = 0x41, .text = "Fox-trot" },
		{ .id = 0x40, .text = "Black" },
		{ .id = 0x3F, .text = "Brown" },
		{ .id = 0x3E, .text = "Red" },
		{ .id = 0x3D, .text = "Orange" },
		{ .id = 0x3C, .text = "Yellow" },
		{ .id = 0x3B, .text = "Green" },
		{ .id = 0x3A, .text = "Blue" },
		{ .id = 0x39, .text = "Violet" },
		{ .id = 0x38, .text = "Grey" },
		{ .id = 0x37, .text = "White" },
		{ .id = 0x36, .text = "milli" },
		{ .id = 0x35, .text = "micro" },
		{ .id = 0x34, .text = "nano" },
		{ .id = 0x33, .text = "pico" },
	}
};

static struct setup_menu_test setup_menu_data_122 = {
	.pdu = setup_menu_122,
	.pdu_len = sizeof(setup_menu_122),
	.qualifier = 0x00,
	.alpha_id = "LargeMenu2",
	.items = {
		{ .id = 0xFF, .text = "1 Call Forward Unconditional" },
		{ .id = 0xFE, .text = "2 Call Forward On User Busy" },
		{ .id = 0xFD, .text = "3 Call Forward On No Reply" },
		{ .id = 0xFC, .text = "4 Call Forward On User Not Reachable" },
		{ .id = 0xFB, .text = "5 Barring Of All Outgoing Calls" },
		{ .id = 0xFA, .text = "6 Barring Of All Outgoing Int Calls" },
		{ .id = 0xF9, .text = "7 CLI Presentation" },
	}
};

static struct setup_menu_test setup_menu_data_123 = {
	.pdu = setup_menu_123,
	.pdu_len = sizeof(setup_menu_123),
	.qualifier = 0x00,
	.alpha_id = "The SIM shall supply a set of menu items, which shall "
			"be integrated with the menu system (or other MMI "
			"facility) in order to give the user the opportunity "
			"to choose one of these menu items at his own "
			"discretion. Each item comprises a sh",
	.items = {
		{ .id = 0x01, .text = "Y" }
	}
};

static struct setup_menu_test setup_menu_data_211 = {
	.pdu = setup_menu_211,
	.pdu_len = sizeof(setup_menu_211),
	.qualifier = 0x80,
	.alpha_id = "Toolkit Menu",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
		{ .id = 4, .text = "Item 4" },
	}
};

static struct setup_menu_test setup_menu_data_311 = {
	.pdu = setup_menu_311,
	.pdu_len = sizeof(setup_menu_311),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
		{ .id = 4, .text = "Item 4" },
	},
	.next_act = {
		.list = { STK_COMMAND_TYPE_SEND_SMS,
				STK_COMMAND_TYPE_SETUP_CALL,
				STK_COMMAND_TYPE_LAUNCH_BROWSER,
				STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO },
		.len = 4
	}
};

static struct setup_menu_test setup_menu_data_411 = {
	.pdu = setup_menu_411,
	.pdu_len = sizeof(setup_menu_411),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 1
	},
	.item_icon_id_list = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.list = { 5, 5, 5 },
		.len = 3
	}
};

static struct setup_menu_test setup_menu_data_421 = {
	.pdu = setup_menu_421,
	.pdu_len = sizeof(setup_menu_421),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 1
	},
	.item_icon_id_list = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.list = { 5, 5, 5 },
		.len = 3
	}
};

static struct setup_menu_test setup_menu_data_511 = {
	.pdu = setup_menu_511,
	.pdu_len = sizeof(setup_menu_511),
	.qualifier = 0x01,
	.alpha_id = "Toolkit Menu",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	}
};

static struct setup_menu_test setup_menu_data_611 = {
	.pdu = setup_menu_611,
	.pdu_len = sizeof(setup_menu_611),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4,
				0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Menu 1</span>"
		"</div>",
};

static struct setup_menu_test setup_menu_data_612 = {
	.pdu = setup_menu_612,
	.pdu_len = sizeof(setup_menu_612),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 2",
	.items = {
		{ .id = 4, .text = "Item 4" },
		{ .id = 5, .text = "Item 5" },
		{ .id = 6, .text = "Item 6" },
	}
};

static struct setup_menu_test setup_menu_data_621 = {
	.pdu = setup_menu_621,
	.pdu_len = sizeof(setup_menu_621),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x01, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x01, 0xB4, 0x00, 0x06, 0x01, 0xB4,
				0x00, 0x06, 0x01, 0xB4 }
	},
	.html = "<div style=\"text-align: center;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Menu 1</span>"
		"</div>"
};

static struct setup_menu_test setup_menu_data_622 = {
	.pdu = setup_menu_622,
	.pdu_len = sizeof(setup_menu_622),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 2",
	.items = {
		{ .id = 4, .text = "Item 4" },
		{ .id = 5, .text = "Item 5" },
		{ .id = 6, .text = "Item 6" },
	}
};

/*
 * Some problem with data of item #3 in item_text_attr_list
 * and the explanation
 */
static struct setup_menu_test setup_menu_data_631 = {
	.pdu = setup_menu_631,
	.pdu_len = sizeof(setup_menu_631),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x02, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x02, 0xB4, 0x00, 0x06, 0x02, 0xB4,
				0x00, 0x06, 0x02, 0xB4 }
	},
	.html = "<div style=\"text-align: right;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Menu 1</span>"
		"</div>"
};

static struct setup_menu_test setup_menu_data_632 = {
	.pdu = setup_menu_632,
	.pdu_len = sizeof(setup_menu_632),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 2",
	.items = {
		{ .id = 4, .text = "Item 4" },
		{ .id = 5, .text = "Item 5" },
		{ .id = 6, .text = "Item 6" },
	}
};

static struct setup_menu_test setup_menu_data_641 = {
	.pdu = setup_menu_641,
	.pdu_len = sizeof(setup_menu_641),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x04, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x04, 0xB4, 0x00, 0x06, 0x04, 0xB4,
				0x00, 0x06, 0x04, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"big;color: #347235;background-color: #FFFF00;\">"
		"Toolkit Menu 1</span></div>",
};

static struct setup_menu_test setup_menu_data_642 = {
	.pdu = setup_menu_642,
	.pdu_len = sizeof(setup_menu_642),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 2",
	.items = {
		{ .id = 4, .text = "Item 4" },
		{ .id = 5, .text = "Item 5" },
		{ .id = 6, .text = "Item 6" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4,
				0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Menu 2</span>"
		"</div>",
};

static struct setup_menu_test setup_menu_data_643 = {
	.pdu = setup_menu_643,
	.pdu_len = sizeof(setup_menu_643),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 3",
	.items = {
		{ .id = 7, .text = "Item 7" },
		{ .id = 8, .text = "Item 8" },
		{ .id = 9, .text = "Item 9" },
	}
};

static struct setup_menu_test setup_menu_data_651 = {
	.pdu = setup_menu_651,
	.pdu_len = sizeof(setup_menu_651),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x08, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x08, 0xB4, 0x00, 0x06, 0x08, 0xB4,
				0x00, 0x06, 0x08, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"small;color: #347235;background-color: #FFFF00;\">"
		"Toolkit Menu 1</span></div>",
};

static struct setup_menu_test setup_menu_data_661 = {
	.pdu = setup_menu_661,
	.pdu_len = sizeof(setup_menu_661),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x10, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x10, 0xB4, 0x00, 0x06, 0x10, 0xB4,
				0x00, 0x06, 0x10, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-weight: "
		"bold;color: #347235;background-color: #FFFF00;\">"
		"Toolkit Menu 1</span></div>",
};

static struct setup_menu_test setup_menu_data_671 = {
	.pdu = setup_menu_671,
	.pdu_len = sizeof(setup_menu_671),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x20, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x20, 0xB4, 0x00, 0x06, 0x20, 0xB4,
				0x00, 0x06, 0x20, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-style: "
		"italic;color: #347235;background-color: #FFFF00;\">"
		"Toolkit Menu 1</span></div>"
};

static struct setup_menu_test setup_menu_data_681 = {
	.pdu = setup_menu_681,
	.pdu_len = sizeof(setup_menu_681),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x40, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x40, 0xB4, 0x00, 0x06, 0x40, 0xB4,
				0x00, 0x06, 0x40, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: underline;color: #347235;"
		"background-color: #FFFF00;\">Toolkit Menu 1</span></div>",
};

static struct setup_menu_test setup_menu_data_691 = {
	.pdu = setup_menu_691,
	.pdu_len = sizeof(setup_menu_691),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x80, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x80, 0xB4, 0x00, 0x06, 0x80, 0xB4,
				0x00, 0x06, 0x80, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: line-through;color: #347235;"
		"background-color: #FFFF00;\">Toolkit Menu 1</span></div>",
};

static struct setup_menu_test setup_menu_data_6101 = {
	.pdu = setup_menu_6101,
	.pdu_len = sizeof(setup_menu_6101),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Menu",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0C, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 12,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4,
				0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Menu</span>"
		"</div>",
};

static struct setup_menu_test setup_menu_data_711 = {
	.pdu = setup_menu_711,
	.pdu_len = sizeof(setup_menu_711),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.items = {
		{ .id = 1, .text = "ЗДРАВСТВУЙТЕ1" },
		{ .id = 2, .text = "ЗДРАВСТВУЙТЕ2" },
		{ .id = 3, .text = "ЗДРАВСТВУЙТЕ3" },
		{ .id = 4, .text = "ЗДРАВСТВУЙТЕ4" },
	}
};

static struct setup_menu_test setup_menu_data_712 = {
	.pdu = setup_menu_712,
	.pdu_len = sizeof(setup_menu_712),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.items = {
		{ .id = 0x11, .text = "ЗДРАВСТВУЙТЕ5" },
		{ .id = 0x12, .text = "ЗДРАВСТВУЙТЕ6" },
	}
};

static struct setup_menu_test setup_menu_data_713 = {
	.pdu = setup_menu_713,
	.pdu_len = sizeof(setup_menu_713),
	.qualifier = 0x00,
	.alpha_id = ""
};

static struct setup_menu_test setup_menu_data_811 = {
	.pdu = setup_menu_811,
	.pdu_len = sizeof(setup_menu_811),
	.qualifier = 0x00,
	.alpha_id = "工具箱单",
	.items = {
		{ .id = 1, .text = "项目一" },
		{ .id = 2, .text = "项目二" },
		{ .id = 3, .text = "项目三" },
		{ .id = 4, .text = "项目四" },
	}
};

static struct setup_menu_test setup_menu_data_812 = {
	.pdu = setup_menu_812,
	.pdu_len = sizeof(setup_menu_812),
	.qualifier = 0x00,
	.alpha_id = "工具箱单",
	.items = {
		{ .id = 0x11, .text = "一" },
		{ .id = 0x12, .text = "二" },
	}
};

static struct setup_menu_test setup_menu_data_813 = {
	.pdu = setup_menu_813,
	.pdu_len = sizeof(setup_menu_813),
	.qualifier = 0x00,
	.alpha_id = ""
};

static struct setup_menu_test setup_menu_data_911 = {
	.pdu = setup_menu_911,
	.pdu_len = sizeof(setup_menu_911),
	.qualifier = 0x00,
	.alpha_id = "80ル0",
	.items = {
		{ .id = 1, .text = "80ル1" },
		{ .id = 2, .text = "80ル2" },
		{ .id = 3, .text = "80ル3" },
		{ .id = 4, .text = "80ル4" },
	}
};

static struct setup_menu_test setup_menu_data_912 = {
	.pdu = setup_menu_912,
	.pdu_len = sizeof(setup_menu_912),
	.qualifier = 0x00,
	.alpha_id = "80ル0",
	.items = {
		{ .id = 0x11, .text = "80ル5" },
		{ .id = 0x12, .text = "80ル6" },
	}
};

static struct setup_menu_test setup_menu_data_913 = {
	.pdu = setup_menu_913,
	.pdu_len = sizeof(setup_menu_913),
	.qualifier = 0x00,
	.alpha_id = ""
};

static struct setup_menu_test setup_menu_data_neg_1 = {
	.pdu = setup_menu_neg_1,
	.pdu_len = sizeof(setup_menu_neg_1)
};

static struct setup_menu_test setup_menu_data_neg_2 = {
	.pdu = setup_menu_neg_2,
	.pdu_len = sizeof(setup_menu_neg_2)
};

static struct setup_menu_test setup_menu_data_neg_3 = {
	.pdu = setup_menu_neg_3,
	.pdu_len = sizeof(setup_menu_neg_3)
};

static struct setup_menu_test setup_menu_data_neg_4 = {
	.pdu = setup_menu_neg_4,
	.pdu_len = sizeof(setup_menu_neg_4)
};

/* Defined in TS 102.384 Section 27.22.4.7 */
static void test_setup_menu(gconstpointer data)
{
	const struct setup_menu_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SETUP_MENU);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_alpha_id(command->setup_menu.alpha_id, test->alpha_id);
	check_items(command->setup_menu.items, test->items);
	check_items_next_action_indicator(&command->setup_menu.next_act,
						&test->next_act);
	check_icon_id(&command->setup_menu.icon_id, &test->icon_id);
	check_item_icon_id_list(&command->setup_menu.item_icon_id_list,
					&test->item_icon_id_list);
	check_text_attr(&command->setup_menu.text_attr, &test->text_attr);
	check_item_text_attribute_list(&command->setup_menu.item_text_attr_list,
					&test->item_text_attr_list);
	check_text_attr_html(&command->setup_menu.text_attr,
				command->setup_menu.alpha_id, test->html);
	stk_command_free(command);
}

static void test_setup_menu_missing_val(gconstpointer data)
{
	const struct setup_menu_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_MISSING_VALUE);

	stk_command_free(command);
}

static void test_setup_menu_neg(gconstpointer data)
{
	const struct setup_menu_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD);

	stk_command_free(command);
}

struct select_item_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	struct stk_item items[MAX_ITEM];
	struct stk_items_next_action_indicator next_act;
	unsigned char item_id;
	struct stk_icon_id icon_id;
	struct stk_item_icon_id_list item_icon_id_list;
	struct stk_text_attribute text_attr;
	struct stk_item_text_attribute_list item_text_attr_list;
	struct stk_frame_id frame_id;
	char *html;
};

static unsigned char select_item_111[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0x8F, 0x07,
						0x04, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x34 };

static unsigned char select_item_121[] = { 0xD0, 0x81, 0xFC, 0x81, 0x03, 0x01,
						0x24, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0A, 0x4C, 0x61,
						0x72, 0x67, 0x65, 0x4D, 0x65,
						0x6E, 0x75, 0x31, 0x8F, 0x05,
						0x50, 0x5A, 0x65, 0x72, 0x6F,
						0x8F, 0x04, 0x4F, 0x4F, 0x6E,
						0x65, 0x8F, 0x04, 0x4E, 0x54,
						0x77, 0x6F, 0x8F, 0x06, 0x4D,
						0x54, 0x68, 0x72, 0x65, 0x65,
						0x8F, 0x05, 0x4C, 0x46, 0x6F,
						0x75, 0x72, 0x8F, 0x05, 0x4B,
						0x46, 0x69, 0x76, 0x65, 0x8F,
						0x04, 0x4A, 0x53, 0x69, 0x78,
						0x8F, 0x06, 0x49, 0x53, 0x65,
						0x76, 0x65, 0x6E, 0x8F, 0x06,
						0x48, 0x45, 0x69, 0x67, 0x68,
						0x74, 0x8F, 0x05, 0x47, 0x4E,
						0x69, 0x6E, 0x65, 0x8F, 0x06,
						0x46, 0x41, 0x6C, 0x70, 0x68,
						0x61, 0x8F, 0x06, 0x45, 0x42,
						0x72, 0x61, 0x76, 0x6F, 0x8F,
						0x08, 0x44, 0x43, 0x68, 0x61,
						0x72, 0x6C, 0x69, 0x65, 0x8F,
						0x06, 0x43, 0x44, 0x65, 0x6C,
						0x74, 0x61, 0x8F, 0x05, 0x42,
						0x45, 0x63, 0x68, 0x6F, 0x8F,
						0x09, 0x41, 0x46, 0x6F, 0x78,
						0x2D, 0x74, 0x72, 0x6F, 0x74,
						0x8F, 0x06, 0x40, 0x42, 0x6C,
						0x61, 0x63, 0x6B, 0x8F, 0x06,
						0x3F, 0x42, 0x72, 0x6F, 0x77,
						0x6E, 0x8F, 0x04, 0x3E, 0x52,
						0x65, 0x64, 0x8F, 0x07, 0x3D,
						0x4F, 0x72, 0x61, 0x6E, 0x67,
						0x65, 0x8F, 0x07, 0x3C, 0x59,
						0x65, 0x6C, 0x6C, 0x6F, 0x77,
						0x8F, 0x06, 0x3B, 0x47, 0x72,
						0x65, 0x65, 0x6E, 0x8F, 0x05,
						0x3A, 0x42, 0x6C, 0x75, 0x65,
						0x8F, 0x07, 0x39, 0x56, 0x69,
						0x6F, 0x6C, 0x65, 0x74, 0x8F,
						0x05, 0x38, 0x47, 0x72, 0x65,
						0x79, 0x8F, 0x06, 0x37, 0x57,
						0x68, 0x69, 0x74, 0x65, 0x8F,
						0x06, 0x36, 0x6D, 0x69, 0x6C,
						0x6C, 0x69, 0x8F, 0x06, 0x35,
						0x6D, 0x69, 0x63, 0x72, 0x6F,
						0x8F, 0x05, 0x34, 0x6E, 0x61,
						0x6E, 0x6F, 0x8F, 0x05, 0x33,
						0x70, 0x69, 0x63, 0x6F };

static unsigned char select_item_131[] = { 0xD0, 0x81, 0xFB, 0x81, 0x03, 0x01,
						0x24, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0A, 0x4C, 0x61,
						0x72, 0x67, 0x65, 0x4D, 0x65,
						0x6E, 0x75, 0x32, 0x8F, 0x1E,
						0xFF, 0x43, 0x61, 0x6C, 0x6C,
						0x20, 0x46, 0x6F, 0x72, 0x77,
						0x61, 0x72, 0x64, 0x69, 0x6E,
						0x67, 0x20, 0x55, 0x6E, 0x63,
						0x6F, 0x6E, 0x64, 0x69, 0x74,
						0x69, 0x6F, 0x6E, 0x61, 0x6C,
						0x8F, 0x1D, 0xFE, 0x43, 0x61,
						0x6C, 0x6C, 0x20, 0x46, 0x6F,
						0x72, 0x77, 0x61, 0x72, 0x64,
						0x69, 0x6E, 0x67, 0x20, 0x4F,
						0x6E, 0x20, 0x55, 0x73, 0x65,
						0x72, 0x20, 0x42, 0x75, 0x73,
						0x79, 0x8F, 0x1C, 0xFD, 0x43,
						0x61, 0x6C, 0x6C, 0x20, 0x46,
						0x6F, 0x72, 0x77, 0x61, 0x72,
						0x64, 0x69, 0x6E, 0x67, 0x20,
						0x4F, 0x6E, 0x20, 0x4E, 0x6F,
						0x20, 0x52, 0x65, 0x70, 0x6C,
						0x79, 0x8F, 0x26, 0xFC, 0x43,
						0x61, 0x6C, 0x6C, 0x20, 0x46,
						0x6F, 0x72, 0x77, 0x61, 0x72,
						0x64, 0x69, 0x6E, 0x67, 0x20,
						0x4F, 0x6E, 0x20, 0x55, 0x73,
						0x65, 0x72, 0x20, 0x4E, 0x6F,
						0x74, 0x20, 0x52, 0x65, 0x61,
						0x63, 0x68, 0x61, 0x62, 0x6C,
						0x65, 0x8F, 0x1E, 0xFB, 0x42,
						0x61, 0x72, 0x72, 0x69, 0x6E,
						0x67, 0x20, 0x4F, 0x66, 0x20,
						0x41, 0x6C, 0x6C, 0x20, 0x4F,
						0x75, 0x74, 0x67, 0x6F, 0x69,
						0x6E, 0x67, 0x20, 0x43, 0x61,
						0x6C, 0x6C, 0x73, 0x8F, 0x2C,
						0xFA, 0x42, 0x61, 0x72, 0x72,
						0x69, 0x6E, 0x67, 0x20, 0x4F,
						0x66, 0x20, 0x41, 0x6C, 0x6C,
						0x20, 0x4F, 0x75, 0x74, 0x67,
						0x6F, 0x69, 0x6E, 0x67, 0x20,
						0x49, 0x6E, 0x74, 0x65, 0x72,
						0x6E, 0x61, 0x74, 0x69, 0x6F,
						0x6E, 0x61, 0x6C, 0x20, 0x43,
						0x61, 0x6C, 0x6C, 0x73, 0x8F,
						0x11, 0xF9, 0x43, 0x4C, 0x49,
						0x20, 0x50, 0x72, 0x65, 0x73,
						0x65, 0x6E, 0x74, 0x61, 0x74,
						0x69, 0x6F, 0x6E };

static unsigned char select_item_141[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0B, 0x53, 0x65, 0x6C,
						0x65, 0x63, 0x74, 0x20, 0x49,
						0x74, 0x65, 0x6D, 0x8F, 0x04,
						0x11, 0x4F, 0x6E, 0x65, 0x8F,
						0x04, 0x12, 0x54, 0x77, 0x6F };

static unsigned char select_item_151[] = { 0xD0, 0x81, 0xFD, 0x81, 0x03, 0x01,
						0x24, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x81, 0xED, 0x54,
						0x68, 0x65, 0x20, 0x53, 0x49,
						0x4D, 0x20, 0x73, 0x68, 0x61,
						0x6C, 0x6C, 0x20, 0x73, 0x75,
						0x70, 0x70, 0x6C, 0x79, 0x20,
						0x61, 0x20, 0x73, 0x65, 0x74,
						0x20, 0x6F, 0x66, 0x20, 0x69,
						0x74, 0x65, 0x6D, 0x73, 0x20,
						0x66, 0x72, 0x6F, 0x6D, 0x20,
						0x77, 0x68, 0x69, 0x63, 0x68,
						0x20, 0x74, 0x68, 0x65, 0x20,
						0x75, 0x73, 0x65, 0x72, 0x20,
						0x6D, 0x61, 0x79, 0x20, 0x63,
						0x68, 0x6F, 0x6F, 0x73, 0x65,
						0x20, 0x6F, 0x6E, 0x65, 0x2E,
						0x20, 0x45, 0x61, 0x63, 0x68,
						0x20, 0x69, 0x74, 0x65, 0x6D,
						0x20, 0x63, 0x6F, 0x6D, 0x70,
						0x72, 0x69, 0x73, 0x65, 0x73,
						0x20, 0x61, 0x20, 0x73, 0x68,
						0x6F, 0x72, 0x74, 0x20, 0x69,
						0x64, 0x65, 0x6E, 0x74, 0x69,
						0x66, 0x69, 0x65, 0x72, 0x20,
						0x28, 0x75, 0x73, 0x65, 0x64,
						0x20, 0x74, 0x6F, 0x20, 0x69,
						0x6E, 0x64, 0x69, 0x63, 0x61,
						0x74, 0x65, 0x20, 0x74, 0x68,
						0x65, 0x20, 0x73, 0x65, 0x6C,
						0x65, 0x63, 0x74, 0x69, 0x6F,
						0x6E, 0x29, 0x20, 0x61, 0x6E,
						0x64, 0x20, 0x61, 0x20, 0x74,
						0x65, 0x78, 0x74, 0x20, 0x73,
						0x74, 0x72, 0x69, 0x6E, 0x67,
						0x2E, 0x20, 0x4F, 0x70, 0x74,
						0x69, 0x6F, 0x6E, 0x61, 0x6C,
						0x6C, 0x79, 0x20, 0x74, 0x68,
						0x65, 0x20, 0x53, 0x49, 0x4D,
						0x20, 0x6D, 0x61, 0x79, 0x20,
						0x69, 0x6E, 0x63, 0x6C, 0x75,
						0x64, 0x65, 0x20, 0x61, 0x6E,
						0x20, 0x61, 0x6C, 0x70, 0x68,
						0x61, 0x20, 0x69, 0x64, 0x65,
						0x6E, 0x74, 0x69, 0x66, 0x69,
						0x65, 0x72, 0x2E, 0x20, 0x54,
						0x68, 0x65, 0x20, 0x61, 0x6C,
						0x70, 0x68, 0x61, 0x20, 0x69,
						0x64, 0x65, 0x6E, 0x74, 0x69,
						0x66, 0x69, 0x65, 0x72, 0x20,
						0x69, 0x8F, 0x02, 0x01, 0x59 };

static unsigned char select_item_161[] = { 0xD0, 0x81, 0xF3, 0x81, 0x03, 0x01,
						0x24, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0A, 0x30, 0x4C,
						0x61, 0x72, 0x67, 0x65, 0x4D,
						0x65, 0x6E, 0x75, 0x8F, 0x1D,
						0xFF, 0x31, 0x20, 0x43, 0x61,
						0x6C, 0x6C, 0x20, 0x46, 0x6F,
						0x72, 0x77, 0x61, 0x72, 0x64,
						0x20, 0x55, 0x6E, 0x63, 0x6F,
						0x6E, 0x64, 0x69, 0x74, 0x69,
						0x6F, 0x6E, 0x61, 0x6C, 0x8F,
						0x1C, 0xFE, 0x32, 0x20, 0x43,
						0x61, 0x6C, 0x6C, 0x20, 0x46,
						0x6F, 0x72, 0x77, 0x61, 0x72,
						0x64, 0x20, 0x4F, 0x6E, 0x20,
						0x55, 0x73, 0x65, 0x72, 0x20,
						0x42, 0x75, 0x73, 0x79, 0x8F,
						0x1B, 0xFD, 0x33, 0x20, 0x43,
						0x61, 0x6C, 0x6C, 0x20, 0x46,
						0x6F, 0x72, 0x77, 0x61, 0x72,
						0x64, 0x20, 0x4F, 0x6E, 0x20,
						0x4E, 0x6F, 0x20, 0x52, 0x65,
						0x70, 0x6C, 0x79, 0x8F, 0x25,
						0xFC, 0x34, 0x20, 0x43, 0x61,
						0x6C, 0x6C, 0x20, 0x46, 0x6F,
						0x72, 0x77, 0x61, 0x72, 0x64,
						0x20, 0x4F, 0x6E, 0x20, 0x55,
						0x73, 0x65, 0x72, 0x20, 0x4E,
						0x6F, 0x74, 0x20, 0x52, 0x65,
						0x61, 0x63, 0x68, 0x61, 0x62,
						0x6C, 0x65, 0x8F, 0x20, 0xFB,
						0x35, 0x20, 0x42, 0x61, 0x72,
						0x72, 0x69, 0x6E, 0x67, 0x20,
						0x4F, 0x66, 0x20, 0x41, 0x6C,
						0x6C, 0x20, 0x4F, 0x75, 0x74,
						0x67, 0x6F, 0x69, 0x6E, 0x67,
						0x20, 0x43, 0x61, 0x6C, 0x6C,
						0x73, 0x8F, 0x24, 0xFA, 0x36,
						0x20, 0x42, 0x61, 0x72, 0x72,
						0x69, 0x6E, 0x67, 0x20, 0x4F,
						0x66, 0x20, 0x41, 0x6C, 0x6C,
						0x20, 0x4F, 0x75, 0x74, 0x67,
						0x6F, 0x69, 0x6E, 0x67, 0x20,
						0x49, 0x6E, 0x74, 0x20, 0x43,
						0x61, 0x6C, 0x6C, 0x73, 0x8F,
						0x13, 0xF9, 0x37, 0x20, 0x43,
						0x4C, 0x49, 0x20, 0x50, 0x72,
						0x65, 0x73, 0x65, 0x6E, 0x74,
						0x61, 0x74, 0x69, 0x6F, 0x6E };

static unsigned char select_item_211[] = { 0xD0, 0x39, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0x18, 0x03,
						0x13, 0x10, 0x26 };

static unsigned char select_item_311[] = { 0xD0, 0x37, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0x90, 0x01,
						0x02 };

static unsigned char select_item_411[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x24,
						0x80, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33 };

static unsigned char select_item_511[] = { 0xD0, 0x3E, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0x9E, 0x02,
						0x01, 0x01, 0x9F, 0x04, 0x01,
						0x05, 0x05, 0x05 };

static unsigned char select_item_521[] = { 0xD0, 0x3E, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33, 0x9E, 0x02,
						0x00, 0x01, 0x9F, 0x04, 0x00,
						0x05, 0x05, 0x05 };

static unsigned char select_item_611[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x24,
						0x03, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33 };

static unsigned char select_item_621[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x24,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32, 0x8F,
						0x07, 0x03, 0x49, 0x74, 0x65,
						0x6D, 0x20, 0x33 };

static unsigned char select_item_711[] = { 0xD0, 0x2B, 0x81, 0x03, 0x01, 0x24,
						0x04, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0E, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x8F, 0x07, 0x01, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x31,
						0x8F, 0x07, 0x02, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x32 };

static unsigned char select_item_811[] = { 0xD0, 0x30, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0A, 0x3C, 0x54, 0x49,
						0x4D, 0x45, 0x2D, 0x4F, 0x55,
						0x54, 0x3E, 0x8F, 0x07, 0x01,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x31, 0x8F, 0x07, 0x02, 0x49,
						0x74, 0x65, 0x6D, 0x20, 0x32,
						0x8F, 0x07, 0x03, 0x49, 0x74,
						0x65, 0x6D, 0x20, 0x33 };

static unsigned char select_item_911[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char select_item_912[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34 };

static unsigned char select_item_921[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x01, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x01, 0xB4, 0x00, 0x06,
						0x01, 0xB4 };

static unsigned char select_item_922[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34 };

static unsigned char select_item_931[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x02, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x02, 0xB4, 0x00, 0x06,
						0x02, 0xB4 };

static unsigned char select_item_932[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34 };

static unsigned char select_item_941[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x04, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x04, 0xB4, 0x00, 0x06,
						0x04, 0xB4 };

static unsigned char select_item_942[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char select_item_943[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x33, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x35, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x36 };

static unsigned char select_item_951[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x08, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x08, 0xB4, 0x00, 0x06,
						0x08, 0xB4 };

static unsigned char select_item_952[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char select_item_953[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x33, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x35, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x36 };

static unsigned char select_item_961[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x10, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x10, 0xB4, 0x00, 0x06,
						0x10, 0xB4 };

static unsigned char select_item_962[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char select_item_963[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x33, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x35, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x36 };

static unsigned char select_item_971[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x20, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x20, 0xB4, 0x00, 0x06,
						0x20, 0xB4 };

static unsigned char select_item_972[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char select_item_973[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x33, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x35, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x36 };

static unsigned char select_item_981[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x40, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x40, 0xB4, 0x00, 0x06,
						0x40, 0xB4 };

static unsigned char select_item_982[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char select_item_983[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x33, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x35, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x36 };

static unsigned char select_item_991[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x80, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x80, 0xB4, 0x00, 0x06,
						0x80, 0xB4 };

static unsigned char select_item_992[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char select_item_993[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x33, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x35, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x36 };

static unsigned char select_item_9101[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x31, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x31, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4, 0xD1, 0x08, 0x00,
						0x06, 0x00, 0xB4, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char select_item_9102[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x54, 0x6F, 0x6F,
						0x6C, 0x6B, 0x69, 0x74, 0x20,
						0x53, 0x65, 0x6C, 0x65, 0x63,
						0x74, 0x20, 0x32, 0x8F, 0x07,
						0x01, 0x49, 0x74, 0x65, 0x6D,
						0x20, 0x33, 0x8F, 0x07, 0x02,
						0x49, 0x74, 0x65, 0x6D, 0x20,
						0x34 };

static unsigned char select_item_1011[] = { 0xD0, 0x7E, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x19, 0x80, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15, 0x8F, 0x1C, 0x01,
						0x80, 0x04, 0x17, 0x04, 0x14,
						0x04, 0x20, 0x04, 0x10, 0x04,
						0x12, 0x04, 0x21, 0x04, 0x22,
						0x04, 0x12, 0x04, 0x23, 0x04,
						0x19, 0x04, 0x22, 0x04, 0x15,
						0x00, 0x31, 0x8F, 0x1C, 0x02,
						0x80, 0x04, 0x17, 0x04, 0x14,
						0x04, 0x20, 0x04, 0x10, 0x04,
						0x12, 0x04, 0x21, 0x04, 0x22,
						0x04, 0x12, 0x04, 0x23, 0x04,
						0x19, 0x04, 0x22, 0x04, 0x15,
						0x00, 0x32, 0x8F, 0x1C, 0x03,
						0x80, 0x04, 0x17, 0x04, 0x14,
						0x04, 0x20, 0x04, 0x10, 0x04,
						0x12, 0x04, 0x21, 0x04, 0x22,
						0x04, 0x12, 0x04, 0x23, 0x04,
						0x19, 0x04, 0x22, 0x04, 0x15,
						0x00, 0x33 };

static unsigned char select_item_1021[] = { 0xD0, 0x53, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0F, 0x81, 0x0C, 0x08,
						0x97, 0x94, 0xA0, 0x90, 0x92,
						0xA1, 0xA2, 0x92, 0xA3, 0x99,
						0xA2, 0x95, 0x8F, 0x11, 0x01,
						0x81, 0x0D, 0x08, 0x97, 0x94,
						0xA0, 0x90, 0x92, 0xA1, 0xA2,
						0x92, 0xA3, 0x99, 0xA2, 0x95,
						0x31, 0x8F, 0x11, 0x02, 0x81,
						0x0D, 0x08, 0x97, 0x94, 0xA0,
						0x90, 0x92, 0xA1, 0xA2, 0x92,
						0xA3, 0x99, 0xA2, 0x95, 0x32,
						0x8F, 0x11, 0x03, 0x81, 0x0D,
						0x08, 0x97, 0x94, 0xA0, 0x90,
						0x92, 0xA1, 0xA2, 0x92, 0xA3,
						0x99, 0xA2, 0x95, 0x33 };

static unsigned char select_item_1031[] = { 0xD0, 0x57, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x10, 0x82, 0x0C, 0x04,
						0x10, 0x87, 0x84, 0x90, 0x80,
						0x82, 0x91, 0x92, 0x82, 0x93,
						0x89, 0x92, 0x85, 0x8F, 0x12,
						0x01, 0x82, 0x0D, 0x04, 0x10,
						0x87, 0x84, 0x90, 0x80, 0x82,
						0x91, 0x92, 0x82, 0x93, 0x89,
						0x92, 0x85, 0x31, 0x8F, 0x12,
						0x02, 0x82, 0x0D, 0x04, 0x10,
						0x87, 0x84, 0x90, 0x80, 0x82,
						0x91, 0x92, 0x82, 0x93, 0x89,
						0x92, 0x85, 0x32, 0x8F, 0x12,
						0x03, 0x82, 0x0D, 0x04, 0x10,
						0x87, 0x84, 0x90, 0x80, 0x82,
						0x91, 0x92, 0x82, 0x93, 0x89,
						0x92, 0x85, 0x33 };

static unsigned char select_item_1111[] = { 0xD0, 0x3E, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x0B, 0x80, 0x5D, 0xE5,
						0x51, 0x77, 0x7B, 0xB1, 0x90,
						0x09, 0x62, 0xE9, 0x8F, 0x08,
						0x01, 0x80, 0x98, 0x79, 0x76,
						0xEE, 0x4E, 0x00, 0x8F, 0x08,
						0x02, 0x80, 0x98, 0x79, 0x76,
						0xEE, 0x4E, 0x8C, 0x8F, 0x08,
						0x03, 0x80, 0x98, 0x79, 0x76,
						0xEE, 0x4E, 0x09, 0x8F, 0x08,
						0x04, 0x80, 0x98, 0x79, 0x76,
						0xEE, 0x56, 0xDB };

static unsigned char select_item_1211[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x09, 0x80, 0x00, 0x38,
						0x00, 0x30, 0x30, 0xEB, 0x00,
						0x30, 0x8F, 0x0A, 0x01, 0x80,
						0x00, 0x38, 0x00, 0x30, 0x30,
						0xEB, 0x00, 0x31, 0x8F, 0x0A,
						0x02, 0x80, 0x00, 0x38, 0x00,
						0x30, 0x30, 0xEB, 0x00, 0x32,
						0x8F, 0x0A, 0x03, 0x80, 0x00,
						0x38, 0x00, 0x30, 0x30, 0xEB,
						0x00, 0x33 };

static unsigned char select_item_1221[] = { 0xD0, 0x30, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x07, 0x81, 0x04, 0x61,
						0x38, 0x31, 0xEB, 0x30, 0x8F,
						0x08, 0x01, 0x81, 0x04, 0x61,
						0x38, 0x31, 0xEB, 0x31, 0x8F,
						0x08, 0x02, 0x81, 0x04, 0x61,
						0x38, 0x31, 0xEB, 0x32, 0x8F,
						0x08, 0x03, 0x81, 0x04, 0x61,
						0x38, 0x31, 0xEB, 0x33 };

static unsigned char select_item_1231[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x24,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0x85, 0x08, 0x82, 0x04, 0x30,
						0xA0, 0x38, 0x32, 0xCB, 0x30,
						0x8F, 0x09, 0x01, 0x82, 0x04,
						0x30, 0xA0, 0x38, 0x32, 0xCB,
						0x31, 0x8F, 0x09, 0x02, 0x82,
						0x04, 0x30, 0xA0, 0x38, 0x32,
						0xCB, 0x32, 0x8F, 0x09, 0x03,
						0x82, 0x04, 0x30, 0xA0, 0x38,
						0x32, 0xCB, 0x33 };

static struct select_item_test select_item_data_111 = {
	.pdu = select_item_111,
	.pdu_len = sizeof(select_item_111),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
		{ .id = 4, .text = "Item 4" },
	}
};

static struct select_item_test select_item_data_121 = {
	.pdu = select_item_121,
	.pdu_len = sizeof(select_item_121),
	.qualifier = 0x00,
	.alpha_id = "LargeMenu1",
	.items = {
		{ .id = 0x50, .text = "Zero" },
		{ .id = 0x4F, .text = "One" },
		{ .id = 0x4E, .text = "Two" },
		{ .id = 0x4D, .text = "Three" },
		{ .id = 0x4C, .text = "Four" },
		{ .id = 0x4B, .text = "Five" },
		{ .id = 0x4A, .text = "Six" },
		{ .id = 0x49, .text = "Seven" },
		{ .id = 0x48, .text = "Eight" },
		{ .id = 0x47, .text = "Nine" },
		{ .id = 0x46, .text = "Alpha" },
		{ .id = 0x45, .text = "Bravo" },
		{ .id = 0x44, .text = "Charlie" },
		{ .id = 0x43, .text = "Delta" },
		{ .id = 0x42, .text = "Echo" },
		{ .id = 0x41, .text = "Fox-trot" },
		{ .id = 0x40, .text = "Black" },
		{ .id = 0x3F, .text = "Brown" },
		{ .id = 0x3E, .text = "Red" },
		{ .id = 0x3D, .text = "Orange" },
		{ .id = 0x3C, .text = "Yellow" },
		{ .id = 0x3B, .text = "Green" },
		{ .id = 0x3A, .text = "Blue" },
		{ .id = 0x39, .text = "Violet" },
		{ .id = 0x38, .text = "Grey" },
		{ .id = 0x37, .text = "White" },
		{ .id = 0x36, .text = "milli" },
		{ .id = 0x35, .text = "micro" },
		{ .id = 0x34, .text = "nano" },
		{ .id = 0x33, .text = "pico" },
	}
};

static struct select_item_test select_item_data_131 = {
	.pdu = select_item_131,
	.pdu_len = sizeof(select_item_131),
	.qualifier = 0x00,
	.alpha_id = "LargeMenu2",
	.items = {
		{ .id = 0xFF, .text = "Call Forwarding Unconditional" },
		{ .id = 0xFE, .text = "Call Forwarding On User Busy" },
		{ .id = 0xFD, .text = "Call Forwarding On No Reply" },
		{ .id = 0xFC, .text = "Call Forwarding On User Not Reachable" },
		{ .id = 0xFB, .text = "Barring Of All Outgoing Calls" },
		{ .id = 0xFA,
			.text = "Barring Of All Outgoing International Calls" },
		{ .id = 0xF9, .text = "CLI Presentation" },
	}
};

static struct select_item_test select_item_data_141 = {
	.pdu = select_item_141,
	.pdu_len = sizeof(select_item_141),
	.qualifier = 0x00,
	.alpha_id = "Select Item",
	.items = {
		{ .id = 0x11, .text = "One" },
		{ .id = 0x12, .text = "Two" },
	}
};

static struct select_item_test select_item_data_151 = {
	.pdu = select_item_151,
	.pdu_len = sizeof(select_item_151),
	.qualifier = 0x00,
	.alpha_id = "The SIM shall supply a set of items from which the user "
		"may choose one. Each item comprises a short identifier (used "
		"to indicate the selection) and a text string. Optionally the "
		"SIM may include an alpha identifier. The alpha identifier i",
	.items = {
		{ .id = 0x01, .text = "Y" },
	}
};

static struct select_item_test select_item_data_161 = {
	.pdu = select_item_161,
	.pdu_len = sizeof(select_item_161),
	.qualifier = 0x00,
	.alpha_id = "0LargeMenu",
	.items = {
		{ .id = 0xFF, .text = "1 Call Forward Unconditional" },
		{ .id = 0xFE, .text = "2 Call Forward On User Busy" },
		{ .id = 0xFD, .text = "3 Call Forward On No Reply" },
		{ .id = 0xFC, .text = "4 Call Forward On User Not Reachable" },
		{ .id = 0xFB, .text = "5 Barring Of All Outgoing Calls" },
		{ .id = 0xFA, .text = "6 Barring Of All Outgoing Int Calls" },
		{ .id = 0xF9, .text = "7 CLI Presentation" },
	}
};

static struct select_item_test select_item_data_211 = {
	.pdu = select_item_211,
	.pdu_len = sizeof(select_item_211),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.next_act = {
		.list = { STK_COMMAND_TYPE_SEND_SMS,
				STK_COMMAND_TYPE_SETUP_CALL,
				STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO},
		.len = 3
	}
};

static struct select_item_test select_item_data_311 = {
	.pdu = select_item_311,
	.pdu_len = sizeof(select_item_311),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.item_id = 0x02
};

static struct select_item_test select_item_data_411 = {
	.pdu = select_item_411,
	.pdu_len = sizeof(select_item_411),
	.qualifier = 0x80,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	}
};

static struct select_item_test select_item_data_511 = {
	.pdu = select_item_511,
	.pdu_len = sizeof(select_item_511),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 1
	},
	.item_icon_id_list = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.list = { 5, 5, 5 },
		.len = 3
	}
};

static struct select_item_test select_item_data_521 = {
	.pdu = select_item_521,
	.pdu_len = sizeof(select_item_521),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 1
	},
	.item_icon_id_list = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.list = { 5, 5, 5 },
		.len = 3
	}
};

static struct select_item_test select_item_data_611 = {
	.pdu = select_item_611,
	.pdu_len = sizeof(select_item_611),
	.qualifier = 0x03,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	}
};

static struct select_item_test select_item_data_621 = {
	.pdu = select_item_621,
	.pdu_len = sizeof(select_item_621),
	.qualifier = 0x01,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	}
};

static struct select_item_test select_item_data_711 = {
	.pdu = select_item_711,
	.pdu_len = sizeof(select_item_711),
	.qualifier = 0x04,
	.alpha_id = "Toolkit Select",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	}
};

static struct select_item_test select_item_data_811 = {
	.pdu = select_item_811,
	.pdu_len = sizeof(select_item_811),
	.qualifier = 0x00,
	.alpha_id = "<TIME-OUT>",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
		{ .id = 3, .text = "Item 3" },
	}
};

static struct select_item_test select_item_data_911 = {
	.pdu = select_item_911,
	.pdu_len = sizeof(select_item_911),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 1</span>"
		"</div>",
};

static struct select_item_test select_item_data_912 = {
	.pdu = select_item_912,
	.pdu_len = sizeof(select_item_912),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	}
};

static struct select_item_test select_item_data_921 = {
	.pdu = select_item_921,
	.pdu_len = sizeof(select_item_921),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x01, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x01, 0xB4, 0x00, 0x06, 0x01, 0xB4 }
	},
	.html = "<div style=\"text-align: center;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 1</span>"
		"</div>",
};

static struct select_item_test select_item_data_922 = {
	.pdu = select_item_922,
	.pdu_len = sizeof(select_item_922),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	}
};

static struct select_item_test select_item_data_931 = {
	.pdu = select_item_931,
	.pdu_len = sizeof(select_item_931),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x02, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x02, 0xB4, 0x00, 0x06, 0x02, 0xB4 }
	},
	.html = "<div style=\"text-align: right;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 1</span>"
		"</div>"
};

static struct select_item_test select_item_data_932 = {
	.pdu = select_item_932,
	.pdu_len = sizeof(select_item_932),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	}
};

static struct select_item_test select_item_data_941 = {
	.pdu = select_item_941,
	.pdu_len = sizeof(select_item_941),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x04, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x04, 0xB4, 0x00, 0x06, 0x04, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"big;color: #347235;background-color: #FFFF00;\">"
		"Toolkit Select 1</span></div>",
};

static struct select_item_test select_item_data_942 = {
	.pdu = select_item_942,
	.pdu_len = sizeof(select_item_942),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 2</span>"
		"</div>",
};

static struct select_item_test select_item_data_943 = {
	.pdu = select_item_943,
	.pdu_len = sizeof(select_item_943),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 3",
	.items = {
		{ .id = 1, .text = "Item 5" },
		{ .id = 2, .text = "Item 6" },
	}
};

static struct select_item_test select_item_data_951 = {
	.pdu = select_item_951,
	.pdu_len = sizeof(select_item_951),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x08, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x08, 0xB4, 0x00, 0x06, 0x08, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"small;color: #347235;background-color: #FFFF00;\">"
		"Toolkit Select 1</span></div>",
};

static struct select_item_test select_item_data_952 = {
	.pdu = select_item_952,
	.pdu_len = sizeof(select_item_952),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 2</span>"
		"</div>",
};

static struct select_item_test select_item_data_953 = {
	.pdu = select_item_953,
	.pdu_len = sizeof(select_item_953),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 3",
	.items = {
		{ .id = 1, .text = "Item 5" },
		{ .id = 2, .text = "Item 6" },
	}
};

static struct select_item_test select_item_data_961 = {
	.pdu = select_item_961,
	.pdu_len = sizeof(select_item_961),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x10, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x10, 0xB4, 0x00, 0x06, 0x10, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-weight: "
		"bold;color: #347235;background-color: #FFFF00;\">"
		"Toolkit Select 1</span></div>",
};

static struct select_item_test select_item_data_962 = {
	.pdu = select_item_962,
	.pdu_len = sizeof(select_item_962),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 2</span>"
		"</div>",
};

static struct select_item_test select_item_data_963 = {
	.pdu = select_item_963,
	.pdu_len = sizeof(select_item_963),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 3",
	.items = {
		{ .id = 1, .text = "Item 5" },
		{ .id = 2, .text = "Item 6" },
	}
};

static struct select_item_test select_item_data_971 = {
	.pdu = select_item_971,
	.pdu_len = sizeof(select_item_971),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x20, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x20, 0xB4, 0x00, 0x06, 0x20, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-style: "
		"italic;color: #347235;background-color: #FFFF00;\">"
		"Toolkit Select 1</span></div>"
};

static struct select_item_test select_item_data_972 = {
	.pdu = select_item_972,
	.pdu_len = sizeof(select_item_972),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 2</span>"
		"</div>",
};

static struct select_item_test select_item_data_973 = {
	.pdu = select_item_973,
	.pdu_len = sizeof(select_item_973),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 3",
	.items = {
		{ .id = 1, .text = "Item 5" },
		{ .id = 2, .text = "Item 6" },
	}
};

static struct select_item_test select_item_data_981 = {
	.pdu = select_item_981,
	.pdu_len = sizeof(select_item_981),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x40, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x40, 0xB4, 0x00, 0x06, 0x40, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: underline;color: #347235;"
		"background-color: #FFFF00;\">Toolkit Select 1</span></div>",
};

static struct select_item_test select_item_data_982 = {
	.pdu = select_item_982,
	.pdu_len = sizeof(select_item_982),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 2</span>"
		"</div>",
};

static struct select_item_test select_item_data_983 = {
	.pdu = select_item_983,
	.pdu_len = sizeof(select_item_983),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 3",
	.items = {
		{ .id = 1, .text = "Item 5" },
		{ .id = 2, .text = "Item 6" },
	}
};

static struct select_item_test select_item_data_991 = {
	.pdu = select_item_991,
	.pdu_len = sizeof(select_item_991),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x80, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x80, 0xB4, 0x00, 0x06, 0x80, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: line-through;color: #347235;"
		"background-color: #FFFF00;\">Toolkit Select 1</span></div>",
};

static struct select_item_test select_item_data_992 = {
	.pdu = select_item_992,
	.pdu_len = sizeof(select_item_992),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 2</span>"
		"</div>",
};

static struct select_item_test select_item_data_993 = {
	.pdu = select_item_993,
	.pdu_len = sizeof(select_item_993),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 3",
	.items = {
		{ .id = 1, .text = "Item 5" },
		{ .id = 2, .text = "Item 6" },
	}
};

static struct select_item_test select_item_data_9101 = {
	.pdu = select_item_9101,
	.pdu_len = sizeof(select_item_9101),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 1",
	.items = {
		{ .id = 1, .text = "Item 1" },
		{ .id = 2, .text = "Item 2" },
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.item_text_attr_list = {
		.len = 8,
		.list = { 0x00, 0x06, 0x00, 0xB4, 0x00, 0x06, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Toolkit Select 1</span>"
		"</div>",
};

static struct select_item_test select_item_data_9102 = {
	.pdu = select_item_9102,
	.pdu_len = sizeof(select_item_9102),
	.qualifier = 0x00,
	.alpha_id = "Toolkit Select 2",
	.items = {
		{ .id = 1, .text = "Item 3" },
		{ .id = 2, .text = "Item 4" },
	}
};

static struct select_item_test select_item_data_1011 = {
	.pdu = select_item_1011,
	.pdu_len = sizeof(select_item_1011),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.items = {
		{ .id = 1, .text = "ЗДРАВСТВУЙТЕ1" },
		{ .id = 2, .text = "ЗДРАВСТВУЙТЕ2" },
		{ .id = 3, .text = "ЗДРАВСТВУЙТЕ3" },
	}
};

static struct select_item_test select_item_data_1021 = {
	.pdu = select_item_1021,
	.pdu_len = sizeof(select_item_1021),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.items = {
		{ .id = 1, .text = "ЗДРАВСТВУЙТЕ1" },
		{ .id = 2, .text = "ЗДРАВСТВУЙТЕ2" },
		{ .id = 3, .text = "ЗДРАВСТВУЙТЕ3" },
	}
};

static struct select_item_test select_item_data_1031 = {
	.pdu = select_item_1031,
	.pdu_len = sizeof(select_item_1031),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.items = {
		{ .id = 1, .text = "ЗДРАВСТВУЙТЕ1" },
		{ .id = 2, .text = "ЗДРАВСТВУЙТЕ2" },
		{ .id = 3, .text = "ЗДРАВСТВУЙТЕ3" },
	}
};

static struct select_item_test select_item_data_1111 = {
	.pdu = select_item_1111,
	.pdu_len = sizeof(select_item_1111),
	.qualifier = 0x00,
	.alpha_id = "工具箱选择",
	.items = {
		{ .id = 1, .text = "项目一" },
		{ .id = 2, .text = "项目二" },
		{ .id = 3, .text = "项目三" },
		{ .id = 4, .text = "项目四" },
	}
};

static struct select_item_test select_item_data_1211 = {
	.pdu = select_item_1211,
	.pdu_len = sizeof(select_item_1211),
	.qualifier = 0x00,
	.alpha_id = "80ル0",
	.items = {
		{ .id = 1, .text = "80ル1" },
		{ .id = 2, .text = "80ル2" },
		{ .id = 3, .text = "80ル3" },
	}
};

static struct select_item_test select_item_data_1221 = {
	.pdu = select_item_1221,
	.pdu_len = sizeof(select_item_1221),
	.qualifier = 0x00,
	.alpha_id = "81ル0",
	.items = {
		{ .id = 1, .text = "81ル1" },
		{ .id = 2, .text = "81ル2" },
		{ .id = 3, .text = "81ル3" },
	}
};

static struct select_item_test select_item_data_1231 = {
	.pdu = select_item_1231,
	.pdu_len = sizeof(select_item_1231),
	.qualifier = 0x00,
	.alpha_id = "82ル0",
	.items = {
		{ .id = 1, .text = "82ル1" },
		{ .id = 2, .text = "82ル2" },
		{ .id = 3, .text = "82ル3" },
	}
};

static void test_select_item(gconstpointer data)
{
	const struct select_item_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SELECT_ITEM);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_alpha_id(command->select_item.alpha_id, test->alpha_id);
	check_items(command->select_item.items, test->items);
	check_items_next_action_indicator(&command->select_item.next_act,
						&test->next_act);
	check_item_id(command->select_item.item_id, test->item_id);
	check_icon_id(&command->select_item.icon_id, &test->icon_id);
	check_item_icon_id_list(&command->select_item.item_icon_id_list,
					&test->item_icon_id_list);
	check_text_attr(&command->select_item.text_attr, &test->text_attr);
	check_item_text_attribute_list(
				&command->select_item.item_text_attr_list,
				&test->item_text_attr_list);
	check_text_attr_html(&command->select_item.text_attr,
				command->select_item.alpha_id, test->html);
	check_frame_id(&command->select_item.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct send_sms_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	struct sms_test gsm_sms;
	struct stk_common_byte_array cdma_sms;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

/* 3GPP TS 31.124 Section 27.22.4.10.1.4.2 */
static unsigned char send_sms_111[] = { 0xD0, 0x37, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x07, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x53, 0x4D, 0x86,
						0x09, 0x91, 0x11, 0x22, 0x33,
						0x44, 0x55, 0x66, 0x77, 0xF8,
						0x8B, 0x18, 0x01, 0x00, 0x09,
						0x91, 0x10, 0x32, 0x54, 0x76,
						0xF8, 0x40, 0xF4, 0x0C, 0x54,
						0x65, 0x73, 0x74, 0x20, 0x4D,
						0x65, 0x73, 0x73, 0x61, 0x67,
						0x65 };

static unsigned char send_sms_121[] = { 0xD0, 0x32, 0x81, 0x03, 0x01, 0x13,
						0x01, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x07, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x53, 0x4D, 0x86,
						0x09, 0x91, 0x11, 0x22, 0x33,
						0x44, 0x55, 0x66, 0x77, 0xF8,
						0x8B, 0x13, 0x01, 0x00, 0x09,
						0x91, 0x10, 0x32, 0x54, 0x76,
						0xF8, 0x40, 0xF4, 0x07, 0x53,
						0x65, 0x6E, 0x64, 0x20, 0x53,
						0x4D };

static unsigned char send_sms_131[] = { 0xD0, 0x3D, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0D, 0x53, 0x68, 0x6F,
						0x72, 0x74, 0x20, 0x4D, 0x65,
						0x73, 0x73, 0x61, 0x67, 0x65,
						0x86, 0x09, 0x91, 0x11, 0x22,
						0x33, 0x44, 0x55, 0x66, 0x77,
						0xF8, 0x8B, 0x18, 0x01, 0x00,
						0x09, 0x91, 0x10, 0x32, 0x54,
						0x76, 0xF8, 0x40, 0xF0, 0x0D,
						0x53, 0xF4, 0x5B, 0x4E, 0x07,
						0x35, 0xCB, 0xF3, 0x79, 0xF8,
						0x5C, 0x06 };

static unsigned char send_sms_141[] = { 0xD0, 0x81, 0xFD, 0x81, 0x03, 0x01,
						0x13, 0x01, 0x82, 0x02, 0x81,
						0x83, 0x85, 0x38, 0x54, 0x68,
						0x65, 0x20, 0x61, 0x64, 0x64,
						0x72, 0x65, 0x73, 0x73, 0x20,
						0x64, 0x61, 0x74, 0x61, 0x20,
						0x6F, 0x62, 0x6A, 0x65, 0x63,
						0x74, 0x20, 0x68, 0x6F, 0x6C,
						0x64, 0x73, 0x20, 0x74, 0x68,
						0x65, 0x20, 0x52, 0x50, 0x11,
						0x44, 0x65, 0x73, 0x74, 0x69,
						0x6E, 0x61, 0x74, 0x69, 0x6F,
						0x6E, 0x11, 0x41, 0x64, 0x64,
						0x72, 0x65, 0x73, 0x73, 0x86,
						0x09, 0x91, 0x11, 0x22, 0x33,
						0x44, 0x55, 0x66, 0x77, 0xF8,
						0x8B, 0x81, 0xAC, 0x01, 0x00,
						0x09, 0x91, 0x10, 0x32, 0x54,
						0x76, 0xF8, 0x40, 0xF4, 0xA0,
						0x54, 0x77, 0x6F, 0x20, 0x74,
						0x79, 0x70, 0x65, 0x73, 0x20,
						0x61, 0x72, 0x65, 0x20, 0x64,
						0x65, 0x66, 0x69, 0x6E, 0x65,
						0x64, 0x3A, 0x20, 0x2D, 0x20,
						0x41, 0x20, 0x73, 0x68, 0x6F,
						0x72, 0x74, 0x20, 0x6D, 0x65,
						0x73, 0x73, 0x61, 0x67, 0x65,
						0x20, 0x74, 0x6F, 0x20, 0x62,
						0x65, 0x20, 0x73, 0x65, 0x6E,
						0x74, 0x20, 0x74, 0x6F, 0x20,
						0x74, 0x68, 0x65, 0x20, 0x6E,
						0x65, 0x74, 0x77, 0x6F, 0x72,
						0x6B, 0x20, 0x69, 0x6E, 0x20,
						0x61, 0x6E, 0x20, 0x53, 0x4D,
						0x53, 0x2D, 0x53, 0x55, 0x42,
						0x4D, 0x49, 0x54, 0x20, 0x6D,
						0x65, 0x73, 0x73, 0x61, 0x67,
						0x65, 0x2C, 0x20, 0x6F, 0x72,
						0x20, 0x61, 0x6E, 0x20, 0x53,
						0x4D, 0x53, 0x2D, 0x43, 0x4F,
						0x4D, 0x4D, 0x41, 0x4E, 0x44,
						0x20, 0x6D, 0x65, 0x73, 0x73,
						0x61, 0x67, 0x65, 0x2C, 0x20,
						0x77, 0x68, 0x65, 0x72, 0x65,
						0x20, 0x74, 0x68, 0x65, 0x20,
						0x75, 0x73, 0x65, 0x72, 0x20,
						0x64, 0x61, 0x74, 0x61, 0x20,
						0x63, 0x61, 0x6E, 0x20, 0x62,
						0x65, 0x20, 0x70, 0x61, 0x73,
						0x73, 0x65, 0x64, 0x20, 0x74,
						0x72, 0x61, 0x6E, 0x73, 0x70 };

static unsigned char send_sms_151[] = { 0xD0, 0x81, 0xE9, 0x81, 0x03, 0x01,
						0x13, 0x00, 0x82, 0x02, 0x81,
						0x83, 0x85, 0x38, 0x54, 0x68,
						0x65, 0x20, 0x61, 0x64, 0x64,
						0x72, 0x65, 0x73, 0x73, 0x20,
						0x64, 0x61, 0x74, 0x61, 0x20,
						0x6F, 0x62, 0x6A, 0x65, 0x63,
						0x74, 0x20, 0x68, 0x6F, 0x6C,
						0x64, 0x73, 0x20, 0x74, 0x68,
						0x65, 0x20, 0x52, 0x50, 0x20,
						0x44, 0x65, 0x73, 0x74, 0x69,
						0x6E, 0x61, 0x74, 0x69, 0x6F,
						0x6E, 0x20, 0x41, 0x64, 0x64,
						0x72, 0x65, 0x73, 0x73, 0x86,
						0x09, 0x91, 0x11, 0x22, 0x33,
						0x44, 0x55, 0x66, 0x77, 0xF8,
						0x8B, 0x81, 0x98, 0x01, 0x00,
						0x09, 0x91, 0x10, 0x32, 0x54,
						0x76, 0xF8, 0x40, 0xF0, 0xA0,
						0xD4, 0xFB, 0x1B, 0x44, 0xCF,
						0xC3, 0xCB, 0x73, 0x50, 0x58,
						0x5E, 0x06, 0x91, 0xCB, 0xE6,
						0xB4, 0xBB, 0x4C, 0xD6, 0x81,
						0x5A, 0xA0, 0x20, 0x68, 0x8E,
						0x7E, 0xCB, 0xE9, 0xA0, 0x76,
						0x79, 0x3E, 0x0F, 0x9F, 0xCB,
						0x20, 0xFA, 0x1B, 0x24, 0x2E,
						0x83, 0xE6, 0x65, 0x37, 0x1D,
						0x44, 0x7F, 0x83, 0xE8, 0xE8,
						0x32, 0xC8, 0x5D, 0xA6, 0xDF,
						0xDF, 0xF2, 0x35, 0x28, 0xED,
						0x06, 0x85, 0xDD, 0xA0, 0x69,
						0x73, 0xDA, 0x9A, 0x56, 0x85,
						0xCD, 0x24, 0x15, 0xD4, 0x2E,
						0xCF, 0xE7, 0xE1, 0x73, 0x99,
						0x05, 0x7A, 0xCB, 0x41, 0x61,
						0x37, 0x68, 0xDA, 0x9C, 0xB6,
						0x86, 0xCF, 0x66, 0x33, 0xE8,
						0x24, 0x82, 0xDA, 0xE5, 0xF9,
						0x3C, 0x7C, 0x2E, 0xB3, 0x40,
						0x77, 0x74, 0x59, 0x5E, 0x06,
						0xD1, 0xD1, 0x65, 0x50, 0x7D,
						0x5E, 0x96, 0x83, 0xC8, 0x61,
						0x7A, 0x18, 0x34, 0x0E, 0xBB,
						0x41, 0xE2, 0x32, 0x08, 0x1E,
						0x9E, 0xCF, 0xCB, 0x64, 0x10,
						0x5D, 0x1E, 0x76, 0xCF, 0xE1 };

static unsigned char send_sms_161[] = { 0xD0, 0x81, 0xFD, 0x81, 0x03, 0x01,
						0x13, 0x00, 0x82, 0x02, 0x81,
						0x83, 0x85, 0x81, 0xE6, 0x54,
						0x77, 0x6F, 0x20, 0x74, 0x79,
						0x70, 0x65, 0x73, 0x20, 0x61,
						0x72, 0x65, 0x20, 0x64, 0x65,
						0x66, 0x69, 0x6E, 0x65, 0x64,
						0x3A, 0x20, 0x2D, 0x20, 0x41,
						0x20, 0x73, 0x68, 0x6F, 0x72,
						0x74, 0x20, 0x6D, 0x65, 0x73,
						0x73, 0x61, 0x67, 0x65, 0x20,
						0x74, 0x6F, 0x20, 0x62, 0x65,
						0x20, 0x73, 0x65, 0x6E, 0x74,
						0x20, 0x74, 0x6F, 0x20, 0x74,
						0x68, 0x65, 0x20, 0x6E, 0x65,
						0x74, 0x77, 0x6F, 0x72, 0x6B,
						0x20, 0x69, 0x6E, 0x20, 0x61,
						0x6E, 0x20, 0x53, 0x4D, 0x53,
						0x2D, 0x53, 0x55, 0x42, 0x4D,
						0x49, 0x54, 0x20, 0x6D, 0x65,
						0x73, 0x73, 0x61, 0x67, 0x65,
						0x2C, 0x20, 0x6F, 0x72, 0x20,
						0x61, 0x6E, 0x20, 0x53, 0x4D,
						0x53, 0x2D, 0x43, 0x4F, 0x4D,
						0x4D, 0x41, 0x4E, 0x44, 0x20,
						0x6D, 0x65, 0x73, 0x73, 0x61,
						0x67, 0x65, 0x2C, 0x20, 0x77,
						0x68, 0x65, 0x72, 0x65, 0x20,
						0x74, 0x68, 0x65, 0x20, 0x75,
						0x73, 0x65, 0x72, 0x20, 0x64,
						0x61, 0x74, 0x61, 0x20, 0x63,
						0x61, 0x6E, 0x20, 0x62, 0x65,
						0x20, 0x70, 0x61, 0x73, 0x73,
						0x65, 0x64, 0x20, 0x74, 0x72,
						0x61, 0x6E, 0x73, 0x70, 0x61,
						0x72, 0x65, 0x6E, 0x74, 0x6C,
						0x79, 0x3B, 0x20, 0x2D, 0x20,
						0x41, 0x20, 0x73, 0x68, 0x6F,
						0x72, 0x74, 0x20, 0x6D, 0x65,
						0x73, 0x73, 0x61, 0x67, 0x65,
						0x20, 0x74, 0x6F, 0x20, 0x62,
						0x65, 0x20, 0x73, 0x65, 0x6E,
						0x74, 0x20, 0x74, 0x6F, 0x20,
						0x74, 0x68, 0x65, 0x20, 0x6E,
						0x65, 0x74, 0x77, 0x6F, 0x72,
						0x6B, 0x20, 0x69, 0x6E, 0x20,
						0x61, 0x6E, 0x20, 0x53, 0x4D,
						0x53, 0x2D, 0x53, 0x55, 0x42,
						0x4D, 0x49, 0x54, 0x20, 0x8B,
						0x09, 0x01, 0x00, 0x02, 0x91,
						0x10, 0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_171[] = { 0xD0, 0x30, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x00, 0x86, 0x09, 0x91,
						0x11, 0x22, 0x33, 0x44, 0x55,
						0x66, 0x77, 0xF8, 0x8B, 0x18,
						0x01, 0x00, 0x09, 0x91, 0x10,
						0x32, 0x54, 0x76, 0xF8, 0x40,
						0xF4, 0x0C, 0x54, 0x65, 0x73,
						0x74, 0x20, 0x4D, 0x65, 0x73,
						0x73, 0x61, 0x67, 0x65 };

static unsigned char send_sms_181[] = { 0xD0, 0x2E, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x86, 0x09, 0x91, 0x11, 0x22,
						0x33, 0x44, 0x55, 0x66, 0x77,
						0xF8, 0x8B, 0x18, 0x01, 0x00,
						0x09, 0x91, 0x10, 0x32, 0x54,
						0x76, 0xF8, 0x40, 0xF4, 0x0C,
						0x54, 0x65, 0x73, 0x74, 0x20,
						0x4D, 0x65, 0x73, 0x73, 0x61,
						0x67, 0x65 };

static unsigned char send_sms_211[] = { 0xD0, 0x55, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x19, 0x80, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15, 0x86, 0x09, 0x91,
						0x11, 0x22, 0x33, 0x44, 0x55,
						0x66, 0x77, 0xF8, 0x8B, 0x24,
						0x01, 0x00, 0x09, 0x91, 0x10,
						0x32, 0x54, 0x76, 0xF8, 0x40,
						0x08, 0x18, 0x04, 0x17, 0x04,
						0x14, 0x04, 0x20, 0x04, 0x10,
						0x04, 0x12, 0x04, 0x21, 0x04,
						0x22, 0x04, 0x12, 0x04, 0x23,
						0x04, 0x19, 0x04, 0x22, 0x04,
						0x15 };

static unsigned char send_sms_212[] = { 0xD0, 0x4B, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0F, 0x81, 0x0C, 0x08,
						0x97, 0x94, 0xA0, 0x90, 0x92,
						0xA1, 0xA2, 0x92, 0xA3, 0x99,
						0xA2, 0x95, 0x86, 0x09, 0x91,
						0x11, 0x22, 0x33, 0x44, 0x55,
						0x66, 0x77, 0xF8, 0x8B, 0x24,
						0x01, 0x00, 0x09, 0x91, 0x10,
						0x32, 0x54, 0x76, 0xF8, 0x40,
						0x08, 0x18, 0x04, 0x17, 0x04,
						0x14, 0x04, 0x20, 0x04, 0x10,
						0x04, 0x12, 0x04, 0x21, 0x04,
						0x22, 0x04, 0x12, 0x04, 0x23,
						0x04, 0x19, 0x04, 0x22, 0x04,
						0x15 };

static unsigned char send_sms_213[] = { 0xD0, 0x4C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x82, 0x0C, 0x04,
						0x10, 0x87, 0x84, 0x90, 0x80,
						0x82, 0x91, 0x92, 0x82, 0x93,
						0x89, 0x92, 0x85, 0x86, 0x09,
						0x91, 0x11, 0x22, 0x33, 0x44,
						0x55, 0x66, 0x77, 0xF8, 0x8B,
						0x24, 0x01, 0x00, 0x09, 0x91,
						0x10, 0x32, 0x54, 0x76, 0xF8,
						0x40, 0x08, 0x18, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15 };

static unsigned char send_sms_311[] = { 0xD0, 0x3B, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x07, 0x4E, 0x4F, 0x20,
						0x49, 0x43, 0x4F, 0x4E, 0x86,
						0x09, 0x91, 0x11, 0x22, 0x33,
						0x44, 0x55, 0x66, 0x77, 0xF8,
						0x8B, 0x18, 0x01, 0x00, 0x09,
						0x91, 0x10, 0x32, 0x54, 0x76,
						0xF8, 0x40, 0xF4, 0x0C, 0x54,
						0x65, 0x73, 0x74, 0x20, 0x4D,
						0x65, 0x73, 0x73, 0x61, 0x67,
						0x65, 0x9E, 0x02, 0x00, 0x01 };

static unsigned char send_sms_321[] = { 0xD0, 0x3B, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x07, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x53, 0x4D, 0x86,
						0x09, 0x91, 0x11, 0x22, 0x33,
						0x44, 0x55, 0x66, 0x77, 0xF8,
						0x8B, 0x18, 0x01, 0x00, 0x09,
						0x91, 0x10, 0x32, 0x54, 0x76,
						0xF8, 0x40, 0xF4, 0x0C, 0x54,
						0x65, 0x73, 0x74, 0x20, 0x4D,
						0x65, 0x73, 0x73, 0x61, 0x67,
						0x65, 0x1E, 0x02, 0x01, 0x01 };

static unsigned char send_sms_411[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x00, 0xB4 };

static unsigned char send_sms_412[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_421[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x01, 0xB4 };

static unsigned char send_sms_422[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_431[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x02, 0xB4 };

static unsigned char send_sms_432[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_441[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x04, 0xB4 };

static unsigned char send_sms_442[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x00, 0xB4 };

static unsigned char send_sms_443[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_451[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x08, 0xB4 };

static unsigned char send_sms_452[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x00, 0xB4 };

static unsigned char send_sms_453[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_461[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x10, 0xB4 };

static unsigned char send_sms_462[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x00, 0xB4 };

static unsigned char send_sms_463[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_471[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x20, 0xB4 };

static unsigned char send_sms_472[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x00, 0xB4 };

static unsigned char send_sms_473[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_481[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x40, 0xB4 };

static unsigned char send_sms_482[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x00, 0xB4 };

static unsigned char send_sms_483[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_491[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x80, 0xB4 };

static unsigned char send_sms_492[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x00, 0xB4 };

static unsigned char send_sms_493[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_4101[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20, 0xD0,
						0x04, 0x00, 0x10, 0x00, 0xB4 };

static unsigned char send_sms_4102[] = { 0xD0, 0x26, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8B, 0x09,
						0x01, 0x00, 0x02, 0x91, 0x10,
						0x40, 0xF0, 0x01, 0x20 };

static unsigned char send_sms_511[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x05, 0x80, 0x4E, 0x2D,
						0x4E, 0x00, 0x86, 0x09, 0x91,
						0x11, 0x22, 0x33, 0x44, 0x55,
						0x66, 0x77, 0xF8, 0x8B, 0x10,
						0x01, 0x00, 0x09, 0x91, 0x10,
						0x32, 0x54, 0x76, 0xF8, 0x40,
						0x08, 0x04, 0x4E, 0x2D, 0x4E,
						0x00 };

static unsigned char send_sms_512[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x05, 0x81, 0x02, 0x9C,
						0xAD, 0x80, 0x86, 0x09, 0x91,
						0x11, 0x22, 0x33, 0x44, 0x55,
						0x66, 0x77, 0xF8, 0x8B, 0x10,
						0x01, 0x00, 0x09, 0x91, 0x10,
						0x32, 0x54, 0x76, 0xF8, 0x40,
						0x08, 0x04, 0x4E, 0x2D, 0x4E,
						0x00 };

static unsigned char send_sms_513[] = { 0xD0, 0x2E, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x06, 0x82, 0x02, 0x4E,
						0x00, 0xAD, 0x80, 0x86, 0x09,
						0x91, 0x11, 0x22, 0x33, 0x44,
						0x55, 0x66, 0x77, 0xF8, 0x8B,
						0x10, 0x01, 0x00, 0x09, 0x91,
						0x10, 0x32, 0x54, 0x76, 0xF8,
						0x40, 0x08, 0x04, 0x4E, 0x2D,
						0x4E, 0x00 };

static unsigned char send_sms_611[] = { 0xD0, 0x35, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x09, 0x80, 0x00, 0x38,
						0x00, 0x30, 0x30, 0xEB, 0x00,
						0x30, 0x86, 0x09, 0x91, 0x11,
						0x22, 0x33, 0x44, 0x55, 0x66,
						0x77, 0xF8, 0x8B, 0x14, 0x01,
						0x00, 0x09, 0x91, 0x10, 0x32,
						0x54, 0x76, 0xF8, 0x40, 0x08,
						0x08, 0x00, 0x38, 0x00, 0x30,
						0x30, 0xEB, 0x00, 0x31 };

static unsigned char send_sms_612[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x07, 0x81, 0x04, 0x61,
						0x38, 0x31, 0xEB, 0x31, 0x86,
						0x09, 0x91, 0x11, 0x22, 0x33,
						0x44, 0x55, 0x66, 0x77, 0xF8,
						0x8B, 0x14, 0x01, 0x00, 0x09,
						0x91, 0x10, 0x32, 0x54, 0x76,
						0xF8, 0x40, 0x08, 0x08, 0x00,
						0x38, 0x00, 0x30, 0x30, 0xEB,
						0x00, 0x32 };

static unsigned char send_sms_613[] = { 0xD0, 0x34, 0x81, 0x03, 0x01, 0x13,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x08, 0x82, 0x04, 0x30,
						0xA0, 0x38, 0x32, 0xCB, 0x32,
						0x86, 0x09, 0x91, 0x11, 0x22,
						0x33, 0x44, 0x55, 0x66, 0x77,
						0xF8, 0x8B, 0x14, 0x01, 0x00,
						0x09, 0x91, 0x10, 0x32, 0x54,
						0x76, 0xF8, 0x40, 0x08, 0x08,
						0x00, 0x38, 0x00, 0x30, 0x30,
						0xEB, 0x00, 0x33 };

static struct send_sms_test send_sms_data_111 = {
	.pdu = send_sms_111,
	.pdu_len = sizeof(send_sms_111),
	.qualifier = 0x00,
	.alpha_id = "Send SM",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF4,
			.udl = 12,
			.ud = "Test Message"
		} }
	}
};

static struct send_sms_test send_sms_data_121 = {
	.pdu = send_sms_121,
	.pdu_len = sizeof(send_sms_121),
	.qualifier = 0x01,
	.alpha_id = "Send SM",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 7,
			.ud = "Send SM"
		} }
	}
};

static struct send_sms_test send_sms_data_131 = {
	.pdu = send_sms_131,
	.pdu_len = sizeof(send_sms_131),
	.qualifier = 0x00,
	.alpha_id = "Short Message",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 13,
			.ud = "Short Message"
		} }
	},
};

static struct send_sms_test send_sms_data_141 = {
	.pdu = send_sms_141,
	.pdu_len = sizeof(send_sms_141),
	.qualifier = 0x01,
	.alpha_id = "The address data object holds the RP_Destination_Address",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 160,
			.ud = "Two types are defined: - A short message to be "
				"sent to the network in an SMS-SUBMIT message, "
				"or an SMS-COMMAND message, where the user "
				"data can be passed transp"
		} }
	}
};

static struct send_sms_test send_sms_data_151 = {
	.pdu = send_sms_151,
	.pdu_len = sizeof(send_sms_151),
	.qualifier = 0x00,
	.alpha_id = "The address data object holds the RP Destination Address",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 160,
			.ud = "Two types are defined: - A short message to be "
				"sent to the network in an SMS-SUBMIT message, "
				"or an SMS-COMMAND message, where the user "
				"data can be passed transp"
		} }
	}
};

/* There should be a space after alpha_id */
static struct send_sms_test send_sms_data_161 = {
	.pdu = send_sms_161,
	.pdu_len = sizeof(send_sms_161),
	.qualifier = 0x00,
	.alpha_id = "Two types are defined: - A short message to be sent to "
			"the network in an SMS-SUBMIT message, or an "
			"SMS-COMMAND message, where the user data can be "
			"passed transparently; - A short message to be sent "
			"to the network in an SMS-SUBMIT ",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_171 = {
	.pdu = send_sms_171,
	.pdu_len = sizeof(send_sms_171),
	.qualifier = 0x00,
	.alpha_id = "",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF4,
			.udl = 12,
			.ud = "Test Message"
		} }
	}
};

static struct send_sms_test send_sms_data_181 = {
	.pdu = send_sms_181,
	.pdu_len = sizeof(send_sms_181),
	.qualifier = 0x00,
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF4,
			.udl = 12,
			.ud = "Test Message"
		} }
	}
};

static struct send_sms_test send_sms_data_211 = {
	.pdu = send_sms_211,
	.pdu_len = sizeof(send_sms_211),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 24,
			.ud = "ЗДРАВСТВУЙТЕ"
		} }
	}
};

static struct send_sms_test send_sms_data_212 = {
	.pdu = send_sms_212,
	.pdu_len = sizeof(send_sms_212),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 24,
			.ud = "ЗДРАВСТВУЙТЕ"
		} }
	}
};

static struct send_sms_test send_sms_data_213 = {
	.pdu = send_sms_213,
	.pdu_len = sizeof(send_sms_213),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 24,
			.ud = "ЗДРАВСТВУЙТЕ"
		} }
	}
};

static struct send_sms_test send_sms_data_311 = {
	.pdu = send_sms_311,
	.pdu_len = sizeof(send_sms_311),
	.qualifier = 0x00,
	.alpha_id = "NO ICON",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF4,
			.udl = 12,
			.ud = "Test Message"
		} }
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_sms_test send_sms_data_321 = {
	.pdu = send_sms_321,
	.pdu_len = sizeof(send_sms_321),
	.qualifier = 0x00,
	.alpha_id = "Send SM",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0xF4,
			.udl = 12,
			.ud = "Test Message"
		} }
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_sms_test send_sms_data_411 = {
	.pdu = send_sms_411,
	.pdu_len = sizeof(send_sms_411),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_412 = {
	.pdu = send_sms_412,
	.pdu_len = sizeof(send_sms_412),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_421 = {
	.pdu = send_sms_421,
	.pdu_len = sizeof(send_sms_421),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x01, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_422 = {
	.pdu = send_sms_422,
	.pdu_len = sizeof(send_sms_422),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_431 = {
	.pdu = send_sms_431,
	.pdu_len = sizeof(send_sms_431),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x02, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_432 = {
	.pdu = send_sms_432,
	.pdu_len = sizeof(send_sms_432),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_441 = {
	.pdu = send_sms_441,
	.pdu_len = sizeof(send_sms_441),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x04, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_442 = {
	.pdu = send_sms_442,
	.pdu_len = sizeof(send_sms_442),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_443 = {
	.pdu = send_sms_443,
	.pdu_len = sizeof(send_sms_443),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_451 = {
	.pdu = send_sms_451,
	.pdu_len = sizeof(send_sms_451),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x08, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_452 = {
	.pdu = send_sms_452,
	.pdu_len = sizeof(send_sms_452),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_453 = {
	.pdu = send_sms_453,
	.pdu_len = sizeof(send_sms_453),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_461 = {
	.pdu = send_sms_461,
	.pdu_len = sizeof(send_sms_461),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x10, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_462 = {
	.pdu = send_sms_462,
	.pdu_len = sizeof(send_sms_462),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_463 = {
	.pdu = send_sms_463,
	.pdu_len = sizeof(send_sms_463),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_471 = {
	.pdu = send_sms_471,
	.pdu_len = sizeof(send_sms_471),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x20, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_472 = {
	.pdu = send_sms_472,
	.pdu_len = sizeof(send_sms_472),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_473 = {
	.pdu = send_sms_473,
	.pdu_len = sizeof(send_sms_473),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_481 = {
	.pdu = send_sms_481,
	.pdu_len = sizeof(send_sms_481),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x40, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_482 = {
	.pdu = send_sms_482,
	.pdu_len = sizeof(send_sms_482),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_483 = {
	.pdu = send_sms_483,
	.pdu_len = sizeof(send_sms_483),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_491 = {
	.pdu = send_sms_491,
	.pdu_len = sizeof(send_sms_491),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x80, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_492 = {
	.pdu = send_sms_492,
	.pdu_len = sizeof(send_sms_492),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_493 = {
	.pdu = send_sms_493,
	.pdu_len = sizeof(send_sms_493),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

static struct send_sms_test send_sms_data_4101 = {
	.pdu = send_sms_4101,
	.pdu_len = sizeof(send_sms_4101),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_sms_test send_sms_data_4102 = {
	.pdu = send_sms_4102,
	.pdu_len = sizeof(send_sms_4102),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.gsm_sms = {
		{}, SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "01",
			},
			.pid = 0x40,
			.dcs = 0xF0,
			.udl = 1,
			.ud = " "
		} }
	}
};

/* The TP-UDL should be 4, instead of 24 */
static struct send_sms_test send_sms_data_511 = {
	.pdu = send_sms_511,
	.pdu_len = sizeof(send_sms_511),
	.qualifier = 0x00,
	.alpha_id = "中一",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 4,
			.ud = "中一"
		} }
	}
};

/* The TP-UDL should be 4, instead of 24 */
static struct send_sms_test send_sms_data_512 = {
	.pdu = send_sms_512,
	.pdu_len = sizeof(send_sms_512),
	.qualifier = 0x00,
	.alpha_id = "中一",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 4,
			.ud = "中一"
		} }
	}
};

/* The TP-UDL should be 4, instead of 24 */
static struct send_sms_test send_sms_data_513 = {
	.pdu = send_sms_513,
	.pdu_len = sizeof(send_sms_513),
	.qualifier = 0x00,
	.alpha_id = "中一",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 4,
			.ud = "中一"
		} }
	}
};

static struct send_sms_test send_sms_data_611 = {
	.pdu = send_sms_611,
	.pdu_len = sizeof(send_sms_611),
	.qualifier = 0x00,
	.alpha_id = "80ル0",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 8,
			.ud = "80ル1"
		} }
	}
};

static struct send_sms_test send_sms_data_612 = {
	.pdu = send_sms_612,
	.pdu_len = sizeof(send_sms_612),
	.qualifier = 0x00,
	.alpha_id = "81ル1",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 8,
			.ud = "80ル2"
		} }
	}
};

static struct send_sms_test send_sms_data_613 = {
	.pdu = send_sms_613,
	.pdu_len = sizeof(send_sms_613),
	.qualifier = 0x00,
	.alpha_id = "82ル2",
	.gsm_sms = {
		{
			.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
			.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
			.address = "112233445566778",
		},
		SMS_TYPE_SUBMIT,
		{.submit = {
			.mr = 0x00,
			.daddr = {
				.number_type = SMS_NUMBER_TYPE_INTERNATIONAL,
				.numbering_plan = SMS_NUMBERING_PLAN_ISDN,
				.address = "012345678",
			},
			.pid = 0x40,
			.dcs = 0x08,
			.udl = 8,
			.ud = "80ル3"
		} }
	}
};

static void test_send_sms(gconstpointer data)
{
	const struct send_sms_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SEND_SMS);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_NETWORK);

	check_alpha_id(command->send_sms.alpha_id, test->alpha_id);
	check_gsm_sms(&command->send_sms.gsm_sms, &test->gsm_sms);
	check_cdma_sms_tpdu(&command->send_sms.cdma_sms, &test->cdma_sms);
	check_icon_id(&command->send_sms.icon_id, &test->icon_id);
	check_text_attr(&command->send_sms.text_attr, &test->text_attr);
	check_frame_id(&command->send_sms.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct send_ss_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	struct stk_ss ss;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

static unsigned char send_ss_111[] = { 0xD0, 0x29, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0C, 0x43, 0x61, 0x6C,
						0x6C, 0x20, 0x46, 0x6F, 0x72,
						0x77, 0x61, 0x72, 0x64, 0x89,
						0x10, 0x91, 0xAA, 0x12, 0x0A,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0x21, 0x43, 0x65, 0x87, 0xA9,
						0x01, 0xFB };

static unsigned char send_ss_141[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0C, 0x43, 0x61, 0x6C,
						0x6C, 0x20, 0x46, 0x6F, 0x72,
						0x77, 0x61, 0x72, 0x64, 0x89,
						0x14, 0x91, 0xAA, 0x12, 0x0A,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0x21, 0x43, 0x65, 0xA7, 0x11,
						0xFB };

static unsigned char send_ss_151[] = { 0xD0, 0x81, 0xFD, 0x81, 0x03, 0x01,
						0x11, 0x00, 0x82, 0x02, 0x81,
						0x83, 0x85, 0x81, 0xEB, 0x45,
						0x76, 0x65, 0x6E, 0x20, 0x69,
						0x66, 0x20, 0x74, 0x68, 0x65,
						0x20, 0x46, 0x69, 0x78, 0x65,
						0x64, 0x20, 0x44, 0x69, 0x61,
						0x6C, 0x6C, 0x69, 0x6E, 0x67,
						0x20, 0x4E, 0x75, 0x6D, 0x62,
						0x65, 0x72, 0x20, 0x73, 0x65,
						0x72, 0x76, 0x69, 0x63, 0x65,
						0x20, 0x69, 0x73, 0x20, 0x65,
						0x6E, 0x61, 0x62, 0x6C, 0x65,
						0x64, 0x2C, 0x20, 0x74, 0x68,
						0x65, 0x20, 0x73, 0x75, 0x70,
						0x70, 0x6C, 0x65, 0x6D, 0x65,
						0x6E, 0x74, 0x61, 0x72, 0x79,
						0x20, 0x73, 0x65, 0x72, 0x76,
						0x69, 0x63, 0x65, 0x20, 0x63,
						0x6F, 0x6E, 0x74, 0x72, 0x6F,
						0x6C, 0x20, 0x73, 0x74, 0x72,
						0x69, 0x6E, 0x67, 0x20, 0x69,
						0x6E, 0x63, 0x6C, 0x75, 0x64,
						0x65, 0x64, 0x20, 0x69, 0x6E,
						0x20, 0x74, 0x68, 0x65, 0x20,
						0x53, 0x45, 0x4E, 0x44, 0x20,
						0x53, 0x53, 0x20, 0x70, 0x72,
						0x6F, 0x61, 0x63, 0x74, 0x69,
						0x76, 0x65, 0x20, 0x63, 0x6F,
						0x6D, 0x6D, 0x61, 0x6E, 0x64,
						0x20, 0x73, 0x68, 0x61, 0x6C,
						0x6C, 0x20, 0x6E, 0x6F, 0x74,
						0x20, 0x62, 0x65, 0x20, 0x63,
						0x68, 0x65, 0x63, 0x6B, 0x65,
						0x64, 0x20, 0x61, 0x67, 0x61,
						0x69, 0x6E, 0x73, 0x74, 0x20,
						0x74, 0x68, 0x6F, 0x73, 0x65,
						0x20, 0x6F, 0x66, 0x20, 0x74,
						0x68, 0x65, 0x20, 0x46, 0x44,
						0x4E, 0x20, 0x6C, 0x69, 0x73,
						0x74, 0x2E, 0x20, 0x55, 0x70,
						0x6F, 0x6E, 0x20, 0x72, 0x65,
						0x63, 0x65, 0x69, 0x76, 0x69,
						0x6E, 0x67, 0x20, 0x74, 0x68,
						0x69, 0x73, 0x20, 0x63, 0x6F,
						0x6D, 0x6D, 0x61, 0x6E, 0x64,
						0x2C, 0x20, 0x74, 0x68, 0x65,
						0x20, 0x4D, 0x45, 0x20, 0x73,
						0x68, 0x61, 0x6C, 0x6C, 0x20,
						0x64, 0x65, 0x63, 0x69, 0x89,
						0x04, 0xFF, 0xBA, 0x13, 0xFB };

static unsigned char send_ss_161[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x00, 0x89, 0x10, 0x91,
						0xAA, 0x12, 0x0A, 0x21, 0x43,
						0x65, 0x87, 0x09, 0x21, 0x43,
						0x65, 0x87, 0xA9, 0x01, 0xFB };

static unsigned char send_ss_211[] = { 0xD0, 0x2B, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x42, 0x61, 0x73,
						0x69, 0x63, 0x20, 0x49, 0x63,
						0x6F, 0x6E, 0x89, 0x10, 0x91,
						0xAA, 0x12, 0x0A, 0x21, 0x43,
						0x65, 0x87, 0x09, 0x21, 0x43,
						0x65, 0x87, 0xA9, 0x01, 0xFB,
						0x9E, 0x02, 0x00, 0x01 };

static unsigned char send_ss_221[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x43, 0x6F, 0x6C,
						0x6F, 0x75, 0x72, 0x20, 0x49,
						0x63, 0x6F, 0x6E, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0x9E, 0x02, 0x00, 0x02 };

static unsigned char send_ss_231[] = { 0xD0, 0x2B, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x42, 0x61, 0x73,
						0x69, 0x63, 0x20, 0x49, 0x63,
						0x6F, 0x6E, 0x89, 0x10, 0x91,
						0xAA, 0x12, 0x0A, 0x21, 0x43,
						0x65, 0x87, 0x09, 0x21, 0x43,
						0x65, 0x87, 0xA9, 0x01, 0xFB,
						0x9E, 0x02, 0x01, 0x01 };

static unsigned char send_ss_241[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x89, 0x0E, 0x91, 0xAA, 0x12,
						0x0A, 0x21, 0x43, 0x65, 0x87,
						0x09, 0x21, 0x43, 0x65, 0x87,
						0xB9, 0x9E, 0x02, 0x01, 0x01 };

static unsigned char send_ss_311[] = { 0xD0, 0x36, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x19, 0x80, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15, 0x89, 0x10, 0x91,
						0xAA, 0x12, 0x0A, 0x21, 0x43,
						0x65, 0x87, 0x09, 0x21, 0x43,
						0x65, 0x87, 0xA9, 0x01, 0xFB };

static unsigned char send_ss_411[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char send_ss_412[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_421[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x01, 0xB4 };

static unsigned char send_ss_422[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_431[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x02, 0xB4 };

static unsigned char send_ss_432[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_441[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x04, 0xB4 };

static unsigned char send_ss_442[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char send_ss_443[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_451[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x08, 0xB4 };

static unsigned char send_ss_452[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char send_ss_453[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_461[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x10, 0xB4 };

static unsigned char send_ss_462[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char send_ss_463[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_471[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x20, 0xB4 };

static unsigned char send_ss_472[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char send_ss_473[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_481[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x40, 0xB4 };

static unsigned char send_ss_482[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char send_ss_483[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_491[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x80, 0xB4 };

static unsigned char send_ss_492[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char send_ss_493[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_4101[] = { 0xD0, 0x33, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char send_ss_4102[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x89, 0x10,
						0x91, 0xAA, 0x12, 0x0A, 0x21,
						0x43, 0x65, 0x87, 0x09, 0x21,
						0x43, 0x65, 0x87, 0xA9, 0x01,
						0xFB };

static unsigned char send_ss_511[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x05, 0x80, 0x4F, 0x60,
						0x59, 0x7D, 0x89, 0x10, 0x91,
						0xAA, 0x12, 0x0A, 0x21, 0x43,
						0x65, 0x87, 0x09, 0x21, 0x43,
						0x65, 0x87, 0xA9, 0x01, 0xFB };

static unsigned char send_ss_611[] = { 0xD0, 0x20, 0x81, 0x03, 0x01, 0x11,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x03, 0x80, 0x30, 0xEB,
						0x89, 0x10, 0x91, 0xAA, 0x12,
						0x0A, 0x21, 0x43, 0x65, 0x87,
						0x09, 0x21, 0x43, 0x65, 0x87,
						0xA9, 0x01, 0xFB };

static struct send_ss_test send_ss_data_111 = {
	.pdu = send_ss_111,
	.pdu_len = sizeof(send_ss_111),
	.qualifier = 0x00,
	.alpha_id = "Call Forward",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_141 = {
	.pdu = send_ss_141,
	.pdu_len = sizeof(send_ss_141),
	.qualifier = 0x00,
	.alpha_id = "Call Forward",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*0123456789012345678901234567*11#"
	}
};

static struct send_ss_test send_ss_data_151 = {
	.pdu = send_ss_151,
	.pdu_len = sizeof(send_ss_151),
	.qualifier = 0x00,
	.alpha_id = "Even if the Fixed Dialling Number service is enabled, the "
		"supplementary service control string included in the SEND SS "
		"proactive command shall not be checked against those of the "
		"FDN list. Upon receiving this command, the ME shall deci",
	.ss = {
		.ton_npi = 0xFF,
		.ss = "*#31#"
	}
};

static struct send_ss_test send_ss_data_161 = {
	.pdu = send_ss_161,
	.pdu_len = sizeof(send_ss_161),
	.qualifier = 0x00,
	.alpha_id = "",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_211 = {
	.pdu = send_ss_211,
	.pdu_len = sizeof(send_ss_211),
	.qualifier = 0x00,
	.alpha_id = "Basic Icon",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_ss_test send_ss_data_221 = {
	.pdu = send_ss_221,
	.pdu_len = sizeof(send_ss_221),
	.qualifier = 0x00,
	.alpha_id = "Colour Icon",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct send_ss_test send_ss_data_231 = {
	.pdu = send_ss_231,
	.pdu_len = sizeof(send_ss_231),
	.qualifier = 0x00,
	.alpha_id = "Basic Icon",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_ss_test send_ss_data_241 = {
	.pdu = send_ss_241,
	.pdu_len = sizeof(send_ss_241),
	.qualifier = 0x00,
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789#"
	},
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_ss_test send_ss_data_311 = {
	.pdu = send_ss_311,
	.pdu_len = sizeof(send_ss_311),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_411 = {
	.pdu = send_ss_411,
	.pdu_len = sizeof(send_ss_411),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_412 = {
	.pdu = send_ss_412,
	.pdu_len = sizeof(send_ss_412),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_421 = {
	.pdu = send_ss_421,
	.pdu_len = sizeof(send_ss_421),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x01, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_422 = {
	.pdu = send_ss_422,
	.pdu_len = sizeof(send_ss_422),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_431 = {
	.pdu = send_ss_431,
	.pdu_len = sizeof(send_ss_431),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x02, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_432 = {
	.pdu = send_ss_432,
	.pdu_len = sizeof(send_ss_432),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_441 = {
	.pdu = send_ss_441,
	.pdu_len = sizeof(send_ss_441),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x04, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_442 = {
	.pdu = send_ss_442,
	.pdu_len = sizeof(send_ss_442),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_443 = {
	.pdu = send_ss_443,
	.pdu_len = sizeof(send_ss_443),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_451 = {
	.pdu = send_ss_451,
	.pdu_len = sizeof(send_ss_451),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x08, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_452 = {
	.pdu = send_ss_452,
	.pdu_len = sizeof(send_ss_452),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_453 = {
	.pdu = send_ss_453,
	.pdu_len = sizeof(send_ss_453),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_461 = {
	.pdu = send_ss_461,
	.pdu_len = sizeof(send_ss_461),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x10, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_462 = {
	.pdu = send_ss_462,
	.pdu_len = sizeof(send_ss_462),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_463 = {
	.pdu = send_ss_463,
	.pdu_len = sizeof(send_ss_463),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_471 = {
	.pdu = send_ss_471,
	.pdu_len = sizeof(send_ss_471),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x20, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_472 = {
	.pdu = send_ss_472,
	.pdu_len = sizeof(send_ss_472),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_473 = {
	.pdu = send_ss_473,
	.pdu_len = sizeof(send_ss_473),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_481 = {
	.pdu = send_ss_481,
	.pdu_len = sizeof(send_ss_481),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x40, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_482 = {
	.pdu = send_ss_482,
	.pdu_len = sizeof(send_ss_482),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_483 = {
	.pdu = send_ss_483,
	.pdu_len = sizeof(send_ss_483),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_491 = {
	.pdu = send_ss_491,
	.pdu_len = sizeof(send_ss_491),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x80, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_492 = {
	.pdu = send_ss_492,
	.pdu_len = sizeof(send_ss_492),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_493 = {
	.pdu = send_ss_493,
	.pdu_len = sizeof(send_ss_493),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_4101 = {
	.pdu = send_ss_4101,
	.pdu_len = sizeof(send_ss_4101),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ss_test send_ss_data_4102 = {
	.pdu = send_ss_4102,
	.pdu_len = sizeof(send_ss_4102),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_511 = {
	.pdu = send_ss_511,
	.pdu_len = sizeof(send_ss_511),
	.qualifier = 0x00,
	.alpha_id = "你好",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static struct send_ss_test send_ss_data_611 = {
	.pdu = send_ss_611,
	.pdu_len = sizeof(send_ss_611),
	.qualifier = 0x00,
	.alpha_id = "ル",
	.ss = {
		.ton_npi = 0x91,
		.ss = "**21*01234567890123456789*10#"
	}
};

static void test_send_ss(gconstpointer data)
{
	const struct send_ss_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SEND_SS);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_NETWORK);

	check_alpha_id(command->send_ss.alpha_id, test->alpha_id);
	check_ss(&command->send_ss.ss, &test->ss);
	check_icon_id(&command->send_ss.icon_id, &test->icon_id);
	check_text_attr(&command->send_ss.text_attr, &test->text_attr);
	check_frame_id(&command->send_ss.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct send_ussd_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	char *ussd;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

static unsigned char send_ussd_111[] = { 0xD0, 0x50, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x37, 0x2D, 0x62,
						0x69, 0x74, 0x20, 0x55, 0x53,
						0x53, 0x44, 0x8A, 0x39, 0xF0,
						0x41, 0xE1, 0x90, 0x58, 0x34,
						0x1E, 0x91, 0x49, 0xE5, 0x92,
						0xD9, 0x74, 0x3E, 0xA1, 0x51,
						0xE9, 0x94, 0x5A, 0xB5, 0x5E,
						0xB1, 0x59, 0x6D, 0x2B, 0x2C,
						0x1E, 0x93, 0xCB, 0xE6, 0x33,
						0x3A, 0xAD, 0x5E, 0xB3, 0xDB,
						0xEE, 0x37, 0x3C, 0x2E, 0x9F,
						0xD3, 0xEB, 0xF6, 0x3B, 0x3E,
						0xAF, 0x6F, 0xC5, 0x64, 0x33,
						0x5A, 0xCD, 0x76, 0xC3, 0xE5,
						0x60 };

static unsigned char send_ussd_121[] = { 0xD0, 0x58, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x38, 0x2D, 0x62,
						0x69, 0x74, 0x20, 0x55, 0x53,
						0x53, 0x44, 0x8A, 0x41, 0x44,
						0x41, 0x42, 0x43, 0x44, 0x45,
						0x46, 0x47, 0x48, 0x49, 0x4A,
						0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
						0x50, 0x51, 0x52, 0x53, 0x54,
						0x55, 0x56, 0x57, 0x58, 0x59,
						0x5A, 0x2D, 0x61, 0x62, 0x63,
						0x64, 0x65, 0x66, 0x67, 0x68,
						0x69, 0x6A, 0x6B, 0x6C, 0x6D,
						0x6E, 0x6F, 0x70, 0x71, 0x72,
						0x73, 0x74, 0x75, 0x76, 0x77,
						0x78, 0x79, 0x7A, 0x2D, 0x31,
						0x32, 0x33, 0x34, 0x35, 0x36,
						0x37, 0x38, 0x39, 0x30 };

static unsigned char send_ussd_131[] = { 0xD0, 0x2F, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x09, 0x55, 0x43, 0x53,
						0x32, 0x20, 0x55, 0x53, 0x53,
						0x44, 0x8A, 0x19, 0x48, 0x04,
						0x17, 0x04, 0x14, 0x04, 0x20,
						0x04, 0x10, 0x04, 0x12, 0x04,
						0x21, 0x04, 0x22, 0x04, 0x12,
						0x04, 0x23, 0x04, 0x19, 0x04,
						0x22, 0x04, 0x15 };

static unsigned char send_ussd_161[] = { 0xD0, 0x81, 0xFD, 0x81, 0x03, 0x01,
						0x12, 0x00, 0x82, 0x02, 0x81,
						0x83, 0x85, 0x81, 0xB6, 0x6F,
						0x6E, 0x63, 0x65, 0x20, 0x61,
						0x20, 0x52, 0x45, 0x4C, 0x45,
						0x41, 0x53, 0x45, 0x20, 0x43,
						0x4F, 0x4D, 0x50, 0x4C, 0x45,
						0x54, 0x45, 0x20, 0x6D, 0x65,
						0x73, 0x73, 0x61, 0x67, 0x65,
						0x20, 0x63, 0x6F, 0x6E, 0x74,
						0x61, 0x69, 0x6E, 0x69, 0x6E,
						0x67, 0x20, 0x74, 0x68, 0x65,
						0x20, 0x55, 0x53, 0x53, 0x44,
						0x20, 0x52, 0x65, 0x74, 0x75,
						0x72, 0x6E, 0x20, 0x52, 0x65,
						0x73, 0x75, 0x6C, 0x74, 0x20,
						0x6D, 0x65, 0x73, 0x73, 0x61,
						0x67, 0x65, 0x20, 0x6E, 0x6F,
						0x74, 0x20, 0x63, 0x6F, 0x6E,
						0x74, 0x61, 0x69, 0x6E, 0x69,
						0x6E, 0x67, 0x20, 0x61, 0x6E,
						0x20, 0x65, 0x72, 0x72, 0x6F,
						0x72, 0x20, 0x68, 0x61, 0x73,
						0x20, 0x62, 0x65, 0x65, 0x6E,
						0x20, 0x72, 0x65, 0x63, 0x65,
						0x69, 0x76, 0x65, 0x64, 0x20,
						0x66, 0x72, 0x6F, 0x6D, 0x20,
						0x74, 0x68, 0x65, 0x20, 0x6E,
						0x65, 0x74, 0x77, 0x6F, 0x72,
						0x6B, 0x2C, 0x20, 0x74, 0x68,
						0x65, 0x20, 0x4D, 0x45, 0x20,
						0x73, 0x68, 0x61, 0x6C, 0x6C,
						0x20, 0x69, 0x6E, 0x66, 0x6F,
						0x72, 0x6D, 0x20, 0x74, 0x68,
						0x65, 0x20, 0x53, 0x49, 0x4D,
						0x20, 0x74, 0x68, 0x61, 0x74,
						0x20, 0x74, 0x68, 0x65, 0x20,
						0x63, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x68, 0x61,
						0x73, 0x8A, 0x39, 0xF0, 0x41,
						0xE1, 0x90, 0x58, 0x34, 0x1E,
						0x91, 0x49, 0xE5, 0x92, 0xD9,
						0x74, 0x3E, 0xA1, 0x51, 0xE9,
						0x94, 0x5A, 0xB5, 0x5E, 0xB1,
						0x59, 0x6D, 0x2B, 0x2C, 0x1E,
						0x93, 0xCB, 0xE6, 0x33, 0x3A,
						0xAD, 0x5E, 0xB3, 0xDB, 0xEE,
						0x37, 0x3C, 0x2E, 0x9F, 0xD3,
						0xEB, 0xF6, 0x3B, 0x3E, 0xAF,
						0x6F, 0xC5, 0x64, 0x33, 0x5A,
						0xCD, 0x76, 0xC3, 0xE5, 0x60 };

static unsigned char send_ussd_171[] = { 0xD0, 0x44, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x8A, 0x39, 0xF0, 0x41, 0xE1,
						0x90, 0x58, 0x34, 0x1E, 0x91,
						0x49, 0xE5, 0x92, 0xD9, 0x74,
						0x3E, 0xA1, 0x51, 0xE9, 0x94,
						0x5A, 0xB5, 0x5E, 0xB1, 0x59,
						0x6D, 0x2B, 0x2C, 0x1E, 0x93,
						0xCB, 0xE6, 0x33, 0x3A, 0xAD,
						0x5E, 0xB3, 0xDB, 0xEE, 0x37,
						0x3C, 0x2E, 0x9F, 0xD3, 0xEB,
						0xF6, 0x3B, 0x3E, 0xAF, 0x6F,
						0xC5, 0x64, 0x33, 0x5A, 0xCD,
						0x76, 0xC3, 0xE5, 0x60 };

static unsigned char send_ussd_181[] = { 0xD0, 0x46, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x00, 0x8A, 0x39, 0xF0,
						0x41, 0xE1, 0x90, 0x58, 0x34,
						0x1E, 0x91, 0x49, 0xE5, 0x92,
						0xD9, 0x74, 0x3E, 0xA1, 0x51,
						0xE9, 0x94, 0x5A, 0xB5, 0x5E,
						0xB1, 0x59, 0x6D, 0x2B, 0x2C,
						0x1E, 0x93, 0xCB, 0xE6, 0x33,
						0x3A, 0xAD, 0x5E, 0xB3, 0xDB,
						0xEE, 0x37, 0x3C, 0x2E, 0x9F,
						0xD3, 0xEB, 0xF6, 0x3B, 0x3E,
						0xAF, 0x6F, 0xC5, 0x64, 0x33,
						0x5A, 0xCD, 0x76, 0xC3, 0xE5,
						0x60 };

static unsigned char send_ussd_211[] = { 0xD0, 0x54, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x42, 0x61, 0x73,
						0x69, 0x63, 0x20, 0x49, 0x63,
						0x6F, 0x6E, 0x8A, 0x39, 0xF0,
						0x41, 0xE1, 0x90, 0x58, 0x34,
						0x1E, 0x91, 0x49, 0xE5, 0x92,
						0xD9, 0x74, 0x3E, 0xA1, 0x51,
						0xE9, 0x94, 0x5A, 0xB5, 0x5E,
						0xB1, 0x59, 0x6D, 0x2B, 0x2C,
						0x1E, 0x93, 0xCB, 0xE6, 0x33,
						0x3A, 0xAD, 0x5E, 0xB3, 0xDB,
						0xEE, 0x37, 0x3C, 0x2E, 0x9F,
						0xD3, 0xEB, 0xF6, 0x3B, 0x3E,
						0xAF, 0x6F, 0xC5, 0x64, 0x33,
						0x5A, 0xCD, 0x76, 0xC3, 0xE5,
						0x60, 0x9E, 0x02, 0x00, 0x01 };

static unsigned char send_ussd_221[] = { 0xD0, 0x54, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x43, 0x6F, 0x6C,
						0x6F, 0x72, 0x20, 0x49, 0x63,
						0x6F, 0x6E, 0x8A, 0x39, 0xF0,
						0x41, 0xE1, 0x90, 0x58, 0x34,
						0x1E, 0x91, 0x49, 0xE5, 0x92,
						0xD9, 0x74, 0x3E, 0xA1, 0x51,
						0xE9, 0x94, 0x5A, 0xB5, 0x5E,
						0xB1, 0x59, 0x6D, 0x2B, 0x2C,
						0x1E, 0x93, 0xCB, 0xE6, 0x33,
						0x3A, 0xAD, 0x5E, 0xB3, 0xDB,
						0xEE, 0x37, 0x3C, 0x2E, 0x9F,
						0xD3, 0xEB, 0xF6, 0x3B, 0x3E,
						0xAF, 0x6F, 0xC5, 0x64, 0x33,
						0x5A, 0xCD, 0x76, 0xC3, 0xE5,
						0x60, 0x9E, 0x02, 0x00, 0x02 };

static unsigned char send_ussd_231[] = { 0xD0, 0x54, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x42, 0x61, 0x73,
						0x69, 0x63, 0x20, 0x49, 0x63,
						0x6F, 0x6E, 0x8A, 0x39, 0xF0,
						0x41, 0xE1, 0x90, 0x58, 0x34,
						0x1E, 0x91, 0x49, 0xE5, 0x92,
						0xD9, 0x74, 0x3E, 0xA1, 0x51,
						0xE9, 0x94, 0x5A, 0xB5, 0x5E,
						0xB1, 0x59, 0x6D, 0x2B, 0x2C,
						0x1E, 0x93, 0xCB, 0xE6, 0x33,
						0x3A, 0xAD, 0x5E, 0xB3, 0xDB,
						0xEE, 0x37, 0x3C, 0x2E, 0x9F,
						0xD3, 0xEB, 0xF6, 0x3B, 0x3E,
						0xAF, 0x6F, 0xC5, 0x64, 0x33,
						0x5A, 0xCD, 0x76, 0xC3, 0xE5,
						0x60, 0x9E, 0x02, 0x01, 0x01 };

static unsigned char send_ussd_241[] = { 0xD0, 0x48, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x8A, 0x39, 0xF0, 0x41, 0xE1,
						0x90, 0x58, 0x34, 0x1E, 0x91,
						0x49, 0xE5, 0x92, 0xD9, 0x74,
						0x3E, 0xA1, 0x51, 0xE9, 0x94,
						0x5A, 0xB5, 0x5E, 0xB1, 0x59,
						0x6D, 0x2B, 0x2C, 0x1E, 0x93,
						0xCB, 0xE6, 0x33, 0x3A, 0xAD,
						0x5E, 0xB3, 0xDB, 0xEE, 0x37,
						0x3C, 0x2E, 0x9F, 0xD3, 0xEB,
						0xF6, 0x3B, 0x3E, 0xAF, 0x6F,
						0xC5, 0x64, 0x33, 0x5A, 0xCD,
						0x76, 0xC3, 0xE5, 0x60, 0x9E,
						0x02, 0x01, 0x01 };

static unsigned char send_ussd_311[] = { 0xD0, 0x5F, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x19, 0x80, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15, 0x8A, 0x39, 0xF0,
						0x41, 0xE1, 0x90, 0x58, 0x34,
						0x1E, 0x91, 0x49, 0xE5, 0x92,
						0xD9, 0x74, 0x3E, 0xA1, 0x51,
						0xE9, 0x94, 0x5A, 0xB5, 0x5E,
						0xB1, 0x59, 0x6D, 0x2B, 0x2C,
						0x1E, 0x93, 0xCB, 0xE6, 0x33,
						0x3A, 0xAD, 0x5E, 0xB3, 0xDB,
						0xEE, 0x37, 0x3C, 0x2E, 0x9F,
						0xD3, 0xEB, 0xF6, 0x3B, 0x3E,
						0xAF, 0x6F, 0xC5, 0x64, 0x33,
						0x5A, 0xCD, 0x76, 0xC3, 0xE5,
						0x60 };

static unsigned char send_ussd_411[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x00, 0xB4 };

static unsigned char send_ussd_412[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_421[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x01, 0xB4 };

static unsigned char send_ussd_422[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_431[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x02, 0xB4 };

static unsigned char send_ussd_432[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_441[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x04, 0xB4 };

static unsigned char send_ussd_442[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x00, 0xB4 };

static unsigned char send_ussd_443[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_451[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x08, 0xB4 };

static unsigned char send_ussd_452[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x00, 0xB4 };

static unsigned char send_ussd_453[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_461[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x10, 0xB4 };

static unsigned char send_ussd_462[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x00, 0xB4 };

static unsigned char send_ussd_463[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_471[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x20, 0xB4 };

static unsigned char send_ussd_472[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x00, 0xB4 };

static unsigned char send_ussd_473[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_481[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x40, 0xB4 };

static unsigned char send_ussd_482[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x00, 0xB4 };

static unsigned char send_ussd_483[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_491[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x80, 0xB4 };

static unsigned char send_ussd_492[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x00, 0xB4 };

static unsigned char send_ussd_493[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x33, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_4101[] = { 0xD0, 0x5C, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x31, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60, 0xD0, 0x04, 0x00,
						0x10, 0x00, 0xB4 };

static unsigned char send_ussd_4102[] = { 0xD0, 0x56, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x10, 0x54, 0x65, 0x78,
						0x74, 0x20, 0x41, 0x74, 0x74,
						0x72, 0x69, 0x62, 0x75, 0x74,
						0x65, 0x20, 0x32, 0x8A, 0x39,
						0xF0, 0x41, 0xE1, 0x90, 0x58,
						0x34, 0x1E, 0x91, 0x49, 0xE5,
						0x92, 0xD9, 0x74, 0x3E, 0xA1,
						0x51, 0xE9, 0x94, 0x5A, 0xB5,
						0x5E, 0xB1, 0x59, 0x6D, 0x2B,
						0x2C, 0x1E, 0x93, 0xCB, 0xE6,
						0x33, 0x3A, 0xAD, 0x5E, 0xB3,
						0xDB, 0xEE, 0x37, 0x3C, 0x2E,
						0x9F, 0xD3, 0xEB, 0xF6, 0x3B,
						0x3E, 0xAF, 0x6F, 0xC5, 0x64,
						0x33, 0x5A, 0xCD, 0x76, 0xC3,
						0xE5, 0x60 };

static unsigned char send_ussd_511[] = { 0xD0, 0x4B, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x05, 0x80, 0x4F, 0x60,
						0x59, 0x7D, 0x8A, 0x39, 0xF0,
						0x41, 0xE1, 0x90, 0x58, 0x34,
						0x1E, 0x91, 0x49, 0xE5, 0x92,
						0xD9, 0x74, 0x3E, 0xA1, 0x51,
						0xE9, 0x94, 0x5A, 0xB5, 0x5E,
						0xB1, 0x59, 0x6D, 0x2B, 0x2C,
						0x1E, 0x93, 0xCB, 0xE6, 0x33,
						0x3A, 0xAD, 0x5E, 0xB3, 0xDB,
						0xEE, 0x37, 0x3C, 0x2E, 0x9F,
						0xD3, 0xEB, 0xF6, 0x3B, 0x3E,
						0xAF, 0x6F, 0xC5, 0x64, 0x33,
						0x5A, 0xCD, 0x76, 0xC3, 0xE5,
						0x60 };

static unsigned char send_ussd_611[] = { 0xD0, 0x49, 0x81, 0x03, 0x01, 0x12,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x03, 0x80, 0x30, 0xEB,
						0x8A, 0x39, 0xF0, 0x41, 0xE1,
						0x90, 0x58, 0x34, 0x1E, 0x91,
						0x49, 0xE5, 0x92, 0xD9, 0x74,
						0x3E, 0xA1, 0x51, 0xE9, 0x94,
						0x5A, 0xB5, 0x5E, 0xB1, 0x59,
						0x6D, 0x2B, 0x2C, 0x1E, 0x93,
						0xCB, 0xE6, 0x33, 0x3A, 0xAD,
						0x5E, 0xB3, 0xDB, 0xEE, 0x37,
						0x3C, 0x2E, 0x9F, 0xD3, 0xEB,
						0xF6, 0x3B, 0x3E, 0xAF, 0x6F,
						0xC5, 0x64, 0x33, 0x5A, 0xCD,
						0x76, 0xC3, 0xE5, 0x60 };

static struct send_ussd_test send_ussd_data_111 = {
	.pdu = send_ussd_111,
	.pdu_len = sizeof(send_ussd_111),
	.qualifier = 0x00,
	.alpha_id = "7-bit USSD",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_121 = {
	.pdu = send_ussd_121,
	.pdu_len = sizeof(send_ussd_121),
	.qualifier = 0x00,
	.alpha_id = "8-bit USSD",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_131 = {
	.pdu = send_ussd_131,
	.pdu_len = sizeof(send_ussd_131),
	.qualifier = 0x00,
	.alpha_id = "UCS2 USSD",
	.ussd = "ЗДРАВСТВУЙТЕ"
};

static struct send_ussd_test send_ussd_data_161 = {
	.pdu = send_ussd_161,
	.pdu_len = sizeof(send_ussd_161),
	.qualifier = 0x00,
	.alpha_id = "once a RELEASE COMPLETE message containing the USSD "
		"Return Result message not containing an error has been "
		"received from the network, the ME shall inform the SIM "
		"that the command has",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_171 = {
	.pdu = send_ussd_171,
	.pdu_len = sizeof(send_ussd_171),
	.qualifier = 0x00,
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_181 = {
	.pdu = send_ussd_181,
	.pdu_len = sizeof(send_ussd_181),
	.qualifier = 0x00,
	.alpha_id = "",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_211 = {
	.pdu = send_ussd_211,
	.pdu_len = sizeof(send_ussd_211),
	.qualifier = 0x00,
	.alpha_id = "Basic Icon",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_ussd_test send_ussd_data_221 = {
	.pdu = send_ussd_221,
	.pdu_len = sizeof(send_ussd_221),
	.qualifier = 0x00,
	.alpha_id = "Color Icon",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct send_ussd_test send_ussd_data_231 = {
	.pdu = send_ussd_231,
	.pdu_len = sizeof(send_ussd_231),
	.qualifier = 0x00,
	.alpha_id = "Basic Icon",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_ussd_test send_ussd_data_241 = {
	.pdu = send_ussd_241,
	.pdu_len = sizeof(send_ussd_241),
	.qualifier = 0x00,
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

/* The ussd is not complete in spec */
static struct send_ussd_test send_ussd_data_311 = {
	.pdu = send_ussd_311,
	.pdu_len = sizeof(send_ussd_311),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_411 = {
	.pdu = send_ussd_411,
	.pdu_len = sizeof(send_ussd_411),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_412 = {
	.pdu = send_ussd_412,
	.pdu_len = sizeof(send_ussd_412),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_421 = {
	.pdu = send_ussd_421,
	.pdu_len = sizeof(send_ussd_421),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x01, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_422 = {
	.pdu = send_ussd_422,
	.pdu_len = sizeof(send_ussd_422),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_431 = {
	.pdu = send_ussd_431,
	.pdu_len = sizeof(send_ussd_431),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x02, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_432 = {
	.pdu = send_ussd_432,
	.pdu_len = sizeof(send_ussd_432),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_441 = {
	.pdu = send_ussd_441,
	.pdu_len = sizeof(send_ussd_441),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x04, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_442 = {
	.pdu = send_ussd_442,
	.pdu_len = sizeof(send_ussd_442),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_443 = {
	.pdu = send_ussd_443,
	.pdu_len = sizeof(send_ussd_443),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_451 = {
	.pdu = send_ussd_451,
	.pdu_len = sizeof(send_ussd_451),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x08, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_452 = {
	.pdu = send_ussd_452,
	.pdu_len = sizeof(send_ussd_452),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_453 = {
	.pdu = send_ussd_453,
	.pdu_len = sizeof(send_ussd_453),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_461 = {
	.pdu = send_ussd_461,
	.pdu_len = sizeof(send_ussd_461),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x10, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_462 = {
	.pdu = send_ussd_462,
	.pdu_len = sizeof(send_ussd_462),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_463 = {
	.pdu = send_ussd_463,
	.pdu_len = sizeof(send_ussd_463),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_471 = {
	.pdu = send_ussd_471,
	.pdu_len = sizeof(send_ussd_471),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x20, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_472 = {
	.pdu = send_ussd_472,
	.pdu_len = sizeof(send_ussd_472),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_473 = {
	.pdu = send_ussd_473,
	.pdu_len = sizeof(send_ussd_473),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_481 = {
	.pdu = send_ussd_481,
	.pdu_len = sizeof(send_ussd_481),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x40, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_482 = {
	.pdu = send_ussd_482,
	.pdu_len = sizeof(send_ussd_482),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_483 = {
	.pdu = send_ussd_483,
	.pdu_len = sizeof(send_ussd_483),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_491 = {
	.pdu = send_ussd_491,
	.pdu_len = sizeof(send_ussd_491),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x80, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_492 = {
	.pdu = send_ussd_492,
	.pdu_len = sizeof(send_ussd_492),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_493 = {
	.pdu = send_ussd_493,
	.pdu_len = sizeof(send_ussd_493),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 3",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_4101 = {
	.pdu = send_ussd_4101,
	.pdu_len = sizeof(send_ussd_4101),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 1",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct send_ussd_test send_ussd_data_4102 = {
	.pdu = send_ussd_4102,
	.pdu_len = sizeof(send_ussd_4102),
	.qualifier = 0x00,
	.alpha_id = "Text Attribute 2",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_511 = {
	.pdu = send_ussd_511,
	.pdu_len = sizeof(send_ussd_511),
	.qualifier = 0x00,
	.alpha_id = "你好",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static struct send_ussd_test send_ussd_data_611 = {
	.pdu = send_ussd_611,
	.pdu_len = sizeof(send_ussd_611),
	.qualifier = 0x00,
	.alpha_id = "ル",
	.ussd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-"
		"1234567890"
};

static void test_send_ussd(gconstpointer data)
{
	const struct send_ussd_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SEND_USSD);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_NETWORK);

	check_alpha_id(command->send_ussd.alpha_id, test->alpha_id);
	check_ussd(&command->send_ussd.ussd_string, test->ussd);
	check_icon_id(&command->send_ussd.icon_id, &test->icon_id);
	check_text_attr(&command->send_ussd.text_attr, &test->text_attr);
	check_frame_id(&command->send_ussd.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct setup_call_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id_usr_cfm;
	struct stk_address addr;
	struct stk_ccp ccp;
	struct stk_subaddress subaddr;
	struct stk_duration duration;
	struct stk_icon_id icon_id_usr_cfm;
	char *alpha_id_call_setup;
	struct stk_icon_id icon_id_call_setup;
	struct stk_text_attribute text_attr_usr_cfm;
	struct stk_text_attribute text_attr_call_setup;
	struct stk_frame_id frame_id;
};

static unsigned char setup_call_111[] = { 0xD0, 0x1E, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x08, 0x4E, 0x6F, 0x74,
						0x20, 0x62, 0x75, 0x73, 0x79,
						0x86, 0x09, 0x91, 0x10, 0x32,
						0x04, 0x21, 0x43, 0x65, 0x1C,
						0x2C };

static unsigned char setup_call_141[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x10,
						0x02, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x07, 0x4F, 0x6E, 0x20,
						0x68, 0x6F, 0x6C, 0x64, 0x86,
						0x09, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x1C, 0x2C };

static unsigned char setup_call_151[] = { 0xD0, 0x20, 0x81, 0x03, 0x01, 0x10,
						0x04, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x44, 0x69, 0x73,
						0x63, 0x6F, 0x6E, 0x6E, 0x65,
						0x63, 0x74, 0x86, 0x09, 0x91,
						0x10, 0x32, 0x04, 0x21, 0x43,
						0x65, 0x1C, 0x2C };

static unsigned char setup_call_181[] = { 0xD0, 0x2B, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x11, 0x43, 0x61, 0x70,
						0x61, 0x62, 0x69, 0x6C, 0x69,
						0x74, 0x79, 0x20, 0x63, 0x6F,
						0x6E, 0x66, 0x69, 0x67, 0x86,
						0x09, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x1C, 0x2C,
						0x87, 0x02, 0x01, 0xA0 };

static unsigned char setup_call_191[] = { 0xD0, 0x1C, 0x81, 0x03, 0x01, 0x10,
						0x01, 0x82, 0x02, 0x81, 0x83,
						0x86, 0x11, 0x91, 0x10, 0x32,
						0x54, 0x76, 0x98, 0x10, 0x32,
						0x54, 0x76, 0x98, 0x10, 0x32,
						0x54, 0x76, 0x98, 0x10 };

static unsigned char setup_call_1101[] = { 0xD0, 0x81, 0xFD, 0x81, 0x03, 0x01,
						0x10, 0x01, 0x82, 0x02, 0x81,
						0x83, 0x85, 0x81, 0xED, 0x54,
						0x68, 0x72, 0x65, 0x65, 0x20,
						0x74, 0x79, 0x70, 0x65, 0x73,
						0x20, 0x61, 0x72, 0x65, 0x20,
						0x64, 0x65, 0x66, 0x69, 0x6E,
						0x65, 0x64, 0x3A, 0x20, 0x2D,
						0x20, 0x73, 0x65, 0x74, 0x20,
						0x75, 0x70, 0x20, 0x61, 0x20,
						0x63, 0x61, 0x6C, 0x6C, 0x2C,
						0x20, 0x62, 0x75, 0x74, 0x20,
						0x6F, 0x6E, 0x6C, 0x79, 0x20,
						0x69, 0x66, 0x20, 0x6E, 0x6F,
						0x74, 0x20, 0x63, 0x75, 0x72,
						0x72, 0x65, 0x6E, 0x74, 0x6C,
						0x79, 0x20, 0x62, 0x75, 0x73,
						0x79, 0x20, 0x6F, 0x6E, 0x20,
						0x61, 0x6E, 0x6F, 0x74, 0x68,
						0x65, 0x72, 0x20, 0x63, 0x61,
						0x6C, 0x6C, 0x3B, 0x20, 0x2D,
						0x20, 0x73, 0x65, 0x74, 0x20,
						0x75, 0x70, 0x20, 0x61, 0x20,
						0x63, 0x61, 0x6C, 0x6C, 0x2C,
						0x20, 0x70, 0x75, 0x74, 0x74,
						0x69, 0x6E, 0x67, 0x20, 0x61,
						0x6C, 0x6C, 0x20, 0x6F, 0x74,
						0x68, 0x65, 0x72, 0x20, 0x63,
						0x61, 0x6C, 0x6C, 0x73, 0x20,
						0x28, 0x69, 0x66, 0x20, 0x61,
						0x6E, 0x79, 0x29, 0x20, 0x6F,
						0x6E, 0x20, 0x68, 0x6F, 0x6C,
						0x64, 0x3B, 0x20, 0x2D, 0x20,
						0x73, 0x65, 0x74, 0x20, 0x75,
						0x70, 0x20, 0x61, 0x20, 0x63,
						0x61, 0x6C, 0x6C, 0x2C, 0x20,
						0x64, 0x69, 0x73, 0x63, 0x6F,
						0x6E, 0x6E, 0x65, 0x63, 0x74,
						0x69, 0x6E, 0x67, 0x20, 0x61,
						0x6C, 0x6C, 0x20, 0x6F, 0x74,
						0x68, 0x65, 0x72, 0x20, 0x63,
						0x61, 0x6C, 0x6C, 0x73, 0x20,
						0x28, 0x69, 0x66, 0x20, 0x61,
						0x6E, 0x79, 0x29, 0x20, 0x66,
						0x69, 0x72, 0x73, 0x74, 0x2E,
						0x20, 0x46, 0x6F, 0x72, 0x20,
						0x65, 0x61, 0x63, 0x68, 0x20,
						0x6F, 0x66, 0x20, 0x74, 0x68,
						0x65, 0x73, 0x65, 0x20, 0x74,
						0x79, 0x70, 0x65, 0x73, 0x2C,
						0x20, 0x86, 0x02, 0x91, 0x10 };

static unsigned char setup_call_1111[] = { 0xD0, 0x2B, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0C, 0x43, 0x61, 0x6C,
						0x6C, 0x65, 0x64, 0x20, 0x70,
						0x61, 0x72, 0x74, 0x79, 0x86,
						0x09, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x1C, 0x2C,
						0x88, 0x07, 0x80, 0x50, 0x95,
						0x95, 0x95, 0x95, 0x95 };

static unsigned char setup_call_1121[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x10,
						0x01, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x08, 0x44, 0x75, 0x72,
						0x61, 0x74, 0x69, 0x6F, 0x6E,
						0x86, 0x09, 0x91, 0x10, 0x32,
						0x04, 0x21, 0x43, 0x65, 0x1C,
						0x2C, 0x84, 0x02, 0x01, 0x0A };

static unsigned char setup_call_211[] = { 0xD0, 0x28, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0C, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x86,
						0x09, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x1C, 0x2C,
						0x85, 0x04, 0x43, 0x41, 0x4C,
						0x4C };

static unsigned char setup_call_311[] = { 0xD0, 0x30, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x16, 0x53, 0x65, 0x74,
						0x20, 0x75, 0x70, 0x20, 0x63,
						0x61, 0x6C, 0x6C, 0x20, 0x49,
						0x63, 0x6F, 0x6E, 0x20, 0x33,
						0x2E, 0x31, 0x2E, 0x31, 0x86,
						0x09, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x1C, 0x2C,
						0x9E, 0x02, 0x01, 0x01 };

static unsigned char setup_call_321[] = { 0xD0, 0x30, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x16, 0x53, 0x65, 0x74,
						0x20, 0x75, 0x70, 0x20, 0x63,
						0x61, 0x6C, 0x6C, 0x20, 0x49,
						0x63, 0x6F, 0x6E, 0x20, 0x33,
						0x2E, 0x32, 0x2E, 0x31, 0x86,
						0x09, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x1C, 0x2C,
						0x9E, 0x02, 0x00, 0x01 };

static unsigned char setup_call_331[] = { 0xD0, 0x30, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x16, 0x53, 0x65, 0x74,
						0x20, 0x75, 0x70, 0x20, 0x63,
						0x61, 0x6C, 0x6C, 0x20, 0x49,
						0x63, 0x6F, 0x6E, 0x20, 0x33,
						0x2E, 0x33, 0x2E, 0x31, 0x86,
						0x09, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x1C, 0x2C,
						0x9E, 0x02, 0x01, 0x02 };

static unsigned char setup_call_341[] = { 0xD0, 0x4C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x16, 0x53, 0x65, 0x74,
						0x20, 0x75, 0x70, 0x20, 0x63,
						0x61, 0x6C, 0x6C, 0x20, 0x49,
						0x63, 0x6F, 0x6E, 0x20, 0x33,
						0x2E, 0x34, 0x2E, 0x31, 0x86,
						0x09, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x1C, 0x2C,
						0x9E, 0x02, 0x00, 0x01, 0x85,
						0x16, 0x53, 0x65, 0x74, 0x20,
						0x75, 0x70, 0x20, 0x63, 0x61,
						0x6C, 0x6C, 0x20, 0x49, 0x63,
						0x6F, 0x6E, 0x20, 0x33, 0x2E,
						0x34, 0x2E, 0x32, 0x9E, 0x02,
						0x00, 0x01 };

static unsigned char setup_call_411[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x00,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char setup_call_412[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32 };

static unsigned char setup_call_421[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x01,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x01, 0xB4 };

static unsigned char setup_call_422[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32 };

static unsigned char setup_call_431[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x02,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x02, 0xB4 };

static unsigned char setup_call_432[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32 };

static unsigned char setup_call_441[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x04,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x04, 0xB4 };

static unsigned char setup_call_442[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32,
						0xD0, 0x04, 0x00, 0x0E, 0x00,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char setup_call_443[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x33, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x33 };

static unsigned char setup_call_451[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x08,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x08, 0xB4 };

static unsigned char setup_call_452[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32,
						0xD0, 0x04, 0x00, 0x0E, 0x00,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char setup_call_453[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x33, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x33 };

static unsigned char setup_call_461[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x10,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x10, 0xB4 };

static unsigned char setup_call_462[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32,
						0xD0, 0x04, 0x00, 0x0E, 0x00,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char setup_call_463[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x33, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x33 };

static unsigned char setup_call_471[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x20,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x20, 0xB4 };

static unsigned char setup_call_472[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32,
						0xD0, 0x04, 0x00, 0x0E, 0x00,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char setup_call_473[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x33, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x33 };

static unsigned char setup_call_481[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x40,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x40, 0xB4 };

static unsigned char setup_call_482[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32,
						0xD0, 0x04, 0x00, 0x0E, 0x00,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char setup_call_483[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x33, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x33 };

static unsigned char setup_call_491[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x80,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x80, 0xB4 };

static unsigned char setup_call_492[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32,
						0xD0, 0x04, 0x00, 0x0E, 0x00,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x00, 0xB4 };

static unsigned char setup_call_493[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x33, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x33 };

static unsigned char setup_call_4101[] = { 0xD0, 0x38, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x31, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x31,
						0xD0, 0x04, 0x00, 0x0E, 0x00,
						0xB4, 0xD0, 0x04, 0x00, 0x06,
						0x00, 0x4B };

static unsigned char setup_call_4102[] = { 0xD0, 0x2C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0E, 0x43, 0x4F, 0x4E,
						0x46, 0x49, 0x52, 0x4D, 0x41,
						0x54, 0x49, 0x4F, 0x4E, 0x20,
						0x32, 0x86, 0x09, 0x91, 0x10,
						0x32, 0x04, 0x21, 0x43, 0x65,
						0x1C, 0x2C, 0x85, 0x06, 0x43,
						0x41, 0x4C, 0x4C, 0x20, 0x32 };

static unsigned char setup_call_511[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x19, 0x80, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15, 0x86, 0x07, 0x91,
						0x10, 0x32, 0x04, 0x21, 0x43,
						0x65 };

static unsigned char setup_call_521[] = { 0xD0, 0x4C, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x1B, 0x80, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15, 0x00, 0x31, 0x86,
						0x07, 0x91, 0x10, 0x32, 0x04,
						0x21, 0x43, 0x65, 0x85, 0x1B,
						0x80, 0x04, 0x17, 0x04, 0x14,
						0x04, 0x20, 0x04, 0x10, 0x04,
						0x12, 0x04, 0x21, 0x04, 0x22,
						0x04, 0x12, 0x04, 0x23, 0x04,
						0x19, 0x04, 0x22, 0x04, 0x15,
						0x00, 0x32 };

static unsigned char setup_call_611[] = { 0xD0, 0x19, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x05, 0x80, 0x4E, 0x0D,
						0x5F, 0xD9, 0x86, 0x07, 0x91,
						0x10, 0x32, 0x04, 0x21, 0x43,
						0x65 };

static unsigned char setup_call_621[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x05, 0x80, 0x78, 0x6E,
						0x5B, 0x9A, 0x86, 0x07, 0x91,
						0x10, 0x32, 0x04, 0x21, 0x43,
						0x65, 0x85, 0x07, 0x80, 0x62,
						0x53, 0x75, 0x35, 0x8B, 0xDD };

static unsigned char setup_call_711[] = { 0xD0, 0x17, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x03, 0x80, 0x30, 0xEB,
						0x86, 0x07, 0x91, 0x10, 0x32,
						0x04, 0x21, 0x43, 0x65 };

static unsigned char setup_call_721[] = { 0xD0, 0x20, 0x81, 0x03, 0x01, 0x10,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x05, 0x80, 0x30, 0xEB,
						0x00, 0x31, 0x86, 0x07, 0x91,
						0x10, 0x32, 0x04, 0x21, 0x43,
						0x65, 0x85, 0x05, 0x80, 0x30,
						0xEB, 0x00, 0x32 };

static struct setup_call_test setup_call_data_111 = {
	.pdu = setup_call_111,
	.pdu_len = sizeof(setup_call_111),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "Not busy",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	}
};

static struct setup_call_test setup_call_data_141 = {
	.pdu = setup_call_141,
	.pdu_len = sizeof(setup_call_141),
	.qualifier = 0x02,
	.alpha_id_usr_cfm = "On hold",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	}
};

static struct setup_call_test setup_call_data_151 = {
	.pdu = setup_call_151,
	.pdu_len = sizeof(setup_call_151),
	.qualifier = 0x04,
	.alpha_id_usr_cfm = "Disconnect",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	}
};

static struct setup_call_test setup_call_data_181 = {
	.pdu = setup_call_181,
	.pdu_len = sizeof(setup_call_181),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "Capability config",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.ccp = {
		.len = 0x02,
		.ccp = { 0x01, 0xA0 }
	}
};

static struct setup_call_test setup_call_data_191 = {
	.pdu = setup_call_191,
	.pdu_len = sizeof(setup_call_191),
	.qualifier = 0x01,
	.addr = {
		.ton_npi = 0x91,
		.number = "01234567890123456789012345678901"
	}
};

static struct setup_call_test setup_call_data_1101 = {
	.pdu = setup_call_1101,
	.pdu_len = sizeof(setup_call_1101),
	.qualifier = 0x01,
	.alpha_id_usr_cfm = "Three types are defined: - set up a call, but "
			"only if not currently busy on another call; - set "
			"up a call, putting all other calls (if any) on hold; "
			"- set up a call, disconnecting all other calls (if "
			"any) first. For each of these types, ",
	.addr = {
		.ton_npi = 0x91,
		.number = "01"
	}
};

static struct setup_call_test setup_call_data_1111 = {
	.pdu = setup_call_1111,
	.pdu_len = sizeof(setup_call_1111),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "Called party",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.subaddr = {
		.len = 0x07,
		.subaddr = { 0x80, 0x50, 0x95, 0x95, 0x95, 0x95, 0x95 }
	}
};

static struct setup_call_test setup_call_data_1121 = {
	.pdu = setup_call_1121,
	.pdu_len = sizeof(setup_call_1121),
	.qualifier = 0x01,
	.alpha_id_usr_cfm = "Duration",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.duration = {
		.unit = STK_DURATION_TYPE_SECONDS,
		.interval = 10,
	}
};

static struct setup_call_test setup_call_data_211 = {
	.pdu = setup_call_211,
	.pdu_len = sizeof(setup_call_211),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL"
};

static struct setup_call_test setup_call_data_311 = {
	.pdu = setup_call_311,
	.pdu_len = sizeof(setup_call_311),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "Set up call Icon 3.1.1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.icon_id_usr_cfm = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct setup_call_test setup_call_data_321 = {
	.pdu = setup_call_321,
	.pdu_len = sizeof(setup_call_321),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "Set up call Icon 3.2.1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.icon_id_usr_cfm = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct setup_call_test setup_call_data_331 = {
	.pdu = setup_call_331,
	.pdu_len = sizeof(setup_call_331),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "Set up call Icon 3.3.1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.icon_id_usr_cfm = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct setup_call_test setup_call_data_341 = {
	.pdu = setup_call_341,
	.pdu_len = sizeof(setup_call_341),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "Set up call Icon 3.4.1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.icon_id_usr_cfm = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	},
	.alpha_id_call_setup = "Set up call Icon 3.4.2",
	.icon_id_call_setup = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct setup_call_test setup_call_data_411 = {
	.pdu = setup_call_411,
	.pdu_len = sizeof(setup_call_411),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x00, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_412 = {
	.pdu = setup_call_412,
	.pdu_len = sizeof(setup_call_412),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2"
};

static struct setup_call_test setup_call_data_421 = {
	.pdu = setup_call_421,
	.pdu_len = sizeof(setup_call_421),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x01, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x01, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_422 = {
	.pdu = setup_call_422,
	.pdu_len = sizeof(setup_call_422),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2"
};

static struct setup_call_test setup_call_data_431 = {
	.pdu = setup_call_431,
	.pdu_len = sizeof(setup_call_431),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x02, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x02, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_432 = {
	.pdu = setup_call_432,
	.pdu_len = sizeof(setup_call_432),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2"
};

static struct setup_call_test setup_call_data_441 = {
	.pdu = setup_call_441,
	.pdu_len = sizeof(setup_call_441),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x04, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x04, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_442 = {
	.pdu = setup_call_442,
	.pdu_len = sizeof(setup_call_442),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x00, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_443 = {
	.pdu = setup_call_443,
	.pdu_len = sizeof(setup_call_443),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 3",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 3"
};

static struct setup_call_test setup_call_data_451 = {
	.pdu = setup_call_451,
	.pdu_len = sizeof(setup_call_451),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x08, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x08, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_452 = {
	.pdu = setup_call_452,
	.pdu_len = sizeof(setup_call_452),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x00, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_453 = {
	.pdu = setup_call_453,
	.pdu_len = sizeof(setup_call_453),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 3",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 3"
};

static struct setup_call_test setup_call_data_461 = {
	.pdu = setup_call_461,
	.pdu_len = sizeof(setup_call_461),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x10, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x10, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_462 = {
	.pdu = setup_call_462,
	.pdu_len = sizeof(setup_call_462),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x00, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_463 = {
	.pdu = setup_call_463,
	.pdu_len = sizeof(setup_call_463),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 3",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 3"
};

static struct setup_call_test setup_call_data_471 = {
	.pdu = setup_call_471,
	.pdu_len = sizeof(setup_call_471),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x20, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x20, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_472 = {
	.pdu = setup_call_472,
	.pdu_len = sizeof(setup_call_472),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x00, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_473 = {
	.pdu = setup_call_473,
	.pdu_len = sizeof(setup_call_473),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 3",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 3"
};

static struct setup_call_test setup_call_data_481 = {
	.pdu = setup_call_481,
	.pdu_len = sizeof(setup_call_481),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x40, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x40, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_482 = {
	.pdu = setup_call_482,
	.pdu_len = sizeof(setup_call_482),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x00, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_483 = {
	.pdu = setup_call_483,
	.pdu_len = sizeof(setup_call_483),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 3",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 3"
};

static struct setup_call_test setup_call_data_491 = {
	.pdu = setup_call_491,
	.pdu_len = sizeof(setup_call_491),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x80, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x80, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_492 = {
	.pdu = setup_call_492,
	.pdu_len = sizeof(setup_call_492),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x00, 0xB4 }
	}
};

static struct setup_call_test setup_call_data_493 = {
	.pdu = setup_call_493,
	.pdu_len = sizeof(setup_call_493),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 3",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 3"
};

static struct setup_call_test setup_call_data_4101 = {
	.pdu = setup_call_4101,
	.pdu_len = sizeof(setup_call_4101),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 1",
	.text_attr_usr_cfm = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
	.text_attr_call_setup = {
		.len = 4,
		.attributes = { 0x00, 0x06, 0x00, 0x4B }
	}
};

static struct setup_call_test setup_call_data_4102 = {
	.pdu = setup_call_4102,
	.pdu_len = sizeof(setup_call_4102),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "CONFIRMATION 2",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456c1c2"
	},
	.alpha_id_call_setup = "CALL 2"
};

static struct setup_call_test setup_call_data_511 = {
	.pdu = setup_call_511,
	.pdu_len = sizeof(setup_call_511),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "ЗДРАВСТВУЙТЕ",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456"
	}
};

static struct setup_call_test setup_call_data_521 = {
	.pdu = setup_call_521,
	.pdu_len = sizeof(setup_call_521),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "ЗДРАВСТВУЙТЕ1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456"
	},
	.alpha_id_call_setup = "ЗДРАВСТВУЙТЕ2"
};

static struct setup_call_test setup_call_data_611 = {
	.pdu = setup_call_611,
	.pdu_len = sizeof(setup_call_611),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "不忙",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456"
	}
};

static struct setup_call_test setup_call_data_621 = {
	.pdu = setup_call_621,
	.pdu_len = sizeof(setup_call_621),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "确定",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456"
	},
	.alpha_id_call_setup = "打电话"
};

static struct setup_call_test setup_call_data_711 = {
	.pdu = setup_call_711,
	.pdu_len = sizeof(setup_call_711),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "ル",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456"
	}
};

static struct setup_call_test setup_call_data_721 = {
	.pdu = setup_call_721,
	.pdu_len = sizeof(setup_call_721),
	.qualifier = 0x00,
	.alpha_id_usr_cfm = "ル1",
	.addr = {
		.ton_npi = 0x91,
		.number = "012340123456"
	},
	.alpha_id_call_setup = "ル2"
};

static void test_setup_call(gconstpointer data)
{
	const struct setup_call_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SETUP_CALL);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_NETWORK);

	check_alpha_id(command->setup_call.alpha_id_usr_cfm,
					test->alpha_id_usr_cfm);
	check_address(&command->setup_call.addr, &test->addr);
	check_ccp(&command->setup_call.ccp, &test->ccp);
	check_subaddress(&command->setup_call.subaddr, &test->subaddr);
	check_duration(&command->setup_call.duration, &test->duration);
	check_icon_id(&command->setup_call.icon_id_usr_cfm,
					&test->icon_id_usr_cfm);
	check_alpha_id(command->setup_call.alpha_id_call_setup,
					test->alpha_id_call_setup);
	check_icon_id(&command->setup_call.icon_id_call_setup,
					&test->icon_id_call_setup);
	check_text_attr(&command->setup_call.text_attr_usr_cfm,
					&test->text_attr_usr_cfm);
	check_text_attr(&command->setup_call.text_attr_call_setup,
					&test->text_attr_call_setup);
	check_frame_id(&command->setup_call.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct refresh_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	struct stk_file file_list[MAX_ITEM];
	struct stk_aid aid;
	char *alpha_id;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

static unsigned char refresh_121[] = { 0xD0, 0x10, 0x81, 0x03, 0x01, 0x01,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0x92, 0x05, 0x01, 0x3F, 0x00,
						0x2F, 0xE2 };

static unsigned char refresh_151[] = { 0xD0, 0x09, 0x81, 0x03, 0x01, 0x01,
						0x04, 0x82, 0x02, 0x81, 0x82 };

static struct refresh_test refresh_data_121 = {
	.pdu = refresh_121,
	.pdu_len = sizeof(refresh_121),
	.qualifier = 0x01,
	.file_list = {{
		.len = 4,
		.file = { 0x3F, 0x00, 0x2F, 0xE2 }
	}}
};

static struct refresh_test refresh_data_151 = {
	.pdu = refresh_151,
	.pdu_len = sizeof(refresh_151),
	.qualifier = 0x04
};

/* Defined in TS 102.384 Section 27.22.4.7 */
static void test_refresh(gconstpointer data)
{
	const struct refresh_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_REFRESH);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_file_list(command->refresh.file_list, test->file_list);
	check_aid(&command->refresh.aid, &test->aid);
	check_alpha_id(command->refresh.alpha_id, test->alpha_id);
	check_icon_id(&command->refresh.icon_id, &test->icon_id);
	check_text_attr(&command->refresh.text_attr, &test->text_attr);
	check_frame_id(&command->refresh.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct polling_off_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
};

static unsigned char polling_off_112[] = { 0xD0, 0x09, 0x81, 0x03, 0x01, 0x04,
						0x00, 0x82, 0x02, 0x81, 0x82 };

static struct polling_off_test polling_off_data_112 = {
	.pdu = polling_off_112,
	.pdu_len = sizeof(polling_off_112),
	.qualifier = 0x00,
};

static void test_polling_off(gconstpointer data)
{
	const struct polling_off_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_POLLING_OFF);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	stk_command_free(command);
}

struct provide_local_info_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
};

static unsigned char provide_local_info_121[] = { 0xD0, 0x09, 0x81, 0x03, 0x01,
						0x26, 0x01, 0x82, 0x02, 0x81,
						0x82 };

static unsigned char provide_local_info_141[] = { 0xD0, 0x09, 0x81, 0x03, 0x01,
						0x26, 0x03, 0x82, 0x02, 0x81,
						0x82 };

static unsigned char provide_local_info_151[] = { 0xD0, 0x09, 0x81, 0x03, 0x01,
						0x26, 0x04, 0x82, 0x02, 0x81,
						0x82 };

static unsigned char provide_local_info_181[] = { 0xD0, 0x09, 0x81, 0x03, 0x01,
						0x26, 0x07, 0x82, 0x02, 0x81,
						0x82 };

static unsigned char provide_local_info_191[] = { 0xD0, 0x09, 0x81, 0x03, 0x01,
						0x26, 0x08, 0x82, 0x02, 0x81,
						0x82 };

static unsigned char provide_local_info_1111[] = { 0xD0, 0x09, 0x81, 0x03, 0x01,
						0x26, 0x0A, 0x82, 0x02, 0x81,
						0x82 };

static struct provide_local_info_test provide_local_info_data_121 = {
	.pdu = provide_local_info_121,
	.pdu_len = sizeof(provide_local_info_121),
	.qualifier = 0x01
};

static struct provide_local_info_test provide_local_info_data_141 = {
	.pdu = provide_local_info_141,
	.pdu_len = sizeof(provide_local_info_141),
	.qualifier = 0x03
};

static struct provide_local_info_test provide_local_info_data_151 = {
	.pdu = provide_local_info_151,
	.pdu_len = sizeof(provide_local_info_151),
	.qualifier = 0x04
};

static struct provide_local_info_test provide_local_info_data_181 = {
	.pdu = provide_local_info_181,
	.pdu_len = sizeof(provide_local_info_181),
	.qualifier = 0x07
};

static struct provide_local_info_test provide_local_info_data_191 = {
	.pdu = provide_local_info_191,
	.pdu_len = sizeof(provide_local_info_191),
	.qualifier = 0x08
};

static struct provide_local_info_test provide_local_info_data_1111 = {
	.pdu = provide_local_info_1111,
	.pdu_len = sizeof(provide_local_info_1111),
	.qualifier = 0x0A
};

static void test_provide_local_info(gconstpointer data)
{
	const struct provide_local_info_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	stk_command_free(command);
}

struct setup_event_list_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	struct stk_event_list event_list;
};

static unsigned char setup_event_list_111[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01,
						0x05, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x99, 0x01, 0x04 };

static unsigned char setup_event_list_121[] = { 0xD0, 0x0D, 0x81, 0x03, 0x01,
						0x05, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x99, 0x02, 0x05, 0x07 };

static unsigned char setup_event_list_122[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01,
						0x05, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x99, 0x01, 0x07 };

static unsigned char setup_event_list_131[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01,
						0x05, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x99, 0x01, 0x07 };

static unsigned char setup_event_list_132[] = { 0xD0, 0x0B, 0x81, 0x03, 0x01,
						0x05, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x99, 0x00 };

static unsigned char setup_event_list_141[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01,
						0x05, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x99, 0x01, 0x07 };

static struct setup_event_list_test setup_event_list_data_111 = {
	.pdu = setup_event_list_111,
	.pdu_len = sizeof(setup_event_list_111),
	.qualifier = 0x00,
	.event_list = {
		.len = 1,
		.list = { STK_EVENT_TYPE_USER_ACTIVITY }
	}
};

static struct setup_event_list_test setup_event_list_data_121 = {
	.pdu = setup_event_list_121,
	.pdu_len = sizeof(setup_event_list_121),
	.qualifier = 0x00,
	.event_list = {
		.len = 2,
		.list = { STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE,
				STK_EVENT_TYPE_LANGUAGE_SELECTION }
	}
};

static struct setup_event_list_test setup_event_list_data_122 = {
	.pdu = setup_event_list_122,
	.pdu_len = sizeof(setup_event_list_122),
	.qualifier = 0x00,
	.event_list = {
		.len = 1,
		.list = { STK_EVENT_TYPE_LANGUAGE_SELECTION }
	}
};

static struct setup_event_list_test setup_event_list_data_131 = {
	.pdu = setup_event_list_131,
	.pdu_len = sizeof(setup_event_list_131),
	.qualifier = 0x00,
	.event_list = {
		.len = 1,
		.list = { STK_EVENT_TYPE_LANGUAGE_SELECTION }
	}
};

static struct setup_event_list_test setup_event_list_data_132 = {
	.pdu = setup_event_list_132,
	.pdu_len = sizeof(setup_event_list_132),
	.qualifier = 0x00
};

static struct setup_event_list_test setup_event_list_data_141 = {
	.pdu = setup_event_list_141,
	.pdu_len = sizeof(setup_event_list_141),
	.qualifier = 0x00,
	.event_list = {
		.len = 1,
		.list = { STK_EVENT_TYPE_LANGUAGE_SELECTION }
	}
};

static void test_setup_event_list(gconstpointer data)
{
	const struct setup_event_list_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SETUP_EVENT_LIST);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_event_list(&command->setup_event_list.event_list,
						&test->event_list);

	stk_command_free(command);
}

struct perform_card_apdu_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	unsigned char dst;
	struct stk_c_apdu c_apdu;
};

static unsigned char perform_card_apdu_111[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x11, 0xA2, 0x07, 0xA0, 0xA4,
						0x00, 0x00, 0x02, 0x3F, 0x00 };

static unsigned char perform_card_apdu_112[] = { 0xD0, 0x10, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x11, 0xA2, 0x05, 0xA0, 0xC0,
						0x00, 0x00, 0x1B };

static unsigned char perform_card_apdu_121[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x11, 0xA2, 0x07, 0xA0, 0xA4,
						0x00, 0x00, 0x02, 0x7F, 0x20 };

static unsigned char perform_card_apdu_122[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x11, 0xA2, 0x07, 0xA0, 0xA4,
						0x00, 0x00, 0x02, 0x6F, 0x30 };

static unsigned char perform_card_apdu_123[] = { 0xD0, 0x28, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x11, 0xA2, 0x1D, 0xA0, 0xD6,
						0x00, 0x00, 0x18, 0x00, 0x01,
						0x02, 0x03, 0x04, 0x05, 0x06,
						0x07, 0x08, 0x09, 0x0A, 0x0B,
						0x0C, 0x0D, 0x0E, 0x0F, 0x10,
						0x11, 0x12, 0x13, 0x14, 0x15,
						0x16, 0x17 };

static unsigned char perform_card_apdu_124[] = { 0xD0, 0x10, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x11, 0xA2, 0x05, 0xA0, 0xB0,
						0x00, 0x00, 0x18 };

static unsigned char perform_card_apdu_125[] = { 0xD0, 0x28, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x11, 0xA2, 0x1D, 0xA0, 0xD6,
						0x00, 0x00, 0x18, 0xFF, 0xFF,
						0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
						0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
						0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
						0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
						0xFF, 0xFF };

static unsigned char perform_card_apdu_151[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x17, 0xA2, 0x07, 0xA0, 0xA4,
						0x00, 0x00, 0x02, 0x3F, 0x00 };

static unsigned char perform_card_apdu_211[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
						0x30, 0x00, 0x82, 0x02, 0x81,
						0x11, 0xA2, 0x07, 0xA0, 0xA4,
						0x00, 0x00, 0x02, 0x3F, 0x00 };

static struct perform_card_apdu_test perform_card_apdu_data_111 = {
	.pdu = perform_card_apdu_111,
	.pdu_len = sizeof(perform_card_apdu_111),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_SELECT,
		.p1 = 0x00,
		.p2 = 0x00,
		.lc = 0x02,
		.data = { 0x3F, 0x00 }
	}
};

static struct perform_card_apdu_test perform_card_apdu_data_112 = {
	.pdu = perform_card_apdu_112,
	.pdu_len = sizeof(perform_card_apdu_112),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_GET_RESPONSE,
		.p1 = 0x00,
		.p2 = 0x00,
		.has_le = 1,
		.le = 0x1B
	}
};

static struct perform_card_apdu_test perform_card_apdu_data_121 = {
	.pdu = perform_card_apdu_121,
	.pdu_len = sizeof(perform_card_apdu_121),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_SELECT,
		.p1 = 0x00,
		.p2 = 0x00,
		.lc = 0x02,
		.data = { 0x7F, 0x20 }
	}
};

static struct perform_card_apdu_test perform_card_apdu_data_122 = {
	.pdu = perform_card_apdu_122,
	.pdu_len = sizeof(perform_card_apdu_122),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_SELECT,
		.p1 = 0x00,
		.p2 = 0x00,
		.lc = 0x02,
		.data = { 0x6F, 0x30 }
	}
};

/* Byte 14 of Data is not correct in spec. */
static struct perform_card_apdu_test perform_card_apdu_data_123 = {
	.pdu = perform_card_apdu_123,
	.pdu_len = sizeof(perform_card_apdu_123),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_UPDATE_BINARY_D6,
		.p1 = 0x00,
		.p2 = 0x00,
		.lc = 0x18,
		.data = { 0x00, 0x01, 0x02, 0x03, 0x04,	0x05, 0x06, 0x07, 0x08,
				0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
				0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }
	}
};

static struct perform_card_apdu_test perform_card_apdu_data_124 = {
	.pdu = perform_card_apdu_124,
	.pdu_len = sizeof(perform_card_apdu_124),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_READ_BINARY_B0,
		.p1 = 0x00,
		.p2 = 0x00,
		.has_le = 1,
		.le = 0x18
	}
};

static struct perform_card_apdu_test perform_card_apdu_data_125 = {
	.pdu = perform_card_apdu_125,
	.pdu_len = sizeof(perform_card_apdu_125),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_UPDATE_BINARY_D6,
		.p1 = 0x00,
		.p2 = 0x00,
		.lc = 0x18,
		.data = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
				0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
				0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
	}
};

static struct perform_card_apdu_test perform_card_apdu_data_151 = {
	.pdu = perform_card_apdu_151,
	.pdu_len = sizeof(perform_card_apdu_151),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_7,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_SELECT,
		.p1 = 0x00,
		.p2 = 0x00,
		.lc = 0x02,
		.data = { 0x3F, 0x00 }
	}
};

static struct perform_card_apdu_test perform_card_apdu_data_211 = {
	.pdu = perform_card_apdu_211,
	.pdu_len = sizeof(perform_card_apdu_211),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
	.c_apdu = {
		.cla = 0xA0,
		.ins = STK_INS_SELECT,
		.p1 = 0x00,
		.p2 = 0x00,
		.lc = 0x02,
		.data = { 0x3F, 0x00 }
	}
};

static void test_perform_card_apdu(gconstpointer data)
{
	const struct perform_card_apdu_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_PERFORM_CARD_APDU);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == test->dst);

	check_c_apdu(&command->perform_card_apdu.c_apdu, &test->c_apdu);

	stk_command_free(command);
}

struct get_reader_status_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
};

static unsigned char get_reader_status_111[] = { 0xD0, 0x09, 0x81, 0x03, 0x01,
						0x33, 0x00, 0x82, 0x02, 0x81,
						0x82 };

static struct get_reader_status_test get_reader_status_data_111 = {
	.pdu = get_reader_status_111,
	.pdu_len = sizeof(get_reader_status_111),
	.qualifier = STK_QUALIFIER_TYPE_CARD_READER_STATUS,
};

static void test_get_reader_status(gconstpointer data)
{
	const struct get_reader_status_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_GET_READER_STATUS);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);

	if (command->qualifier == STK_QUALIFIER_TYPE_CARD_READER_STATUS)
		g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);
	else
		g_assert(command->dst <
				STK_DEVICE_IDENTITY_TYPE_CARD_READER_0 ||
			command->dst >
				STK_DEVICE_IDENTITY_TYPE_CARD_READER_7);

	stk_command_free(command);
}

struct timer_mgmt_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	unsigned char timer_id;
	struct stk_timer_value timer_value;
};

static unsigned char timer_mgmt_111[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01, 0xA5, 0x03,
						0x00, 0x50, 0x00 };

static unsigned char timer_mgmt_112[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01 };

static unsigned char timer_mgmt_113[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01, 0xA5, 0x03,
						0x00, 0x10, 0x03 };

static unsigned char timer_mgmt_114[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01 };

static unsigned char timer_mgmt_121[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x02, 0xA5, 0x03,
						0x32, 0x95, 0x95 };

static unsigned char timer_mgmt_122[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x02 };

static unsigned char timer_mgmt_123[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x02, 0xA5, 0x03,
						0x00, 0x10, 0x01 };

static unsigned char timer_mgmt_124[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x02 };

static unsigned char timer_mgmt_131[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x08, 0xA5, 0x03,
						0x00, 0x02, 0x00 };

static unsigned char timer_mgmt_132[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x08 };

static unsigned char timer_mgmt_133[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x08, 0xA5, 0x03,
						0x10, 0x00, 0x00 };

static unsigned char timer_mgmt_134[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x08 };

static unsigned char timer_mgmt_141[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01 };

static unsigned char timer_mgmt_142[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x02 };

static unsigned char timer_mgmt_143[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x03 };

static unsigned char timer_mgmt_144[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x04 };

static unsigned char timer_mgmt_145[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x05 };

static unsigned char timer_mgmt_146[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x06 };

static unsigned char timer_mgmt_147[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x07 };

static unsigned char timer_mgmt_148[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x02, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x08 };

static unsigned char timer_mgmt_151[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01 };

static unsigned char timer_mgmt_152[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x02 };

static unsigned char timer_mgmt_153[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x03 };

static unsigned char timer_mgmt_154[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x04 };

static unsigned char timer_mgmt_155[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x05 };

static unsigned char timer_mgmt_156[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x06 };

static unsigned char timer_mgmt_157[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x07 };

static unsigned char timer_mgmt_158[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x27,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x08 };

static unsigned char timer_mgmt_161[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01, 0xA5, 0x03,
						0x00, 0x00, 0x50 };

static unsigned char timer_mgmt_162[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x02, 0xA5, 0x03,
						0x00, 0x00, 0x50 };

static unsigned char timer_mgmt_163[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x03, 0xA5, 0x03,
						0x00, 0x00, 0x50 };

static unsigned char timer_mgmt_164[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x04, 0xA5, 0x03,
						0x00, 0x00, 0x50 };

static unsigned char timer_mgmt_165[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x05, 0xA5, 0x03,
						0x00, 0x00, 0x50 };

static unsigned char timer_mgmt_166[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x06, 0xA5, 0x03,
						0x00, 0x00, 0x50 };

static unsigned char timer_mgmt_167[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x07, 0xA5, 0x03,
						0x00, 0x00, 0x50 };

static unsigned char timer_mgmt_168[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x08, 0xA5, 0x03,
						0x00, 0x00, 0x50 };

static unsigned char timer_mgmt_211[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01, 0xA5, 0x03,
						0x00, 0x00, 0x01 };

static unsigned char timer_mgmt_221[] = { 0xD0, 0x11, 0x81, 0x03, 0x01, 0x27,
						0x00, 0x82, 0x02, 0x81, 0x82,
						0xA4, 0x01, 0x01, 0xA5, 0x03,
						0x00, 0x00, 0x03 };

static struct timer_mgmt_test timer_mgmt_data_111 = {
	.pdu = timer_mgmt_111,
	.pdu_len = sizeof(timer_mgmt_111),
	.qualifier = 0x00,
	.timer_id = 1,
	.timer_value = {
		.minute = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_112 = {
	.pdu = timer_mgmt_112,
	.pdu_len = sizeof(timer_mgmt_112),
	.qualifier = 0x02,
	.timer_id = 1
};

static struct timer_mgmt_test timer_mgmt_data_113 = {
	.pdu = timer_mgmt_113,
	.pdu_len = sizeof(timer_mgmt_113),
	.qualifier = 0x00,
	.timer_id = 1,
	.timer_value = {
		.minute = 1,
		.second = 30
	}
};

static struct timer_mgmt_test timer_mgmt_data_114 = {
	.pdu = timer_mgmt_114,
	.pdu_len = sizeof(timer_mgmt_114),
	.qualifier = 0x01,
	.timer_id = 1
};

static struct timer_mgmt_test timer_mgmt_data_121 = {
	.pdu = timer_mgmt_121,
	.pdu_len = sizeof(timer_mgmt_121),
	.qualifier = 0x00,
	.timer_id = 2,
	.timer_value = {
		.hour = 23,
		.minute = 59,
		.second = 59
	}
};

static struct timer_mgmt_test timer_mgmt_data_122 = {
	.pdu = timer_mgmt_122,
	.pdu_len = sizeof(timer_mgmt_122),
	.qualifier = 0x02,
	.timer_id = 2
};

static struct timer_mgmt_test timer_mgmt_data_123 = {
	.pdu = timer_mgmt_123,
	.pdu_len = sizeof(timer_mgmt_123),
	.qualifier = 0x00,
	.timer_id = 2,
	.timer_value = {
		.minute = 1,
		.second = 10
	}
};

static struct timer_mgmt_test timer_mgmt_data_124 = {
	.pdu = timer_mgmt_124,
	.pdu_len = sizeof(timer_mgmt_124),
	.qualifier = 0x01,
	.timer_id = 2
};

static struct timer_mgmt_test timer_mgmt_data_131 = {
	.pdu = timer_mgmt_131,
	.pdu_len = sizeof(timer_mgmt_131),
	.qualifier = 0x00,
	.timer_id = 8,
	.timer_value = {
		.minute = 20
	}
};

static struct timer_mgmt_test timer_mgmt_data_132 = {
	.pdu = timer_mgmt_132,
	.pdu_len = sizeof(timer_mgmt_132),
	.qualifier = 0x02,
	.timer_id = 8
};

static struct timer_mgmt_test timer_mgmt_data_133 = {
	.pdu = timer_mgmt_133,
	.pdu_len = sizeof(timer_mgmt_133),
	.qualifier = 0x00,
	.timer_id = 8,
	.timer_value = {
		.hour = 1
	}
};

static struct timer_mgmt_test timer_mgmt_data_134 = {
	.pdu = timer_mgmt_134,
	.pdu_len = sizeof(timer_mgmt_134),
	.qualifier = 0x01,
	.timer_id = 8
};

static struct timer_mgmt_test timer_mgmt_data_141 = {
	.pdu = timer_mgmt_141,
	.pdu_len = sizeof(timer_mgmt_141),
	.qualifier = 0x02,
	.timer_id = 1
};

static struct timer_mgmt_test timer_mgmt_data_142 = {
	.pdu = timer_mgmt_142,
	.pdu_len = sizeof(timer_mgmt_142),
	.qualifier = 0x02,
	.timer_id = 2
};

static struct timer_mgmt_test timer_mgmt_data_143 = {
	.pdu = timer_mgmt_143,
	.pdu_len = sizeof(timer_mgmt_143),
	.qualifier = 0x02,
	.timer_id = 3
};

static struct timer_mgmt_test timer_mgmt_data_144 = {
	.pdu = timer_mgmt_144,
	.pdu_len = sizeof(timer_mgmt_144),
	.qualifier = 0x02,
	.timer_id = 4
};

static struct timer_mgmt_test timer_mgmt_data_145 = {
	.pdu = timer_mgmt_145,
	.pdu_len = sizeof(timer_mgmt_145),
	.qualifier = 0x02,
	.timer_id = 5
};

static struct timer_mgmt_test timer_mgmt_data_146 = {
	.pdu = timer_mgmt_146,
	.pdu_len = sizeof(timer_mgmt_146),
	.qualifier = 0x02,
	.timer_id = 6
};

static struct timer_mgmt_test timer_mgmt_data_147 = {
	.pdu = timer_mgmt_147,
	.pdu_len = sizeof(timer_mgmt_147),
	.qualifier = 0x02,
	.timer_id = 7
};

static struct timer_mgmt_test timer_mgmt_data_148 = {
	.pdu = timer_mgmt_148,
	.pdu_len = sizeof(timer_mgmt_148),
	.qualifier = 0x02,
	.timer_id = 8
};

static struct timer_mgmt_test timer_mgmt_data_151 = {
	.pdu = timer_mgmt_151,
	.pdu_len = sizeof(timer_mgmt_151),
	.qualifier = 0x01,
	.timer_id = 1
};

static struct timer_mgmt_test timer_mgmt_data_152 = {
	.pdu = timer_mgmt_152,
	.pdu_len = sizeof(timer_mgmt_152),
	.qualifier = 0x01,
	.timer_id = 2
};

static struct timer_mgmt_test timer_mgmt_data_153 = {
	.pdu = timer_mgmt_153,
	.pdu_len = sizeof(timer_mgmt_153),
	.qualifier = 0x01,
	.timer_id = 3
};

static struct timer_mgmt_test timer_mgmt_data_154 = {
	.pdu = timer_mgmt_154,
	.pdu_len = sizeof(timer_mgmt_154),
	.qualifier = 0x01,
	.timer_id = 4
};

static struct timer_mgmt_test timer_mgmt_data_155 = {
	.pdu = timer_mgmt_155,
	.pdu_len = sizeof(timer_mgmt_155),
	.qualifier = 0x01,
	.timer_id = 5
};

static struct timer_mgmt_test timer_mgmt_data_156 = {
	.pdu = timer_mgmt_156,
	.pdu_len = sizeof(timer_mgmt_156),
	.qualifier = 0x01,
	.timer_id = 6
};

static struct timer_mgmt_test timer_mgmt_data_157 = {
	.pdu = timer_mgmt_157,
	.pdu_len = sizeof(timer_mgmt_157),
	.qualifier = 0x01,
	.timer_id = 7
};

static struct timer_mgmt_test timer_mgmt_data_158 = {
	.pdu = timer_mgmt_158,
	.pdu_len = sizeof(timer_mgmt_158),
	.qualifier = 0x01,
	.timer_id = 8
};

static struct timer_mgmt_test timer_mgmt_data_161 = {
	.pdu = timer_mgmt_161,
	.pdu_len = sizeof(timer_mgmt_161),
	.qualifier = 0x00,
	.timer_id = 1,
	.timer_value = {
		.second = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_162 = {
	.pdu = timer_mgmt_162,
	.pdu_len = sizeof(timer_mgmt_162),
	.qualifier = 0x00,
	.timer_id = 2,
	.timer_value = {
		.second = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_163 = {
	.pdu = timer_mgmt_163,
	.pdu_len = sizeof(timer_mgmt_163),
	.qualifier = 0x00,
	.timer_id = 3,
	.timer_value = {
		.second = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_164 = {
	.pdu = timer_mgmt_164,
	.pdu_len = sizeof(timer_mgmt_164),
	.qualifier = 0x00,
	.timer_id = 4,
	.timer_value = {
		.second = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_165 = {
	.pdu = timer_mgmt_165,
	.pdu_len = sizeof(timer_mgmt_165),
	.qualifier = 0x00,
	.timer_id = 5,
	.timer_value = {
		.second = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_166 = {
	.pdu = timer_mgmt_166,
	.pdu_len = sizeof(timer_mgmt_166),
	.qualifier = 0x00,
	.timer_id = 6,
	.timer_value = {
		.second = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_167 = {
	.pdu = timer_mgmt_167,
	.pdu_len = sizeof(timer_mgmt_167),
	.qualifier = 0x00,
	.timer_id = 7,
	.timer_value = {
		.second = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_168 = {
	.pdu = timer_mgmt_168,
	.pdu_len = sizeof(timer_mgmt_168),
	.qualifier = 0x00,
	.timer_id = 8,
	.timer_value = {
		.second = 5
	}
};

static struct timer_mgmt_test timer_mgmt_data_211 = {
	.pdu = timer_mgmt_211,
	.pdu_len = sizeof(timer_mgmt_211),
	.qualifier = 0x00,
	.timer_id = 1,
	.timer_value = {
		.second = 10
	}
};

static struct timer_mgmt_test timer_mgmt_data_221 = {
	.pdu = timer_mgmt_221,
	.pdu_len = sizeof(timer_mgmt_221),
	.qualifier = 0x00,
	.timer_id = 1,
	.timer_value = {
		.second = 30
	}
};

static void test_timer_mgmt(gconstpointer data)
{
	const struct timer_mgmt_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_TIMER_MANAGEMENT);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_timer_id(command->timer_mgmt.timer_id, test->timer_id);
	check_timer_value(&command->timer_mgmt.timer_value, &test->timer_value);

	stk_command_free(command);
}

struct setup_idle_mode_text_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *text;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
	char *html;
	enum stk_command_parse_result status;
};

static unsigned char setup_idle_mode_text_111[] = { 0xD0, 0x1A, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x0F, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74 };

static unsigned char setup_idle_mode_text_121[] = { 0xD0, 0x18, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x0D, 0x04,
						0x54, 0x6F, 0x6F, 0x6C, 0x6B,
						0x69, 0x74, 0x20, 0x54, 0x65,
						0x73, 0x74 };

static unsigned char setup_idle_mode_text_131[] = { 0xD0, 0x0B, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x00 };

static unsigned char setup_idle_mode_text_171[] = { 0xD0, 0x81, 0xFD, 0x81,
						0x03, 0x01, 0x28, 0x00, 0x82,
						0x02, 0x81, 0x82, 0x8D, 0x81,
						0xF1, 0x00, 0x54, 0x74, 0x19,
						0x34, 0x4D, 0x36, 0x41, 0x73,
						0x74, 0x98, 0xCD, 0x06, 0xCD,
						0xEB, 0x70, 0x38, 0x3B, 0x0F,
						0x0A, 0x83, 0xE8, 0x65, 0x3C,
						0x1D, 0x34, 0xA7, 0xCB, 0xD3,
						0xEE, 0x33, 0x0B, 0x74, 0x47,
						0xA7, 0xC7, 0x68, 0xD0, 0x1C,
						0x1D, 0x66, 0xB3, 0x41, 0xE2,
						0x32, 0x88, 0x9C, 0x9E, 0xC3,
						0xD9, 0xE1, 0x7C, 0x99, 0x0C,
						0x12, 0xE7, 0x41, 0x74, 0x74,
						0x19, 0xD4, 0x2C, 0x82, 0xC2,
						0x73, 0x50, 0xD8, 0x0D, 0x4A,
						0x93, 0xD9, 0x65, 0x50, 0xFB,
						0x4D, 0x2E, 0x83, 0xE8, 0x65,
						0x3C, 0x1D, 0x94, 0x36, 0x83,
						0xE8, 0xE8, 0x32, 0xA8, 0x59,
						0x04, 0xA5, 0xE7, 0xA0, 0xB0,
						0x98, 0x5D, 0x06, 0xD1, 0xDF,
						0x20, 0xF2, 0x1B, 0x94, 0xA6,
						0xBB, 0xA8, 0xE8, 0x32, 0x08,
						0x2E, 0x2F, 0xCF, 0xCB, 0x6E,
						0x7A, 0x98, 0x9E, 0x7E, 0xBB,
						0x41, 0x73, 0x7A, 0x9E, 0x5D,
						0x06, 0xA5, 0xE7, 0x20, 0x76,
						0xD9, 0x4C, 0x07, 0x85, 0xE7,
						0xA0, 0xB0, 0x1B, 0x94, 0x6E,
						0xC3, 0xD9, 0xE5, 0x76, 0xD9,
						0x4D, 0x0F, 0xD3, 0xD3, 0x6F,
						0x37, 0x88, 0x5C, 0x1E, 0xA7,
						0xE7, 0xE9, 0xB7, 0x1B, 0x44,
						0x7F, 0x83, 0xE8, 0xE8, 0x32,
						0xA8, 0x59, 0x04, 0xB5, 0xC3,
						0xEE, 0xBA, 0x39, 0x3C, 0xA6,
						0xD7, 0xE5, 0x65, 0xB9, 0x0B,
						0x44, 0x45, 0x97, 0x41, 0x69,
						0x32, 0xBB, 0x0C, 0x6A, 0xBF,
						0xC9, 0x65, 0x10, 0xBD, 0x8C,
						0xA7, 0x83, 0xE6, 0xE8, 0x30,
						0x9B, 0x0D, 0x12, 0x97, 0x41,
						0xE4, 0xF4, 0x1C, 0xCE, 0x0E,
						0xE7, 0xCB, 0x64, 0x50, 0xDA,
						0x0D, 0x0A, 0x83, 0xDA, 0x61,
						0xB7, 0xBB, 0x2C, 0x07, 0xD1,
						0xD1, 0x61, 0x3A, 0xA8, 0xEC,
						0x9E, 0xD7, 0xE5, 0xE5, 0x39,
						0x88, 0x8E, 0x0E, 0xD3, 0x41,
						0xEE, 0x32 };

static unsigned char setup_idle_mode_text_211[] = { 0xD0, 0x19, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x0A, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x74, 0x65, 0x78, 0x74, 0x9E,
						0x02, 0x00, 0x01 };

static unsigned char setup_idle_mode_text_221[] = { 0xD0, 0x19, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x0A, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x74, 0x65, 0x78, 0x74, 0x9E,
						0x02, 0x01, 0x01 };

static unsigned char setup_idle_mode_text_231[] = { 0xD0, 0x19, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x0A, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x74, 0x65, 0x78, 0x74, 0x9E,
						0x02, 0x00, 0x02 };

static unsigned char setup_idle_mode_text_241[] = { 0xD0, 0x0F, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x00, 0x9E,
						0x02, 0x01, 0x01 };

static unsigned char setup_idle_mode_text_311[] = { 0xD0, 0x24, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x19, 0x08,
						0x04, 0x17, 0x04, 0x14, 0x04,
						0x20, 0x04, 0x10, 0x04, 0x12,
						0x04, 0x21, 0x04, 0x22, 0x04,
						0x12, 0x04, 0x23, 0x04, 0x19,
						0x04, 0x22, 0x04, 0x15 };

static unsigned char setup_idle_mode_text_411[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char setup_idle_mode_text_412[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32 };

static unsigned char setup_idle_mode_text_421[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x01, 0xB4 };

static unsigned char setup_idle_mode_text_422[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32 };

static unsigned char setup_idle_mode_text_431[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x02, 0xB4 };

static unsigned char setup_idle_mode_text_432[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32 };

static unsigned char setup_idle_mode_text_441[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x04, 0xB4 };

static unsigned char setup_idle_mode_text_442[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char setup_idle_mode_text_443[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x33 };

static unsigned char setup_idle_mode_text_451[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x08, 0xB4 };

static unsigned char setup_idle_mode_text_452[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char setup_idle_mode_text_453[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x33 };

static unsigned char setup_idle_mode_text_461[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x10, 0xB4 };

static unsigned char setup_idle_mode_text_462[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char setup_idle_mode_text_463[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x33 };

static unsigned char setup_idle_mode_text_471[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x20, 0xB4 };

static unsigned char setup_idle_mode_text_472[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char setup_idle_mode_text_473[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x33 };

static unsigned char setup_idle_mode_text_481[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x40, 0xB4 };

static unsigned char setup_idle_mode_text_482[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char setup_idle_mode_text_483[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x33 };

static unsigned char setup_idle_mode_text_491[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x80, 0xB4 };

static unsigned char setup_idle_mode_text_492[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char setup_idle_mode_text_493[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x33 };

static unsigned char setup_idle_mode_text_4101[] = { 0xD0, 0x22, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x31, 0xD0, 0x04, 0x00, 0x10,
						0x00, 0xB4 };

static unsigned char setup_idle_mode_text_4102[] = { 0xD0, 0x1C, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x11, 0x04,
						0x49, 0x64, 0x6C, 0x65, 0x20,
						0x4D, 0x6F, 0x64, 0x65, 0x20,
						0x54, 0x65, 0x78, 0x74, 0x20,
						0x32 };

static unsigned char setup_idle_mode_text_511[] = { 0xD0, 0x10, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x05, 0x08,
						0x4F, 0x60, 0x59, 0x7D };

static unsigned char setup_idle_mode_text_611[] = { 0xD0, 0x14, 0x81, 0x03,
						0x01, 0x28, 0x00, 0x82, 0x02,
						0x81, 0x82, 0x8D, 0x09, 0x08,
						0x00, 0x38, 0x00, 0x30, 0x30,
						0xEB, 0x00, 0x30 };

static struct setup_idle_mode_text_test setup_idle_mode_text_data_111 = {
	.pdu = setup_idle_mode_text_111,
	.pdu_len = sizeof(setup_idle_mode_text_111),
	.qualifier = 0x00,
	.text = "Idle Mode Text"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_121 = {
	.pdu = setup_idle_mode_text_121,
	.pdu_len = sizeof(setup_idle_mode_text_121),
	.qualifier = 0x00,
	.text = "Toolkit Test"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_131 = {
	.pdu = setup_idle_mode_text_131,
	.pdu_len = sizeof(setup_idle_mode_text_131),
	.qualifier = 0x00,
	.text = ""
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_171 = {
	.pdu = setup_idle_mode_text_171,
	.pdu_len = sizeof(setup_idle_mode_text_171),
	.qualifier = 0x00,
	.text = "The SIM shall supply a text string, which shall be displayed "
		"by the ME as an idle mode text if the ME is able to do it."
		"The presentation style is left as an implementation decision "
		"to the ME manufacturer. The idle mode text shall be displayed "
		"in a manner that ensures that ne"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_211 = {
	.pdu = setup_idle_mode_text_211,
	.pdu_len = sizeof(setup_idle_mode_text_211),
	.qualifier = 0x00,
	.text = "Idle text",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_221 = {
	.pdu = setup_idle_mode_text_221,
	.pdu_len = sizeof(setup_idle_mode_text_221),
	.qualifier = 0x00,
	.text = "Idle text",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_231 = {
	.pdu = setup_idle_mode_text_231,
	.pdu_len = sizeof(setup_idle_mode_text_231),
	.qualifier = 0x00,
	.text = "Idle text",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_241 = {
	.pdu = setup_idle_mode_text_241,
	.pdu_len = sizeof(setup_idle_mode_text_241),
	.qualifier = 0x00,
	.text = "",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	},
	.status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_311 = {
	.pdu = setup_idle_mode_text_311,
	.pdu_len = sizeof(setup_idle_mode_text_311),
	.qualifier = 0x00,
	.text = "ЗДРАВСТВУЙТЕ"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_411 = {
	.pdu = setup_idle_mode_text_411,
	.pdu_len = sizeof(setup_idle_mode_text_411),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 1</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_412 = {
	.pdu = setup_idle_mode_text_412,
	.pdu_len = sizeof(setup_idle_mode_text_412),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_421 = {
	.pdu = setup_idle_mode_text_421,
	.pdu_len = sizeof(setup_idle_mode_text_421),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x01, 0xB4 }
	},
	.html = "<div style=\"text-align: center;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 1</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_422 = {
	.pdu = setup_idle_mode_text_422,
	.pdu_len = sizeof(setup_idle_mode_text_422),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_431 = {
	.pdu = setup_idle_mode_text_431,
	.pdu_len = sizeof(setup_idle_mode_text_431),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x02, 0xB4 }
	},
	.html = "<div style=\"text-align: right;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 1</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_432 = {
	.pdu = setup_idle_mode_text_432,
	.pdu_len = sizeof(setup_idle_mode_text_432),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_441 = {
	.pdu = setup_idle_mode_text_441,
	.pdu_len = sizeof(setup_idle_mode_text_441),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x04, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"big;color: #347235;background-color: #FFFF00;\">"
		"Idle Mode Text 1</span></div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_442 = {
	.pdu = setup_idle_mode_text_442,
	.pdu_len = sizeof(setup_idle_mode_text_442),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 2</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_443 = {
	.pdu = setup_idle_mode_text_443,
	.pdu_len = sizeof(setup_idle_mode_text_443),
	.qualifier = 0x00,
	.text = "Idle Mode Text 3"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_451 = {
	.pdu = setup_idle_mode_text_451,
	.pdu_len = sizeof(setup_idle_mode_text_451),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x08, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-size: "
		"small;color: #347235;background-color: #FFFF00;\">"
		"Idle Mode Text 1</span></div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_452 = {
	.pdu = setup_idle_mode_text_452,
	.pdu_len = sizeof(setup_idle_mode_text_452),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 2</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_453 = {
	.pdu = setup_idle_mode_text_453,
	.pdu_len = sizeof(setup_idle_mode_text_453),
	.qualifier = 0x00,
	.text = "Idle Mode Text 3"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_461 = {
	.pdu = setup_idle_mode_text_461,
	.pdu_len = sizeof(setup_idle_mode_text_461),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x10, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-weight: "
		"bold;color: #347235;background-color: #FFFF00;\">"
		"Idle Mode Text 1</span></div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_462 = {
	.pdu = setup_idle_mode_text_462,
	.pdu_len = sizeof(setup_idle_mode_text_462),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 2</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_463 = {
	.pdu = setup_idle_mode_text_463,
	.pdu_len = sizeof(setup_idle_mode_text_463),
	.qualifier = 0x00,
	.text = "Idle Mode Text 3"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_471 = {
	.pdu = setup_idle_mode_text_471,
	.pdu_len = sizeof(setup_idle_mode_text_471),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x20, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"font-style: "
		"italic;color: #347235;background-color: #FFFF00;\">"
		"Idle Mode Text 1</span></div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_472 = {
	.pdu = setup_idle_mode_text_472,
	.pdu_len = sizeof(setup_idle_mode_text_472),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 2</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_473 = {
	.pdu = setup_idle_mode_text_473,
	.pdu_len = sizeof(setup_idle_mode_text_473),
	.qualifier = 0x00,
	.text = "Idle Mode Text 3"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_481 = {
	.pdu = setup_idle_mode_text_481,
	.pdu_len = sizeof(setup_idle_mode_text_481),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x40, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: underline;color: #347235;"
		"background-color: #FFFF00;\">Idle Mode Text 1</span></div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_482 = {
	.pdu = setup_idle_mode_text_482,
	.pdu_len = sizeof(setup_idle_mode_text_482),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 2</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_483 = {
	.pdu = setup_idle_mode_text_483,
	.pdu_len = sizeof(setup_idle_mode_text_483),
	.qualifier = 0x00,
	.text = "Idle Mode Text 3"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_491 = {
	.pdu = setup_idle_mode_text_491,
	.pdu_len = sizeof(setup_idle_mode_text_491),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x80, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span "
		"style=\"text-decoration: line-through;color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 1</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_492 = {
	.pdu = setup_idle_mode_text_492,
	.pdu_len = sizeof(setup_idle_mode_text_492),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 2</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_493 = {
	.pdu = setup_idle_mode_text_493,
	.pdu_len = sizeof(setup_idle_mode_text_493),
	.qualifier = 0x00,
	.text = "Idle Mode Text 3"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_4101 = {
	.pdu = setup_idle_mode_text_4101,
	.pdu_len = sizeof(setup_idle_mode_text_4101),
	.qualifier = 0x00,
	.text = "Idle Mode Text 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	},
	.html = "<div style=\"text-align: left;\"><span style=\"color: "
		"#347235;background-color: #FFFF00;\">Idle Mode Text 1</span>"
		"</div>",
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_4102 = {
	.pdu = setup_idle_mode_text_4102,
	.pdu_len = sizeof(setup_idle_mode_text_4102),
	.qualifier = 0x00,
	.text = "Idle Mode Text 2"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_511 = {
	.pdu = setup_idle_mode_text_511,
	.pdu_len = sizeof(setup_idle_mode_text_511),
	.qualifier = 0x00,
	.text = "你好"
};

static struct setup_idle_mode_text_test setup_idle_mode_text_data_611 = {
	.pdu = setup_idle_mode_text_611,
	.pdu_len = sizeof(setup_idle_mode_text_611),
	.qualifier = 0x00,
	.text = "80ル0"
};

static void test_setup_idle_mode_text(gconstpointer data)
{
	const struct setup_idle_mode_text_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == test->status);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_text(command->setup_idle_mode_text.text, test->text);
	check_icon_id(&command->setup_idle_mode_text.icon_id, &test->icon_id);
	check_text_attr(&command->setup_idle_mode_text.text_attr,
							&test->text_attr);
	check_text_attr_html(&command->setup_idle_mode_text.text_attr,
				command->setup_idle_mode_text.text, test->html);
	check_frame_id(&command->setup_idle_mode_text.frame_id,
							&test->frame_id);

	stk_command_free(command);
}

struct run_at_command_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	char *at_command;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
	enum stk_command_parse_result status;
};

static unsigned char run_at_command_111[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0xA8, 0x07, 0x41, 0x54,
						0x2B, 0x43, 0x47, 0x4D, 0x49 };

static unsigned char run_at_command_121[] = { 0xD0, 0x14, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x00, 0xA8, 0x07,
						0x41, 0x54, 0x2B, 0x43, 0x47,
						0x4D, 0x49 };

static unsigned char run_at_command_131[] = { 0xD0, 0x22, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0E, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0xA8, 0x07, 0x41,
						0x54, 0x2B, 0x43, 0x47, 0x4D,
						0x49 };

static unsigned char run_at_command_211[] = { 0xD0, 0x22, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0A, 0x42, 0x61,
						0x73, 0x69, 0x63, 0x20, 0x49,
						0x63, 0x6F, 0x6E, 0xA8, 0x07,
						0x41, 0x54, 0x2B, 0x43, 0x47,
						0x4D, 0x49, 0x9E, 0x02, 0x00,
						0x01 };

/* The 12th byte should be 0x85, instead of 0xA8 */
static unsigned char run_at_command_221[] = { 0xD0, 0x23, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0B, 0x43, 0x6F,
						0x6C, 0x6F, 0x75, 0x72, 0x20,
						0x49, 0x63, 0x6F, 0x6E, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0x9E, 0x02,
						0x00, 0x02 };

static unsigned char run_at_command_231[] = { 0xD0, 0x22, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0A, 0x42, 0x61,
						0x73, 0x69, 0x63, 0x20, 0x49,
						0x63, 0x6F, 0x6E, 0xA8, 0x07,
						0x41, 0x54, 0x2B, 0x43, 0x47,
						0x4D, 0x49, 0x9E, 0x02, 0x01,
						0x01 };

static unsigned char run_at_command_241[] = { 0xD0, 0x23, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x0B, 0x43, 0x6F,
						0x6C, 0x6F, 0x75, 0x72, 0x20,
						0x49, 0x63, 0x6F, 0x6E, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0x9E, 0x02,
						0x01, 0x02 };

static unsigned char run_at_command_251[] = { 0xD0, 0x16, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0xA8, 0x07, 0x41, 0x54,
						0x2B, 0x43, 0x47, 0x4D, 0x49,
						0x9E, 0x02, 0x01, 0x01 };

static unsigned char run_at_command_311[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x00, 0xB4 };

static unsigned char run_at_command_312[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_321[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x01, 0xB4 };

static unsigned char run_at_command_322[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_331[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x02, 0xB4 };

static unsigned char run_at_command_332[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_341[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x04, 0xB4 };

static unsigned char run_at_command_342[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x00, 0xB4 };

static unsigned char run_at_command_343[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x33, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_351[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x08, 0xB4 };

static unsigned char run_at_command_352[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x00, 0xB4 };

static unsigned char run_at_command_353[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x33, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_361[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x10, 0xB4 };

static unsigned char run_at_command_362[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x00, 0xB4 };

static unsigned char run_at_command_363[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x33, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_371[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x20, 0xB4 };

static unsigned char run_at_command_372[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x00, 0xB4 };

static unsigned char run_at_command_373[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x33, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_381[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x40, 0xB4 };

static unsigned char run_at_command_382[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x00, 0xB4 };

static unsigned char run_at_command_383[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x33, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_391[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x80, 0xB4 };

static unsigned char run_at_command_392[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x00, 0xB4 };

static unsigned char run_at_command_393[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x33, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

static unsigned char run_at_command_3101[] = { 0xD0, 0x2A, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x31, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49, 0xD0, 0x04,
						0x00, 0x10, 0x00, 0xB4 };

static unsigned char run_at_command_3102[] = { 0xD0, 0x24, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x10, 0x52, 0x75,
						0x6E, 0x20, 0x41, 0x54, 0x20,
						0x43, 0x6F, 0x6D, 0x6D, 0x61,
						0x6E, 0x64, 0x20, 0x32, 0xA8,
						0x07, 0x41, 0x54, 0x2B, 0x43,
						0x47, 0x4D, 0x49 };

/* The 2nd byte (total size) should be 0x2D, instead of 0x21 */
static unsigned char run_at_command_411[] = { 0xD0, 0x2D, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x19, 0x80, 0x04,
						0x17, 0x04, 0x14, 0x04, 0x20,
						0x04, 0x10, 0x04, 0x12, 0x04,
						0x21, 0x04, 0x22, 0x04, 0x12,
						0x04, 0x23, 0x04, 0x19, 0x04,
						0x22, 0x04, 0x15, 0xA8, 0x07,
						0x41, 0x54, 0x2B, 0x43, 0x47,
						0x4D, 0x49 };

static unsigned char run_at_command_511[] = { 0xD0, 0x19, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x05, 0x80, 0x4F,
						0x60, 0x59, 0x7D, 0xA8, 0x07,
						0x41, 0x54, 0x2B, 0x43, 0x47,
						0x4D, 0x49 };

static unsigned char run_at_command_611[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01,
						0x34, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x85, 0x07, 0x80, 0x00,
						0x38, 0x00, 0x30, 0x30, 0xEB,
						0xA8, 0x07, 0x41, 0x54, 0x2B,
						0x43, 0x47, 0x4D, 0x49 };

static struct run_at_command_test run_at_command_data_111 = {
	.pdu = run_at_command_111,
	.pdu_len = sizeof(run_at_command_111),
	.qualifier = 0x00,
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_121 = {
	.pdu = run_at_command_121,
	.pdu_len = sizeof(run_at_command_121),
	.qualifier = 0x00,
	.alpha_id = "",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_131 = {
	.pdu = run_at_command_131,
	.pdu_len = sizeof(run_at_command_131),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_211 = {
	.pdu = run_at_command_211,
	.pdu_len = sizeof(run_at_command_211),
	.qualifier = 0x00,
	.alpha_id = "Basic Icon",
	.at_command = "AT+CGMI",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct run_at_command_test run_at_command_data_221 = {
	.pdu = run_at_command_221,
	.pdu_len = sizeof(run_at_command_221),
	.qualifier = 0x00,
	.alpha_id = "Colour Icon",
	.at_command = "AT+CGMI",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct run_at_command_test run_at_command_data_231 = {
	.pdu = run_at_command_231,
	.pdu_len = sizeof(run_at_command_231),
	.qualifier = 0x00,
	.alpha_id = "Basic Icon",
	.at_command = "AT+CGMI",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

/* The qualifier of icon_id should be non self-explanatory */
static struct run_at_command_test run_at_command_data_241 = {
	.pdu = run_at_command_241,
	.pdu_len = sizeof(run_at_command_241),
	.qualifier = 0x00,
	.alpha_id = "Colour Icon",
	.at_command = "AT+CGMI",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct run_at_command_test run_at_command_data_251 = {
	.pdu = run_at_command_251,
	.pdu_len = sizeof(run_at_command_251),
	.qualifier = 0x00,
	.at_command = "AT+CGMI",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	},
	.status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD
};

static struct run_at_command_test run_at_command_data_311 = {
	.pdu = run_at_command_311,
	.pdu_len = sizeof(run_at_command_311),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_312 = {
	.pdu = run_at_command_312,
	.pdu_len = sizeof(run_at_command_312),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_321 = {
	.pdu = run_at_command_321,
	.pdu_len = sizeof(run_at_command_321),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x01, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_322 = {
	.pdu = run_at_command_322,
	.pdu_len = sizeof(run_at_command_322),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_331 = {
	.pdu = run_at_command_331,
	.pdu_len = sizeof(run_at_command_331),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x02, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_332 = {
	.pdu = run_at_command_332,
	.pdu_len = sizeof(run_at_command_332),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_341 = {
	.pdu = run_at_command_341,
	.pdu_len = sizeof(run_at_command_341),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x04, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_342 = {
	.pdu = run_at_command_342,
	.pdu_len = sizeof(run_at_command_342),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_343 = {
	.pdu = run_at_command_343,
	.pdu_len = sizeof(run_at_command_343),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 3",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_351 = {
	.pdu = run_at_command_351,
	.pdu_len = sizeof(run_at_command_351),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x08, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_352 = {
	.pdu = run_at_command_352,
	.pdu_len = sizeof(run_at_command_352),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_353 = {
	.pdu = run_at_command_353,
	.pdu_len = sizeof(run_at_command_353),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 3",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_361 = {
	.pdu = run_at_command_361,
	.pdu_len = sizeof(run_at_command_361),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x10, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_362 = {
	.pdu = run_at_command_362,
	.pdu_len = sizeof(run_at_command_362),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_363 = {
	.pdu = run_at_command_363,
	.pdu_len = sizeof(run_at_command_363),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 3",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_371 = {
	.pdu = run_at_command_371,
	.pdu_len = sizeof(run_at_command_371),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x20, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_372 = {
	.pdu = run_at_command_372,
	.pdu_len = sizeof(run_at_command_372),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_373 = {
	.pdu = run_at_command_373,
	.pdu_len = sizeof(run_at_command_373),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 3",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_381 = {
	.pdu = run_at_command_381,
	.pdu_len = sizeof(run_at_command_381),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x40, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_382 = {
	.pdu = run_at_command_382,
	.pdu_len = sizeof(run_at_command_382),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_383 = {
	.pdu = run_at_command_383,
	.pdu_len = sizeof(run_at_command_383),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 3",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_391 = {
	.pdu = run_at_command_391,
	.pdu_len = sizeof(run_at_command_391),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x80, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_392 = {
	.pdu = run_at_command_392,
	.pdu_len = sizeof(run_at_command_392),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_393 = {
	.pdu = run_at_command_393,
	.pdu_len = sizeof(run_at_command_393),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 3",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_3101 = {
	.pdu = run_at_command_3101,
	.pdu_len = sizeof(run_at_command_3101),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 1",
	.at_command = "AT+CGMI",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x10, 0x00, 0xB4 }
	}
};

static struct run_at_command_test run_at_command_data_3102 = {
	.pdu = run_at_command_3102,
	.pdu_len = sizeof(run_at_command_3102),
	.qualifier = 0x00,
	.alpha_id = "Run AT Command 2",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_411 = {
	.pdu = run_at_command_411,
	.pdu_len = sizeof(run_at_command_411),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_511 = {
	.pdu = run_at_command_511,
	.pdu_len = sizeof(run_at_command_511),
	.qualifier = 0x00,
	.alpha_id = "你好",
	.at_command = "AT+CGMI"
};

static struct run_at_command_test run_at_command_data_611 = {
	.pdu = run_at_command_611,
	.pdu_len = sizeof(run_at_command_611),
	.qualifier = 0x00,
	.alpha_id = "80ル",
	.at_command = "AT+CGMI"
};

static void test_run_at_command(gconstpointer data)
{
	const struct run_at_command_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == test->status);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_RUN_AT_COMMAND);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_alpha_id(command->run_at_command.alpha_id, test->alpha_id);
	check_at_command(command->run_at_command.at_command, test->at_command);
	check_icon_id(&command->run_at_command.icon_id, &test->icon_id);
	check_text_attr(&command->run_at_command.text_attr, &test->text_attr);
	check_frame_id(&command->run_at_command.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct send_dtmf_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	char *dtmf;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

static unsigned char send_dtmf_111[] = { 0xD0, 0x0D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0xAC, 0x02, 0xC1, 0xF2 };

static unsigned char send_dtmf_121[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x09, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0xAC, 0x05, 0x21, 0x43,
						0x65, 0x87, 0x09 };

static unsigned char send_dtmf_131[] = { 0xD0, 0x13, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x00, 0xAC, 0x06, 0xC1,
						0xCC, 0xCC, 0xCC, 0xCC, 0x2C };

static unsigned char send_dtmf_211[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0A, 0x42, 0x61, 0x73,
						0x69, 0x63, 0x20, 0x49, 0x63,
						0x6F, 0x6E, 0xAC, 0x02, 0xC1,
						0xF2, 0x9E, 0x02, 0x00, 0x01 };

static unsigned char send_dtmf_221[] = { 0xD0, 0x1E, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x43, 0x6F, 0x6C,
						0x6F, 0x75, 0x72, 0x20, 0x49,
						0x63, 0x6F, 0x6E, 0xAC, 0x02,
						0xC1, 0xF2, 0x9E, 0x02, 0x00,
						0x02 };

static unsigned char send_dtmf_231[] = { 0xD0, 0x1C, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x09, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0xAC, 0x02, 0xC1, 0xF2,
						0x9E, 0x02, 0x01, 0x01 };

static unsigned char send_dtmf_311[] = { 0xD0, 0x28, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x19, 0x80, 0x04, 0x17,
						0x04, 0x14, 0x04, 0x20, 0x04,
						0x10, 0x04, 0x12, 0x04, 0x21,
						0x04, 0x22, 0x04, 0x12, 0x04,
						0x23, 0x04, 0x19, 0x04, 0x22,
						0x04, 0x15, 0xAC, 0x02, 0xC1,
						0xF2 };

static unsigned char send_dtmf_411[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x00,
						0xB4 };

static unsigned char send_dtmf_412[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

static unsigned char send_dtmf_421[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x01,
						0xB4 };

static unsigned char send_dtmf_422[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

static unsigned char send_dtmf_431[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0xB0, 0x02,
						0xB4 };

static unsigned char send_dtmf_432[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

static unsigned char send_dtmf_441[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x04,
						0xB4 };

static unsigned char send_dtmf_442[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x00,
						0xB4 };

static unsigned char send_dtmf_443[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x33, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

static unsigned char send_dtmf_451[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x08,
						0xB4 };

static unsigned char send_dtmf_452[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x00,
						0xB4 };

static unsigned char send_dtmf_453[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x33, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

/* The last 0x00 in spec should be removed. */
static unsigned char send_dtmf_461[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x10,
						0xB4 };

static unsigned char send_dtmf_462[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x00,
						0xB4 };

static unsigned char send_dtmf_463[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x33, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

static unsigned char send_dtmf_471[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x20,
						0xB4 };

static unsigned char send_dtmf_472[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x00,
						0xB4 };

static unsigned char send_dtmf_473[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x33, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

static unsigned char send_dtmf_481[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x40,
						0xB4 };

static unsigned char send_dtmf_482[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x00,
						0xB4 };

static unsigned char send_dtmf_483[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x33, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

/* The second to the last should be 0x80 */
static unsigned char send_dtmf_491[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x80,
						0xB4 };

static unsigned char send_dtmf_492[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x00,
						0xB4 };

static unsigned char send_dtmf_493[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x33, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

static unsigned char send_dtmf_4101[] = { 0xD0, 0x23, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x31, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09,
						0xD0, 0x04, 0x00, 0x0B, 0x00,
						0xB4 };

static unsigned char send_dtmf_4102[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x0B, 0x53, 0x65, 0x6E,
						0x64, 0x20, 0x44, 0x54, 0x4D,
						0x46, 0x20, 0x32, 0xAC, 0x05,
						0x21, 0x43, 0x65, 0x87, 0x09 };

static unsigned char send_dtmf_511[] = { 0xD0, 0x14, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x05, 0x80, 0x4F, 0x60,
						0x59, 0x7D, 0xAC, 0x02, 0xC1,
						0xF2 };

static unsigned char send_dtmf_611[] = { 0xD0, 0x12, 0x81, 0x03, 0x01, 0x14,
						0x00, 0x82, 0x02, 0x81, 0x83,
						0x85, 0x03, 0x80, 0x30, 0xEB,
						0xAC, 0x02, 0xC1, 0xF2 };

static struct send_dtmf_test send_dtmf_data_111 = {
	.pdu = send_dtmf_111,
	.pdu_len = sizeof(send_dtmf_111),
	.qualifier = 0x00,
	.dtmf = "1c2"
};

static struct send_dtmf_test send_dtmf_data_121 = {
	.pdu = send_dtmf_121,
	.pdu_len = sizeof(send_dtmf_121),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_131 = {
	.pdu = send_dtmf_131,
	.pdu_len = sizeof(send_dtmf_131),
	.qualifier = 0x00,
	.alpha_id = "",
	.dtmf = "1cccccccccc2"
};

static struct send_dtmf_test send_dtmf_data_211 = {
	.pdu = send_dtmf_211,
	.pdu_len = sizeof(send_dtmf_211),
	.qualifier = 0x00,
	.alpha_id = "Basic Icon",
	.dtmf = "1c2",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_dtmf_test send_dtmf_data_221 = {
	.pdu = send_dtmf_221,
	.pdu_len = sizeof(send_dtmf_221),
	.qualifier = 0x00,
	.alpha_id = "Colour Icon",
	.dtmf = "1c2",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x02
	}
};

static struct send_dtmf_test send_dtmf_data_231 = {
	.pdu = send_dtmf_231,
	.pdu_len = sizeof(send_dtmf_231),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF",
	.dtmf = "1c2",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct send_dtmf_test send_dtmf_data_311 = {
	.pdu = send_dtmf_311,
	.pdu_len = sizeof(send_dtmf_311),
	.qualifier = 0x00,
	.alpha_id = "ЗДРАВСТВУЙТЕ",
	.dtmf = "1c2"
};

static struct send_dtmf_test send_dtmf_data_411 = {
	.pdu = send_dtmf_411,
	.pdu_len = sizeof(send_dtmf_411),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_412 = {
	.pdu = send_dtmf_412,
	.pdu_len = sizeof(send_dtmf_412),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_421 = {
	.pdu = send_dtmf_421,
	.pdu_len = sizeof(send_dtmf_421),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x01, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_422 = {
	.pdu = send_dtmf_422,
	.pdu_len = sizeof(send_dtmf_422),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_431 = {
	.pdu = send_dtmf_431,
	.pdu_len = sizeof(send_dtmf_431),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0xB0, 0x02, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_432 = {
	.pdu = send_dtmf_432,
	.pdu_len = sizeof(send_dtmf_432),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_441 = {
	.pdu = send_dtmf_441,
	.pdu_len = sizeof(send_dtmf_441),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x04, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_442 = {
	.pdu = send_dtmf_442,
	.pdu_len = sizeof(send_dtmf_442),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_443 = {
	.pdu = send_dtmf_443,
	.pdu_len = sizeof(send_dtmf_443),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 3",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_451 = {
	.pdu = send_dtmf_451,
	.pdu_len = sizeof(send_dtmf_451),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x08, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_452 = {
	.pdu = send_dtmf_452,
	.pdu_len = sizeof(send_dtmf_452),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_453 = {
	.pdu = send_dtmf_453,
	.pdu_len = sizeof(send_dtmf_453),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 3",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_461 = {
	.pdu = send_dtmf_461,
	.pdu_len = sizeof(send_dtmf_461),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x10, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_462 = {
	.pdu = send_dtmf_462,
	.pdu_len = sizeof(send_dtmf_462),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_463 = {
	.pdu = send_dtmf_463,
	.pdu_len = sizeof(send_dtmf_463),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 3",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_471 = {
	.pdu = send_dtmf_471,
	.pdu_len = sizeof(send_dtmf_471),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x20, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_472 = {
	.pdu = send_dtmf_472,
	.pdu_len = sizeof(send_dtmf_472),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_473 = {
	.pdu = send_dtmf_473,
	.pdu_len = sizeof(send_dtmf_473),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 3",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_481 = {
	.pdu = send_dtmf_481,
	.pdu_len = sizeof(send_dtmf_481),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x40, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_482 = {
	.pdu = send_dtmf_482,
	.pdu_len = sizeof(send_dtmf_482),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_483 = {
	.pdu = send_dtmf_483,
	.pdu_len = sizeof(send_dtmf_483),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 3",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_491 = {
	.pdu = send_dtmf_491,
	.pdu_len = sizeof(send_dtmf_491),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x80, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_492 = {
	.pdu = send_dtmf_492,
	.pdu_len = sizeof(send_dtmf_492),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_493 = {
	.pdu = send_dtmf_493,
	.pdu_len = sizeof(send_dtmf_493),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 3",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_4101 = {
	.pdu = send_dtmf_4101,
	.pdu_len = sizeof(send_dtmf_4101),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 1",
	.dtmf = "1234567890",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	}
};

static struct send_dtmf_test send_dtmf_data_4102 = {
	.pdu = send_dtmf_4102,
	.pdu_len = sizeof(send_dtmf_4102),
	.qualifier = 0x00,
	.alpha_id = "Send DTMF 2",
	.dtmf = "1234567890"
};

static struct send_dtmf_test send_dtmf_data_511 = {
	.pdu = send_dtmf_511,
	.pdu_len = sizeof(send_dtmf_511),
	.qualifier = 0x00,
	.alpha_id = "你好",
	.dtmf = "1c2"
};

static struct send_dtmf_test send_dtmf_data_611 = {
	.pdu = send_dtmf_611,
	.pdu_len = sizeof(send_dtmf_611),
	.qualifier = 0x00,
	.alpha_id = "ル",
	.dtmf = "1c2"
};

static void test_send_dtmf(gconstpointer data)
{
	const struct send_dtmf_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SEND_DTMF);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_NETWORK);

	check_alpha_id(command->send_dtmf.alpha_id, test->alpha_id);
	check_dtmf_string(command->send_dtmf.dtmf, test->dtmf);
	check_icon_id(&command->send_dtmf.icon_id, &test->icon_id);
	check_text_attr(&command->send_dtmf.text_attr, &test->text_attr);
	check_frame_id(&command->send_dtmf.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct language_notification_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char language[3];
};

static unsigned char language_notification_111[] = { 0xD0, 0x0D, 0x81, 0x03,
						0x01, 0x35, 0x01, 0x82, 0x02,
						0x81, 0x82, 0xAD, 0x02, 0x73,
						0x65 };

static unsigned char language_notification_121[] = { 0xD0, 0x09, 0x81, 0x03,
						0x01, 0x35, 0x00, 0x82, 0x02,
						0x81, 0x82 };

static struct language_notification_test language_notification_data_111 = {
	.pdu = language_notification_111,
	.pdu_len = sizeof(language_notification_111),
	.qualifier = 0x01,
	.language = "se"
};

static struct language_notification_test language_notification_data_121 = {
	.pdu = language_notification_121,
	.pdu_len = sizeof(language_notification_121),
	.qualifier = 0x00
};

static void test_language_notification(gconstpointer data)
{
	const struct language_notification_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_LANGUAGE_NOTIFICATION);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_language(command->language_notification.language, test->language);

	stk_command_free(command);
}

struct launch_browser_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	unsigned char browser_id;
	char *url;
	struct stk_common_byte_array bearer;
	struct stk_file prov_file_refs[MAX_ITEM];
	char *text_gateway_proxy_id;
	char *alpha_id;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
	struct stk_common_byte_array network_name;
	char *text_usr;
	char *text_passwd;
};

static unsigned char launch_browser_111[] = { 0xD0, 0x18, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0B,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C };

static unsigned char launch_browser_121[] = { 0xD0, 0x1F, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x12, 0x68, 0x74,
						0x74, 0x70, 0x3A, 0x2F, 0x2F,
						0x78, 0x78, 0x78, 0x2E, 0x79,
						0x79, 0x79, 0x2E, 0x7A, 0x7A,
						0x7A, 0x05, 0x00 };

static unsigned char launch_browser_131[] = { 0xD0, 0x0E, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x30, 0x01, 0x00, 0x31,
						0x00 };

static unsigned char launch_browser_141[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x32, 0x01,
						0x03, 0x0D, 0x10, 0x04, 0x61,
						0x62, 0x63, 0x2E, 0x64, 0x65,
						0x66, 0x2E, 0x67, 0x68, 0x69,
						0x2E, 0x6A, 0x6B, 0x6C };

static unsigned char launch_browser_211[] = { 0xD0, 0x18, 0x81, 0x03, 0x01,
						0x15, 0x02, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0B,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C };

static unsigned char launch_browser_221[] = { 0xD0, 0x18, 0x81, 0x03, 0x01,
						0x15, 0x03, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0B,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C };

static unsigned char launch_browser_231[] = { 0xD0, 0x0B, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00 };

static unsigned char launch_browser_311[] = { 0xD0, 0x26, 0x81, 0x03, 0x01,
						0x15, 0x02, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x19,
						0x80, 0x04, 0x17, 0x04, 0x14,
						0x04, 0x20, 0x04, 0x10, 0x04,
						0x12, 0x04, 0x21, 0x04, 0x22,
						0x04, 0x12, 0x04, 0x23, 0x04,
						0x19, 0x04, 0x22, 0x04, 0x15 };

static unsigned char launch_browser_411[] = { 0xD0, 0x21, 0x81, 0x03, 0x01,
						0x15, 0x02, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x10,
						0x4E, 0x6F, 0x74, 0x20, 0x73,
						0x65, 0x6C, 0x66, 0x20, 0x65,
						0x78, 0x70, 0x6C, 0x61, 0x6E,
						0x2E, 0x1E, 0x02, 0x01, 0x01 };

static unsigned char launch_browser_421[] = { 0xD0, 0x1D, 0x81, 0x03, 0x01,
						0x15, 0x02, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0C,
						0x53, 0x65, 0x6C, 0x66, 0x20,
						0x65, 0x78, 0x70, 0x6C, 0x61,
						0x6E, 0x2E, 0x1E, 0x02, 0x00,
						0x01 };

static unsigned char launch_browser_511[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x00, 0xB4 };

static unsigned char launch_browser_512[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32 };

static unsigned char launch_browser_521[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x01, 0xB4 };

static unsigned char launch_browser_522[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32 };

static unsigned char launch_browser_531[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x02, 0xB4 };

static unsigned char launch_browser_532[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32 };

static unsigned char launch_browser_541[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x04, 0xB4 };

static unsigned char launch_browser_542[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32, 0xD0, 0x04,
						0x00, 0x0D, 0x00, 0xB4 };

static unsigned char launch_browser_543[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x33 };

static unsigned char launch_browser_551[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x08, 0xB4 };

static unsigned char launch_browser_552[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32, 0xD0, 0x04,
						0x00, 0x0D, 0x00, 0xB4 };

static unsigned char launch_browser_553[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x33 };

static unsigned char launch_browser_561[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x10, 0xB4 };

static unsigned char launch_browser_562[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32, 0xD0, 0x04,
						0x00, 0x0D, 0x00, 0xB4 };

static unsigned char launch_browser_563[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x33 };

static unsigned char launch_browser_571[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x20, 0xB4 };

static unsigned char launch_browser_572[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32, 0xD0, 0x04,
						0x00, 0x0D, 0x00, 0xB4 };

static unsigned char launch_browser_573[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x33 };

static unsigned char launch_browser_581[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x40, 0xB4 };

static unsigned char launch_browser_582[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32, 0xD0, 0x04,
						0x00, 0x0D, 0x00, 0xB4 };

static unsigned char launch_browser_583[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x33 };

static unsigned char launch_browser_591[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x80, 0xB4 };

static unsigned char launch_browser_592[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32, 0xD0, 0x04,
						0x00, 0x0D, 0x00, 0xB4 };

static unsigned char launch_browser_593[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x33 };

static unsigned char launch_browser_5101[] = { 0xD0, 0x20, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x31, 0xD0, 0x04,
						0x00, 0x0D, 0x00, 0xB4 };

static unsigned char launch_browser_5102[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01,
						0x15, 0x00, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x0D,
						0x44, 0x65, 0x66, 0x61, 0x75,
						0x6C, 0x74, 0x20, 0x55, 0x52,
						0x4C, 0x20, 0x32 };

static unsigned char launch_browser_611[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
						0x15, 0x02, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x05,
						0x80, 0x4F, 0x60, 0x59, 0x7D };

static unsigned char launch_browser_711[] = { 0xD0, 0x10, 0x81, 0x03, 0x01,
						0x15, 0x02, 0x82, 0x02, 0x81,
						0x82, 0x31, 0x00, 0x05, 0x03,
						0x80, 0x30, 0xEB };

static struct launch_browser_test launch_browser_data_111 = {
	.pdu = launch_browser_111,
	.pdu_len = sizeof(launch_browser_111),
	.qualifier = 0x00,
	.alpha_id = "Default URL"
};

static struct launch_browser_test launch_browser_data_121 = {
	.pdu = launch_browser_121,
	.pdu_len = sizeof(launch_browser_121),
	.qualifier = 0x00,
	.alpha_id = "",
	.url = "http://xxx.yyy.zzz"
};

static struct launch_browser_test launch_browser_data_131 = {
	.pdu = launch_browser_131,
	.pdu_len = sizeof(launch_browser_131),
	.qualifier = 0x00
};

static struct launch_browser_test launch_browser_data_141 = {
	.pdu = launch_browser_141,
	.pdu_len = sizeof(launch_browser_141),
	.qualifier = 0x00,
	.bearer = {
		.len = 1,
		.array = (unsigned char *) "\x03"
	},
	.text_gateway_proxy_id = "abc.def.ghi.jkl"
};

static struct launch_browser_test launch_browser_data_211 = {
	.pdu = launch_browser_211,
	.pdu_len = sizeof(launch_browser_211),
	.qualifier = 0x02,
	.alpha_id = "Default URL"
};

static struct launch_browser_test launch_browser_data_221 = {
	.pdu = launch_browser_221,
	.pdu_len = sizeof(launch_browser_221),
	.qualifier = 0x03,
	.alpha_id = "Default URL"
};

static struct launch_browser_test launch_browser_data_231 = {
	.pdu = launch_browser_231,
	.pdu_len = sizeof(launch_browser_231),
	.qualifier = 0x00
};

static struct launch_browser_test launch_browser_data_311 = {
	.pdu = launch_browser_311,
	.pdu_len = sizeof(launch_browser_311),
	.qualifier = 0x02,
	.alpha_id = "ЗДРАВСТВУЙТЕ"
};

static struct launch_browser_test launch_browser_data_411 = {
	.pdu = launch_browser_411,
	.pdu_len = sizeof(launch_browser_411),
	.qualifier = 0x02,
	.alpha_id = "Not self explan.",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct launch_browser_test launch_browser_data_421 = {
	.pdu = launch_browser_421,
	.pdu_len = sizeof(launch_browser_421),
	.qualifier = 0x02,
	.alpha_id = "Self explan.",
	.icon_id = {
		.qualifier = STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY,
		.id = 0x01
	}
};

static struct launch_browser_test launch_browser_data_511 = {
	.pdu = launch_browser_511,
	.pdu_len = sizeof(launch_browser_511),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x00, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_512 = {
	.pdu = launch_browser_512,
	.pdu_len = sizeof(launch_browser_512),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2"
};

static struct launch_browser_test launch_browser_data_521 = {
	.pdu = launch_browser_521,
	.pdu_len = sizeof(launch_browser_521),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x01, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_522 = {
	.pdu = launch_browser_522,
	.pdu_len = sizeof(launch_browser_522),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2"
};

static struct launch_browser_test launch_browser_data_531 = {
	.pdu = launch_browser_531,
	.pdu_len = sizeof(launch_browser_531),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x02, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_532 = {
	.pdu = launch_browser_532,
	.pdu_len = sizeof(launch_browser_532),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2"
};

static struct launch_browser_test launch_browser_data_541 = {
	.pdu = launch_browser_541,
	.pdu_len = sizeof(launch_browser_541),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x04, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_542 = {
	.pdu = launch_browser_542,
	.pdu_len = sizeof(launch_browser_542),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x00, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_543 = {
	.pdu = launch_browser_543,
	.pdu_len = sizeof(launch_browser_543),
	.qualifier = 0x00,
	.alpha_id = "Default URL 3"
};

static struct launch_browser_test launch_browser_data_551 = {
	.pdu = launch_browser_551,
	.pdu_len = sizeof(launch_browser_551),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x08, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_552 = {
	.pdu = launch_browser_552,
	.pdu_len = sizeof(launch_browser_552),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x00, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_553 = {
	.pdu = launch_browser_553,
	.pdu_len = sizeof(launch_browser_553),
	.qualifier = 0x00,
	.alpha_id = "Default URL 3"
};

static struct launch_browser_test launch_browser_data_561 = {
	.pdu = launch_browser_561,
	.pdu_len = sizeof(launch_browser_561),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x10, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_562 = {
	.pdu = launch_browser_562,
	.pdu_len = sizeof(launch_browser_562),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x00, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_563 = {
	.pdu = launch_browser_563,
	.pdu_len = sizeof(launch_browser_563),
	.qualifier = 0x00,
	.alpha_id = "Default URL 3"
};

static struct launch_browser_test launch_browser_data_571 = {
	.pdu = launch_browser_571,
	.pdu_len = sizeof(launch_browser_571),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x20, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_572 = {
	.pdu = launch_browser_572,
	.pdu_len = sizeof(launch_browser_572),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x00, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_573 = {
	.pdu = launch_browser_573,
	.pdu_len = sizeof(launch_browser_573),
	.qualifier = 0x00,
	.alpha_id = "Default URL 3"
};

static struct launch_browser_test launch_browser_data_581 = {
	.pdu = launch_browser_581,
	.pdu_len = sizeof(launch_browser_581),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x40, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_582 = {
	.pdu = launch_browser_582,
	.pdu_len = sizeof(launch_browser_582),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x00, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_583 = {
	.pdu = launch_browser_583,
	.pdu_len = sizeof(launch_browser_583),
	.qualifier = 0x00,
	.alpha_id = "Default URL 3"
};

static struct launch_browser_test launch_browser_data_591 = {
	.pdu = launch_browser_591,
	.pdu_len = sizeof(launch_browser_591),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x80, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_592 = {
	.pdu = launch_browser_592,
	.pdu_len = sizeof(launch_browser_592),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x00, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_593 = {
	.pdu = launch_browser_593,
	.pdu_len = sizeof(launch_browser_593),
	.qualifier = 0x00,
	.alpha_id = "Default URL 3"
};

static struct launch_browser_test launch_browser_data_5101 = {
	.pdu = launch_browser_5101,
	.pdu_len = sizeof(launch_browser_5101),
	.qualifier = 0x00,
	.alpha_id = "Default URL 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0D, 0x00, 0xB4 }
	}
};

static struct launch_browser_test launch_browser_data_5102 = {
	.pdu = launch_browser_5102,
	.pdu_len = sizeof(launch_browser_5102),
	.qualifier = 0x00,
	.alpha_id = "Default URL 2"
};

static struct launch_browser_test launch_browser_data_611 = {
	.pdu = launch_browser_611,
	.pdu_len = sizeof(launch_browser_611),
	.qualifier = 0x02,
	.alpha_id = "你好"
};

static struct launch_browser_test launch_browser_data_711 = {
	.pdu = launch_browser_711,
	.pdu_len = sizeof(launch_browser_711),
	.qualifier = 0x02,
	.alpha_id = "ル"
};

static void test_launch_browser(gconstpointer data)
{
	const struct launch_browser_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_LAUNCH_BROWSER);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_browser_id(command->launch_browser.browser_id, test->browser_id);
	check_url(command->launch_browser.url, test->url);
	check_bearer(&command->launch_browser.bearer, &test->bearer);
	check_provisioning_file_references(
		command->launch_browser.prov_file_refs,	test->prov_file_refs);
	check_text(command->launch_browser.text_gateway_proxy_id,
						test->text_gateway_proxy_id);
	check_alpha_id(command->launch_browser.alpha_id, test->alpha_id);
	check_icon_id(&command->launch_browser.icon_id, &test->icon_id);
	check_text_attr(&command->launch_browser.text_attr, &test->text_attr);
	check_frame_id(&command->launch_browser.frame_id, &test->frame_id);
	check_text(command->launch_browser.text_usr, test->text_usr);
	check_text(command->launch_browser.text_passwd, test->text_passwd);

	stk_command_free(command);
}

struct open_channel_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	char *alpha_id;
	struct stk_icon_id icon_id;
	struct stk_bearer_description bearer_desc;
	unsigned short buf_size;
	char *apn;
	struct stk_other_address local_addr;
	char *text_usr;
	char *text_passwd;
	struct stk_uicc_te_interface uti;
	struct stk_other_address data_dest_addr;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

static unsigned char open_channel_211[] = { 0xD0, 0x36, 0x81, 0x03, 0x01, 0x40,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0x35, 0x07, 0x02, 0x03, 0x04,
						0x03, 0x04, 0x1F, 0x02, 0x39,
						0x02, 0x05, 0x78, 0x0D, 0x08,
						0xF4, 0x55, 0x73, 0x65, 0x72,
						0x4C, 0x6F, 0x67, 0x0D, 0x08,
						0xF4, 0x55, 0x73, 0x65, 0x72,
						0x50, 0x77, 0x64, 0x3C, 0x03,
						0x01, 0xAD, 0x9C, 0x3E, 0x05,
						0x21, 0x01, 0x01, 0x01, 0x01 };

static unsigned char open_channel_221[] = { 0xD0, 0x42, 0x81, 0x03, 0x01, 0x40,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0x35, 0x07, 0x02, 0x03, 0x04,
						0x03, 0x04, 0x1F, 0x02, 0x39,
						0x02, 0x05, 0x78, 0x47, 0x0A,
						0x06, 0x54, 0x65, 0x73, 0x74,
						0x47, 0x70, 0x02, 0x72, 0x73,
						0x0D, 0x08, 0xF4, 0x55, 0x73,
						0x65, 0x72, 0x4C, 0x6F, 0x67,
						0x0D, 0x08, 0xF4, 0x55, 0x73,
						0x65, 0x72, 0x50, 0x77, 0x64,
						0x3C, 0x03, 0x01, 0xAD, 0x9C,
						0x3E, 0x05, 0x21, 0x01, 0x01,
						0x01, 0x01 };

static unsigned char open_channel_231[] = { 0xD0, 0x4B, 0x81, 0x03, 0x01, 0x40,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0x05, 0x07, 0x4F, 0x70, 0x65,
						0x6E, 0x20, 0x49, 0x44, 0x35,
						0x07, 0x02, 0x03, 0x04, 0x03,
						0x04, 0x1F, 0x02, 0x39, 0x02,
						0x05, 0x78, 0x47, 0x0A, 0x06,
						0x54, 0x65, 0x73, 0x74, 0x47,
						0x70, 0x02, 0x72, 0x73, 0x0D,
						0x08, 0xF4, 0x55, 0x73, 0x65,
						0x72, 0x4C, 0x6F, 0x67, 0x0D,
						0x08, 0xF4, 0x55, 0x73, 0x65,
						0x72, 0x50, 0x77, 0x64, 0x3C,
						0x03, 0x01, 0xAD, 0x9C, 0x3E,
						0x05, 0x21, 0x01, 0x01, 0x01,
						0x01 };

static unsigned char open_channel_241[] = { 0xD0, 0x44, 0x81, 0x03, 0x01, 0x40,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0x05, 0x00, 0x35, 0x07, 0x02,
						0x03, 0x04, 0x03, 0x04, 0x1F,
						0x02, 0x39, 0x02, 0x05, 0x78,
						0x47, 0x0A, 0x06, 0x54, 0x65,
						0x73, 0x74, 0x47, 0x70, 0x02,
						0x72, 0x73, 0x0D, 0x08, 0xF4,
						0x55, 0x73, 0x65, 0x72, 0x4C,
						0x6F, 0x67, 0x0D, 0x08, 0xF4,
						0x55, 0x73, 0x65, 0x72, 0x50,
						0x77, 0x64, 0x3C, 0x03, 0x01,
						0xAD, 0x9C, 0x3E, 0x05, 0x21,
						0x01, 0x01, 0x01, 0x01 };

static unsigned char open_channel_511[] = { 0xD0, 0x53, 0x81, 0x03, 0x01, 0x40,
						0x01, 0x82, 0x02, 0x81, 0x82,
						0x05, 0x09, 0x4F, 0x70, 0x65,
						0x6E, 0x20, 0x49, 0x44, 0x20,
						0x31, 0x35, 0x07, 0x02, 0x03,
						0x04, 0x03, 0x04, 0x1F, 0x02,
						0x39, 0x02, 0x05, 0x78, 0x47,
						0x0A, 0x06, 0x54, 0x65, 0x73,
						0x74, 0x47, 0x70, 0x02, 0x72,
						0x73, 0x0D, 0x08, 0xF4, 0x55,
						0x73, 0x65, 0x72, 0x4C, 0x6F,
						0x67, 0x0D, 0x08, 0xF4, 0x55,
						0x73, 0x65, 0x72, 0x50, 0x77,
						0x64, 0x3C, 0x03, 0x01, 0xAD,
						0x9C, 0x3E, 0x05, 0x21, 0x01,
						0x01, 0x01, 0x01, 0xD0, 0x04,
						0x00, 0x09, 0x00, 0xB4 };

static struct open_channel_test open_channel_data_211 = {
	/*
	 * OPEN CHANNEL, immediate link establishment, GPRS, no local address
	 * no alpha identifier, no network access name
	 */
	.pdu = open_channel_211,
	.pdu_len = sizeof(open_channel_211),
	.qualifier = STK_OPEN_CHANNEL_FLAG_IMMEDIATE,
	.bearer_desc = {
			.type = STK_BEARER_TYPE_GPRS_UTRAN,
			.gprs = {
				.precedence = 3,
				.delay = 4,
				.reliability = 3,
				.peak = 4,
				.mean = 31,
				.pdp_type = 2,
			},
	},
	.buf_size = 1400,
	.text_usr = "UserLog",
	.text_passwd = "UserPwd",
	.uti = {
		.protocol = STK_TRANSPORT_PROTOCOL_UDP_CLIENT_REMOTE,
		.port = 44444,
	},
	.data_dest_addr = {
			.type = STK_ADDRESS_IPV4,
			.addr = {
				.ipv4 = 0x01010101,
			},
	},
};

static struct open_channel_test open_channel_data_221 = {
	/*
	 * OPEN CHANNEL, immediate link establishment GPRS,
	 * no alpha identifier, with network access name
	 */
	.pdu = open_channel_221,
	.pdu_len = sizeof(open_channel_221),
	.qualifier = STK_OPEN_CHANNEL_FLAG_IMMEDIATE,
	.bearer_desc = {
			.type = STK_BEARER_TYPE_GPRS_UTRAN,
			.gprs = {
				.precedence = 3,
				.delay = 4,
				.reliability = 3,
				.peak = 4,
				.mean = 31,
				.pdp_type = 2,
			},
	},
	.buf_size = 1400,
	.apn = "TestGp.rs",
	.text_usr = "UserLog",
	.text_passwd = "UserPwd",
	.uti = {
		.protocol = STK_TRANSPORT_PROTOCOL_UDP_CLIENT_REMOTE,
		.port = 44444,
	},
	.data_dest_addr = {
			.type = STK_ADDRESS_IPV4,
			.addr = {
				.ipv4 = 0x01010101,
			},
	},
};

static struct open_channel_test open_channel_data_231 = {
	/*
	 * OPEN CHANNEL, immediate link establishment, GPRS
	 * with alpha identifier
	 */
	.pdu = open_channel_231,
	.pdu_len = sizeof(open_channel_231),
	.qualifier = STK_OPEN_CHANNEL_FLAG_IMMEDIATE,
	.alpha_id = "Open ID",
	.bearer_desc = {
			.type = STK_BEARER_TYPE_GPRS_UTRAN,
			.gprs = {
				.precedence = 3,
				.delay = 4,
				.reliability = 3,
				.peak = 4,
				.mean = 31,
				.pdp_type = 2,
			},
	},
	.buf_size = 1400,
	.apn = "TestGp.rs",
	.text_usr = "UserLog",
	.text_passwd = "UserPwd",
	.uti = {
		.protocol = STK_TRANSPORT_PROTOCOL_UDP_CLIENT_REMOTE,
		.port = 44444,
	},
	.data_dest_addr = {
			.type = STK_ADDRESS_IPV4,
			.addr = {
				.ipv4 = 0x01010101,
			},
	},
};

static struct open_channel_test open_channel_data_241 = {
	/*
	 * OPEN CHANNEL, immediate link establishment, GPRS,
	 * with null alpha identifier
	 */
	.pdu = open_channel_241,
	.pdu_len = sizeof(open_channel_241),
	.qualifier = STK_OPEN_CHANNEL_FLAG_IMMEDIATE,
	.alpha_id = "",
	.bearer_desc = {
			.type = STK_BEARER_TYPE_GPRS_UTRAN,
			.gprs = {
				.precedence = 3,
				.delay = 4,
				.reliability = 3,
				.peak = 4,
				.mean = 31,
				.pdp_type = 2,
			},
	},
	.buf_size = 1400,
	.apn = "TestGp.rs",
	.text_usr = "UserLog",
	.text_passwd = "UserPwd",
	.uti = {
		.protocol = STK_TRANSPORT_PROTOCOL_UDP_CLIENT_REMOTE,
		.port = 44444,
	},
	.data_dest_addr = {
			.type = STK_ADDRESS_IPV4,
			.addr = {
				.ipv4 = 0x01010101,
			},
	},
};

static struct open_channel_test open_channel_data_511 = {
	/*
	 * OPEN CHANNEL, immediate link establishment, GPRS
	 * Text Attribute – Left Alignment
	 */
	.pdu = open_channel_511,
	.pdu_len = sizeof(open_channel_511),
	.qualifier = STK_OPEN_CHANNEL_FLAG_IMMEDIATE,
	.alpha_id = "Open ID 1",
	.bearer_desc = {
			.type = STK_BEARER_TYPE_GPRS_UTRAN,
			.gprs = {
				.precedence = 3,
				.delay = 4,
				.reliability = 3,
				.peak = 4,
				.mean = 31,
				.pdp_type = 2,
			},
	},
	.buf_size = 1400,
	.apn = "TestGp.rs",
	.text_usr = "UserLog",
	.text_passwd = "UserPwd",
	.uti = {
		.protocol = STK_TRANSPORT_PROTOCOL_UDP_CLIENT_REMOTE,
		.port = 44444,
	},
	.data_dest_addr = {
			.type = STK_ADDRESS_IPV4,
			.addr = {
				.ipv4 = 0x01010101,
			},
	},
	.text_attr = {
			.len = 4,
			.attributes = { 0x00, 0x09, 0x00, 0xB4 }
	},
};

static void test_open_channel(gconstpointer data)
{
	const struct open_channel_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_OPEN_CHANNEL);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	check_alpha_id(command->open_channel.alpha_id, test->alpha_id);
	check_icon_id(&command->open_channel.icon_id, &test->icon_id);
	check_bearer_desc(&command->open_channel.bearer_desc,
					&test->bearer_desc);
	g_assert(command->open_channel.buf_size == test->buf_size);
	check_network_access_name(command->open_channel.apn, test->apn);
	check_other_address(&command->open_channel.local_addr,
					&test->local_addr);
	check_text(command->open_channel.text_usr, test->text_usr);
	check_text(command->open_channel.text_passwd, test->text_passwd);
	check_uicc_te_interface(&command->open_channel.uti, &test->uti);
	check_other_address(&command->open_channel.data_dest_addr,
					&test->data_dest_addr);
	check_text_attr(&command->open_channel.text_attr, &test->text_attr);
	check_frame_id(&command->open_channel.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct close_channel_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	enum stk_device_identity_type dst;
	char *alpha_id;
	struct stk_icon_id icon_id;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

static unsigned char close_channel_111[] = { 0xD0, 0x09, 0x81, 0x03, 0x01, 0x41,
						0x00, 0x82, 0x02, 0x81, 0x21 };

static struct close_channel_test close_channel_data_111 = {
	.pdu = close_channel_111,
	.pdu_len = sizeof(close_channel_111),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CHANNEL_1,
};

static unsigned char close_channel_211[] = { 0xD0, 0x1B, 0x81, 0x03, 0x01, 0x41,
						0x00, 0x82, 0x02, 0x81, 0x21,
						0x85, 0x0A, 0x43, 0x6C, 0x6F,
						0x73, 0x65, 0x20, 0x49, 0x44,
						0x20, 0x31, 0xD0, 0x04, 0x00,
						0x0A, 0x00, 0xB4,
 };

static struct close_channel_test close_channel_data_211 = {
	.pdu = close_channel_211,
	.pdu_len = sizeof(close_channel_211),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CHANNEL_1,
	.alpha_id = "Close ID 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0A, 0x00, 0xB4 }
	},
};

static void test_close_channel(gconstpointer data)
{
	const struct close_channel_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_CLOSE_CHANNEL);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == test->dst);

	check_alpha_id(command->close_channel.alpha_id, test->alpha_id);
	check_icon_id(&command->close_channel.icon_id, &test->icon_id);
	check_text_attr(&command->close_channel.text_attr, &test->text_attr);
	check_frame_id(&command->close_channel.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct receive_data_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	enum stk_device_identity_type dst;
	char *alpha_id;
	struct stk_icon_id icon_id;
	unsigned char data_len;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

static unsigned char receive_data_111[] = { 0xD0, 0x0C, 0x81, 0x03, 0x01, 0x42,
						0x00, 0x82, 0x02, 0x81, 0x21,
						0xB7, 0x01, 0xC8 };

static struct receive_data_test receive_data_data_111 = {
	.pdu = receive_data_111,
	.pdu_len = sizeof(receive_data_111),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CHANNEL_1,
	.data_len = 200,
};

static unsigned char receive_data_211[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x42,
						0x00, 0x82, 0x02, 0x81, 0x21,
						0x85, 0x0E, 0x52, 0x65, 0x63,
						0x65, 0x69, 0x76, 0x65, 0x20,
						0x44, 0x61, 0x74, 0x61, 0x20,
						0x31, 0xB7, 0x01, 0xC8, 0xD0,
						0x04, 0x00, 0x0E, 0x00, 0xB4 };

static struct receive_data_test receive_data_data_211 = {
	.pdu = receive_data_211,
	.pdu_len = sizeof(receive_data_211),
	.qualifier = 0x00,
	.dst = STK_DEVICE_IDENTITY_TYPE_CHANNEL_1,
	.data_len = 200,
	.alpha_id = "Receive Data 1",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0E, 0x00, 0xB4 }
	},
};


static void test_receive_data(gconstpointer data)
{
	const struct receive_data_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_RECEIVE_DATA);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == test->dst);

	check_alpha_id(command->receive_data.alpha_id, test->alpha_id);
	check_icon_id(&command->receive_data.icon_id, &test->icon_id);
	check_common_byte(command->receive_data.data_len, test->data_len);
	check_text_attr(&command->receive_data.text_attr, &test->text_attr);
	check_frame_id(&command->receive_data.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct send_data_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
	enum stk_device_identity_type dst;
	char *alpha_id;
	struct stk_icon_id icon_id;
	struct stk_common_byte_array data;
	struct stk_text_attribute text_attr;
	struct stk_frame_id frame_id;
};

static unsigned char send_data_111[] = { 0xD0, 0x13, 0x81, 0x03, 0x01, 0x43,
						0x01, 0x82, 0x02, 0x81, 0x21,
						0xB6, 0x08, 0x00, 0x01, 0x02,
						0x03, 0x04, 0x05, 0x06, 0x07 };

static struct send_data_test send_data_data_111 = {
	.pdu = send_data_111,
	.pdu_len = sizeof(send_data_111),
	.qualifier = STK_SEND_DATA_IMMEDIATELY,
	.dst = STK_DEVICE_IDENTITY_TYPE_CHANNEL_1,
	.data = {
		.array = (unsigned char[8]) {
				0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
		},
		.len = 8,
	},
};

static unsigned char send_data_121[] = {
				0xD0, 0x81, 0xD4, 0x81, 0x03, 0x01, 0x43, 0x00,
				0x82, 0x02, 0x81, 0x21, 0xB6, 0x81, 0xC8, 0x00,
				0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
				0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
				0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
				0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
				0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
				0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
				0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
				0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
				0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
				0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
				0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
				0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
				0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
				0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
				0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
				0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
				0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
				0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
				0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
				0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0,
				0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
				0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
				0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
				0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
				0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7 };

static struct send_data_test send_data_data_121 = {
	.pdu = send_data_121,
	.pdu_len = sizeof(send_data_121),
	.qualifier = STK_SEND_DATA_STORE_DATA,
	.dst = STK_DEVICE_IDENTITY_TYPE_CHANNEL_1,
	.data = {
		.array = (unsigned char[200]) {
				0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
				0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
				0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
				0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
				0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
				0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
				0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
				0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
				0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
				0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
				0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
				0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
				0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
				0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
				0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
				0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
				0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
				0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
				0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
				0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
				0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
				0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
				0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
		},
		.len = 200,
	},
};
static unsigned char send_data_211[] = {
				0xD0, 0x26, 0x81, 0x03, 0x01, 0x43, 0x01, 0x82,
				0x02, 0x81, 0x21, 0x85, 0x0B, 0x53, 0x65, 0x6E,
				0x64, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x31,
				0xB6, 0x08, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
				0x06, 0x07, 0xD0, 0x04, 0x00, 0x0B, 0x00, 0xB4,
 };

static struct send_data_test send_data_data_211 = {
	.pdu = send_data_211,
	.pdu_len = sizeof(send_data_211),
	.qualifier = STK_SEND_DATA_IMMEDIATELY,
	.dst = STK_DEVICE_IDENTITY_TYPE_CHANNEL_1,
	.alpha_id = "Send Data 1",
	.data = {
		.array = (unsigned char[8]) {
				0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
		},
		.len = 8,
	},
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x0B, 0x00, 0xB4 }
	},
};

static void test_send_data(gconstpointer data)
{
	const struct send_data_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_SEND_DATA);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == test->dst);

	check_alpha_id(command->send_data.alpha_id, test->alpha_id);
	check_icon_id(&command->send_data.icon_id, &test->icon_id);
	check_channel_data(&command->send_data.data, &test->data);
	check_text_attr(&command->send_data.text_attr, &test->text_attr);
	check_frame_id(&command->send_data.frame_id, &test->frame_id);

	stk_command_free(command);
}

struct get_channel_status_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	unsigned char qualifier;
};

static unsigned char get_channel_status_111[] = { 0xD0, 0x09, 0x81, 0x03, 0x01,
							0x44, 0x00, 0x82, 0x02,
							0x81, 0x82 };

static struct get_channel_status_test get_channel_status_data_111 = {
	.pdu = get_channel_status_111,
	.pdu_len = sizeof(get_channel_status_111),
	.qualifier = 0x00,
};

static void test_get_channel_status(gconstpointer data)
{
	const struct get_channel_status_test *test = data;
	struct stk_command *command;

	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);

	g_assert(command);
	g_assert(command->status == STK_PARSE_RESULT_OK);

	g_assert(command->number == 1);
	g_assert(command->type == STK_COMMAND_TYPE_GET_CHANNEL_STATUS);
	g_assert(command->qualifier == test->qualifier);

	g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
	g_assert(command->dst == STK_DEVICE_IDENTITY_TYPE_TERMINAL);

	stk_command_free(command);
}

struct terminal_response_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	struct stk_response response;
};

static void test_terminal_response_encoding(gconstpointer data)
{
	const struct terminal_response_test *test = data;
	const unsigned char *pdu;
	unsigned int pdu_len;

	pdu = stk_pdu_from_response(&test->response, &pdu_len);

	if (test->pdu)
		g_assert(pdu);
	else
		g_assert(pdu == NULL);

	g_assert(pdu_len == test->pdu_len);
	g_assert(memcmp(pdu, test->pdu, pdu_len) == 0);
}

static const struct terminal_response_test display_text_response_data_111 = {
	.pdu = display_text_response_111,
	.pdu_len = sizeof(display_text_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x80, /* Wait for user to clear */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const struct terminal_response_test display_text_response_data_121 = {
	.pdu = display_text_response_121,
	.pdu_len = sizeof(display_text_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x80, /* Wait for user to clear */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TERMINAL_BUSY,
			.additional_len = 1, /* Screen is busy */
			.additional = (unsigned char *) "\1",
		},
	},
};

static const struct terminal_response_test display_text_response_data_131 = {
	.pdu = display_text_response_131,
	.pdu_len = sizeof(display_text_response_131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x81, /* Wait for user to clear, High priority */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const struct terminal_response_test display_text_response_data_151 = {
	.pdu = display_text_response_151,
	.pdu_len = sizeof(display_text_response_151),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const struct terminal_response_test display_text_response_data_171 = {
	.pdu = display_text_response_171,
	.pdu_len = sizeof(display_text_response_171),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x80, /* Wait for user to clear */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_GO_BACK,
		},
	},
};

static const struct terminal_response_test display_text_response_data_181 = {
	.pdu = display_text_response_181,
	.pdu_len = sizeof(display_text_response_181),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x80, /* Wait for user to clear */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_USER_TERMINATED,
		},
	},
};

static const struct terminal_response_test display_text_response_data_191 = {
	.pdu = display_text_response_191,
	.pdu_len = sizeof(display_text_response_191),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x80, /* Wait for user to clear */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_DATA_NOT_UNDERSTOOD,
		},
	},
};

static const struct terminal_response_test display_text_response_data_211 = {
	.pdu = display_text_response_211,
	.pdu_len = sizeof(display_text_response_211),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x80, /* Wait for user to clear */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_RESPONSE,
		},
	},
};

static const struct terminal_response_test display_text_response_data_511b = {
	.pdu = display_text_response_511b,
	.pdu_len = sizeof(display_text_response_511b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_DISPLAY_TEXT,
		.qualifier = 0x80, /* Wait for user to clear */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
	},
};

static const struct terminal_response_test get_inkey_response_data_111 = {
	.pdu = get_inkey_response_111,
	.pdu_len = sizeof(get_inkey_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "+",
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_121 = {
	.pdu = get_inkey_response_121,
	.pdu_len = sizeof(get_inkey_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "0",
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_131 = {
	.pdu = get_inkey_response_131,
	.pdu_len = sizeof(get_inkey_response_131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_GO_BACK,
		},
	},
};

static const struct terminal_response_test get_inkey_response_data_141 = {
	.pdu = get_inkey_response_141,
	.pdu_len = sizeof(get_inkey_response_141),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_USER_TERMINATED,
		},
	},
};

static const struct terminal_response_test get_inkey_response_data_151 = {
	.pdu = get_inkey_response_151,
	.pdu_len = sizeof(get_inkey_response_151),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x01, /* SMS alphabet */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "q",
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_161 = {
	.pdu = get_inkey_response_161,
	.pdu_len = sizeof(get_inkey_response_161),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x01, /* SMS alphabet */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "x",
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_211 = {
	.pdu = get_inkey_response_211,
	.pdu_len = sizeof(get_inkey_response_211),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_RESPONSE,
		},
	},
};

static const struct terminal_response_test get_inkey_response_data_411 = {
	.pdu = get_inkey_response_411,
	.pdu_len = sizeof(get_inkey_response_411),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x03, /* UCS2 alphabet */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "Д",
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_511 = {
	.pdu = get_inkey_response_511,
	.pdu_len = sizeof(get_inkey_response_511),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x04, /* Yes/No response */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "Yes",
				.yesno = TRUE,
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_512 = {
	.pdu = get_inkey_response_512,
	.pdu_len = sizeof(get_inkey_response_512),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x04, /* Yes/No response */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = NULL,
				.yesno = TRUE,
			},
		}},
	},
};

static const unsigned char get_inkey_response_611b[] = {
	0x81, 0x03, 0x01, 0x22, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04, 0x8d, 0x02, 0x04, 0x2b,
};

static const struct terminal_response_test get_inkey_response_data_611b = {
	.pdu = get_inkey_response_611b,
	.pdu_len = sizeof(get_inkey_response_611b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
		{ .get_inkey = {
			.text = {
				.text = "+",
			},
		}},
	},
};

static const unsigned char get_inkey_response_711[] = {
	0x81, 0x03, 0x01, 0x22, 0x80, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x13,
};

static const struct terminal_response_test get_inkey_response_data_711 = {
	.pdu = get_inkey_response_711,
	.pdu_len = sizeof(get_inkey_response_711),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x80, /* Help information available */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_HELP_REQUESTED,
		},
	},
};

static const unsigned char get_inkey_response_712[] = {
	0x81, 0x03, 0x01, 0x22, 0x80, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x8d, 0x02, 0x04, 0x2b,
};

static const struct terminal_response_test get_inkey_response_data_712 = {
	.pdu = get_inkey_response_712,
	.pdu_len = sizeof(get_inkey_response_712),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x80, /* Help information available */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "+",
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_811 = {
	.pdu = get_inkey_response_811,
	.pdu_len = sizeof(get_inkey_response_811),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_RESPONSE,
		},
		{ .get_inkey = {
			.duration = {
				.unit = STK_DURATION_TYPE_SECONDS,
				.interval = 11,
			},
		}},
	},
};

static const unsigned char get_inkey_response_912[] = {
	0x81, 0x03, 0x01, 0x22, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x8d, 0x02, 0x04, 0x23,
};

static const struct terminal_response_test get_inkey_response_data_912 = {
	.pdu = get_inkey_response_912,
	.pdu_len = sizeof(get_inkey_response_912),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "#",
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_1111 = {
	.pdu = get_inkey_response_1111,
	.pdu_len = sizeof(get_inkey_response_1111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x03, /* UCS2 alphabet */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "好",
			},
		}},
	},
};

static const struct terminal_response_test get_inkey_response_data_1311 = {
	.pdu = get_inkey_response_1311,
	.pdu_len = sizeof(get_inkey_response_1311),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INKEY,
		.qualifier = 0x03, /* UCS2 alphabet */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_inkey = {
			.text = {
				.text = "ル",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_111 = {
	.pdu = get_input_response_111,
	.pdu_len = sizeof(get_input_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "12345",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_121 = {
	.pdu = get_input_response_121,
	.pdu_len = sizeof(get_input_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x08, /* Input is packed */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "67*#+",
				.packed = TRUE,
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_131 = {
	.pdu = get_input_response_131,
	.pdu_len = sizeof(get_input_response_131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x01, /* Allow all SMS characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "AbCdE",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_141 = {
	.pdu = get_input_response_141,
	.pdu_len = sizeof(get_input_response_141),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x04, /* Hide text */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "2345678",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_151 = {
	.pdu = get_input_response_151,
	.pdu_len = sizeof(get_input_response_151),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "12345678901234567890",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_161 = {
	.pdu = get_input_response_161,
	.pdu_len = sizeof(get_input_response_161),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_GO_BACK,
		},
	},
};

static const struct terminal_response_test get_input_response_data_171 = {
	.pdu = get_input_response_171,
	.pdu_len = sizeof(get_input_response_171),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_USER_TERMINATED,
		},
	},
};

static const struct terminal_response_test get_input_response_data_181 = {
	.pdu = get_input_response_181,
	.pdu_len = sizeof(get_input_response_181),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "***1111111111###***2222222222###"
					"***3333333333###***4444444444###"
					"***5555555555###***6666666666###"
					"***7777777777###***8888888888###"
					"***9999999999###***0000000000###",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_191 = {
	/* Either get_input_response_191a or get_input_response_191b is ok */
	.pdu = get_input_response_191a,
	.pdu_len = sizeof(get_input_response_191a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00, /* Allow all SMS characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_211 = {
	.pdu = get_input_response_211,
	.pdu_len = sizeof(get_input_response_211),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_RESPONSE,
		},
	},
};

static const struct terminal_response_test get_input_response_data_311 = {
	.pdu = get_input_response_311,
	.pdu_len = sizeof(get_input_response_311),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x01, /* Allow all SMS characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "HELLO",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_411 = {
	.pdu = get_input_response_411,
	.pdu_len = sizeof(get_input_response_411),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x03, /* Allow all UCS2 characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "ЗДРАВСТВУЙТЕ",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_421 = {
	.pdu = get_input_response_421,
	.pdu_len = sizeof(get_input_response_421),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x03, /* Allow all UCS2 characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "ЗДРАВСТВУЙТЕЗДРАВСТВУЙТЕ"
					"ЗДРАВСТВУЙТЕЗДРАВСТВУЙТЕ"
					"ЗДРАВСТВУЙТЕЗДРАВСТВУЙ",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_611a = {
	.pdu = get_input_response_611a,
	.pdu_len = sizeof(get_input_response_611a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "+",
			},
		}},
	},
};

static const unsigned char get_input_response_611b[] = {
	0x81, 0x03, 0x01, 0x23, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04, 0x8d, 0x02, 0x04, 0x2b,
};

static const struct terminal_response_test get_input_response_data_611b = {
	.pdu = get_input_response_611b,
	.pdu_len = sizeof(get_input_response_611b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
		{ .get_input = {
			.text = {
				.text = "+",
			},
		}},
	},
};

static const unsigned char get_input_response_711[] = {
	0x81, 0x03, 0x01, 0x23, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x13,
};

static const struct terminal_response_test get_input_response_data_711 = {
	.pdu = get_input_response_711,
	.pdu_len = sizeof(get_input_response_711),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_HELP_REQUESTED,
		},
	},
};

static const unsigned char get_input_response_812[] = {
	0x81, 0x03, 0x01, 0x23, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x8d, 0x06, 0x04, 0x32,
	0x32, 0x32, 0x32, 0x32,
};

static const struct terminal_response_test get_input_response_data_812 = {
	.pdu = get_input_response_812,
	.pdu_len = sizeof(get_input_response_812),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "22222",
			},
		}},
	},
};

static const unsigned char get_input_response_843[] = {
	0x81, 0x03, 0x01, 0x23, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x8d, 0x06, 0x04, 0x33,
	0x33, 0x33, 0x33, 0x33,
};

static const struct terminal_response_test get_input_response_data_843 = {
	.pdu = get_input_response_843,
	.pdu_len = sizeof(get_input_response_843),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "33333",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_1011 = {
	.pdu = get_input_response_1011,
	.pdu_len = sizeof(get_input_response_1011),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x03, /* Allow all UCS2 characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "你好",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_1021 = {
	.pdu = get_input_response_1021,
	.pdu_len = sizeof(get_input_response_1021),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x03, /* Allow all UCS2 characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "你好你好你好你好你好你好"
					"你好你好你好你好你好你好"
					"你好你好你好你好你好你好"
					"你好你好你好你好你好你好"
					"你好你好你好你好你好你好"
					"你好你好你好你好你好",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_1211 = {
	.pdu = get_input_response_1211,
	.pdu_len = sizeof(get_input_response_1211),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x03, /* Allow all UCS2 characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "ルル",
			},
		}},
	},
};

static const struct terminal_response_test get_input_response_data_1221 = {
	.pdu = get_input_response_1221,
	.pdu_len = sizeof(get_input_response_1221),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_INPUT,
		.qualifier = 0x03, /* Allow all UCS2 characters */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .get_input = {
			.text = {
				.text = "ルルルルルルルルルルルル"
					"ルルルルルルルルルルルル"
					"ルルルルルルルルルルルル"
					"ルルルルルルルルルルルル"
					"ルルルルルルルルルルルル"
					"ルルルルルルルルルル",
			},
		}},
	},
};

static const struct terminal_response_test more_time_response_data_111 = {
	.pdu = more_time_response_111,
	.pdu_len = sizeof(more_time_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_MORE_TIME,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char send_sms_response_111[] = {
	0x81, 0x03, 0x01, 0x13, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test send_sms_response_data_111 = {
	.pdu = send_sms_response_111,
	.pdu_len = sizeof(send_sms_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_SMS,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char send_sms_response_121[] = {
	0x81, 0x03, 0x01, 0x13, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test send_sms_response_data_121 = {
	.pdu = send_sms_response_121,
	.pdu_len = sizeof(send_sms_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_SMS,
		.qualifier = 0x01, /* Packing required */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char send_sms_response_311b[] = {
	0x81, 0x03, 0x01, 0x13, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04,
};

static const struct terminal_response_test send_sms_response_data_311b = {
	.pdu = send_sms_response_311b,
	.pdu_len = sizeof(send_sms_response_311b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_SMS,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
	},
};

static const struct terminal_response_test play_tone_response_data_111 = {
	.pdu = play_tone_response_111,
	.pdu_len = sizeof(play_tone_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PLAY_TONE,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char play_tone_response_119b[] = {
	0x81, 0x03, 0x01, 0x20, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x30,
};

static const struct terminal_response_test play_tone_response_data_119b = {
	.pdu = play_tone_response_119b,
	.pdu_len = sizeof(play_tone_response_119b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PLAY_TONE,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NOT_CAPABLE,
		},
	},
};

static const struct terminal_response_test play_tone_response_data_1114 = {
	.pdu = play_tone_response_1114,
	.pdu_len = sizeof(play_tone_response_1114),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PLAY_TONE,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_USER_TERMINATED,
		},
	},
};

static const unsigned char play_tone_response_311b[] = {
	0x81, 0x03, 0x01, 0x20, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04,
};

static const struct terminal_response_test play_tone_response_data_311b = {
	.pdu = play_tone_response_311b,
	.pdu_len = sizeof(play_tone_response_311b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PLAY_TONE,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
	},
};

static const struct terminal_response_test poll_interval_response_data_111 = {
	.pdu = poll_interval_response_111,
	.pdu_len = sizeof(poll_interval_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_POLL_INTERVAL,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .poll_interval = {
			.max_interval = {
				.unit = STK_DURATION_TYPE_SECONDS,
				.interval = 20,
			},
		}},
	},
};

/* 3GPP TS 31.124 */
static const unsigned char poll_interval_response_111a[] = {
	0x81, 0x03, 0x01, 0x03, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x84, 0x02, 0x00, 0x01,
};

static const struct terminal_response_test poll_interval_response_data_111a = {
	/* Either poll_interval_response_111a or b is ok */
	.pdu = poll_interval_response_111a,
	.pdu_len = sizeof(poll_interval_response_111a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_POLL_INTERVAL,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .poll_interval = {
			.max_interval = {
				.unit = STK_DURATION_TYPE_MINUTES,
				.interval = 1,
			},
		}},
	},
};

static const unsigned char refresh_response_111a[] = {
	0x81, 0x03, 0x01, 0x01, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test refresh_response_data_111a = {
	.pdu = refresh_response_111a,
	.pdu_len = sizeof(refresh_response_111a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x03, /* USIM Initialization */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char refresh_response_111b[] = {
	0x81, 0x03, 0x01, 0x01, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x03,
};

static const struct terminal_response_test refresh_response_data_111b = {
	.pdu = refresh_response_111b,
	.pdu_len = sizeof(refresh_response_111b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x03, /* USIM Initialization */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_REFRESH_WITH_EFS,
		},
	},
};

static const unsigned char refresh_response_121a[] = {
	0x81, 0x03, 0x01, 0x01, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test refresh_response_data_121a = {
	.pdu = refresh_response_121a,
	.pdu_len = sizeof(refresh_response_121a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x01, /* File Change Notification */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char refresh_response_121b[] = {
	0x81, 0x03, 0x01, 0x01, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x03,
};

static const struct terminal_response_test refresh_response_data_121b = {
	.pdu = refresh_response_121b,
	.pdu_len = sizeof(refresh_response_121b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x01, /* File Change Notification */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_REFRESH_WITH_EFS,
		},
	},
};

static const unsigned char refresh_response_131a[] = {
	0x81, 0x03, 0x01, 0x01, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test refresh_response_data_131a = {
	.pdu = refresh_response_131a,
	.pdu_len = sizeof(refresh_response_131a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x02, /* USIM Initialization & File Change */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char refresh_response_141a[] = {
	0x81, 0x03, 0x01, 0x01, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test refresh_response_data_141a = {
	.pdu = refresh_response_141a,
	.pdu_len = sizeof(refresh_response_141a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x00, /* USIM Initialization & Full File Change */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char refresh_response_141b[] = {
	0x81, 0x03, 0x01, 0x01, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x03,
};

static const struct terminal_response_test refresh_response_data_141b = {
	.pdu = refresh_response_141b,
	.pdu_len = sizeof(refresh_response_141b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x00, /* USIM Initialization & Full File Change */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_REFRESH_WITH_EFS,
		},
	},
};

static const unsigned char refresh_response_171[] = {
	0x81, 0x03, 0x01, 0x01, 0x05, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test refresh_response_data_171 = {
	.pdu = refresh_response_171,
	.pdu_len = sizeof(refresh_response_171),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x05, /* USIM Application Reset */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char refresh_response_241a[] = {
	0x81, 0x03, 0x01, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x02, 0x20, 0x02,
};

static const struct terminal_response_test refresh_response_data_241a = {
	.pdu = refresh_response_241a,
	.pdu_len = sizeof(refresh_response_241a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x06, /* 3G Session Reset */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TERMINAL_BUSY,
			.additional_len = 1, /* ME currently busy on call */
			.additional = (unsigned char *) "\2",
		},
	},
};

static const unsigned char refresh_response_241b[] = {
	0x81, 0x03, 0x01, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x02, 0x20, 0x01,
};

static const struct terminal_response_test refresh_response_data_241b = {
	.pdu = refresh_response_241b,
	.pdu_len = sizeof(refresh_response_241b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x06, /* 3G Session Reset */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TERMINAL_BUSY,
			.additional_len = 1, /* Screen is busy */
			.additional = (unsigned char *) "\1",
		},
	},
};

static const unsigned char refresh_response_311[] = {
	0x81, 0x03, 0x01, 0x01, 0x07, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x20,
};

static const struct terminal_response_test refresh_response_data_311 = {
	.pdu = refresh_response_311,
	.pdu_len = sizeof(refresh_response_311),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x07, /* Steering of roaming */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TERMINAL_BUSY,
		},
	},
};

static const unsigned char refresh_response_312[] = {
	0x81, 0x03, 0x01, 0x01, 0x07, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test refresh_response_data_312 = {
	.pdu = refresh_response_312,
	.pdu_len = sizeof(refresh_response_312),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_REFRESH,
		.qualifier = 0x07, /* Steering of roaming */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char set_up_menu_response_111[] = {
	0x81, 0x03, 0x01, 0x25, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test set_up_menu_response_data_111 = {
	.pdu = set_up_menu_response_111,
	.pdu_len = sizeof(set_up_menu_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_MENU,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char set_up_menu_response_411b[] = {
	0x81, 0x03, 0x01, 0x25, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04,
};

static const struct terminal_response_test set_up_menu_response_data_411b = {
	.pdu = set_up_menu_response_411b,
	.pdu_len = sizeof(set_up_menu_response_411b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_MENU,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
	},
};

static const unsigned char set_up_menu_response_511[] = {
	0x81, 0x03, 0x01, 0x25, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test set_up_menu_response_data_511 = {
	.pdu = set_up_menu_response_511,
	.pdu_len = sizeof(set_up_menu_response_511),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_MENU,
		.qualifier = 0x01, /* Soft key selection preferred */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char select_item_response_111[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x90, 0x01, 0x02,
};

static const struct terminal_response_test select_item_response_data_111 = {
	.pdu = select_item_response_111,
	.pdu_len = sizeof(select_item_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .select_item = {
			.item_id = 2,
		}},
	},
};

static const unsigned char select_item_response_121[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x90, 0x01, 0x3d,
};

static const struct terminal_response_test select_item_response_data_121 = {
	.pdu = select_item_response_121,
	.pdu_len = sizeof(select_item_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .select_item = {
			.item_id = 61,
		}},
	},
};

static const unsigned char select_item_response_131[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x90, 0x01, 0xfb,
};

static const struct terminal_response_test select_item_response_data_131 = {
	.pdu = select_item_response_131,
	.pdu_len = sizeof(select_item_response_131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .select_item = {
			.item_id = 251,
		}},
	},
};

static const unsigned char select_item_response_141[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x11,
};

static const struct terminal_response_test select_item_response_data_141 = {
	/* The response can be select_item_response_141 or it can optionally
	 * have an ITEM_ID data object appended with any id (90 01 XX).  */
	.pdu = select_item_response_141,
	.pdu_len = sizeof(select_item_response_141),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_GO_BACK,
		},
	},
};

static const unsigned char select_item_response_142[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x10,
};

static const struct terminal_response_test select_item_response_data_142 = {
	/* The response can be select_item_response_142 or it can optionally
	 * have an ITEM_ID data object appended with any id (90 01 XX).  */
	.pdu = select_item_response_142,
	.pdu_len = sizeof(select_item_response_142),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_USER_TERMINATED,
		},
	},
};

static const unsigned char select_item_response_151[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x90, 0x01, 0x01,
};

static const struct terminal_response_test select_item_response_data_151 = {
	.pdu = select_item_response_151,
	.pdu_len = sizeof(select_item_response_151),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .select_item = {
			.item_id = 1,
		}},
	},
};

static const unsigned char select_item_response_311[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x90, 0x01, 0x03,
};

static const struct terminal_response_test select_item_response_data_311 = {
	.pdu = select_item_response_311,
	.pdu_len = sizeof(select_item_response_311),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .select_item = {
			.item_id = 3,
		}},
	},
};

static const unsigned char select_item_response_411[] = {
	0x81, 0x03, 0x01, 0x24, 0x80, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x13, 0x90, 0x01, 0x01,
};

static const struct terminal_response_test select_item_response_data_411 = {
	.pdu = select_item_response_411,
	.pdu_len = sizeof(select_item_response_411),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x80, /* Help information available */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_HELP_REQUESTED,
		},
		{ .select_item = {
			.item_id = 1,
		}},
	},
};

static const unsigned char select_item_response_511b[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04, 0x90, 0x01, 0x01,
};

static const struct terminal_response_test select_item_response_data_511b = {
	.pdu = select_item_response_511b,
	.pdu_len = sizeof(select_item_response_511b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
		{ .select_item = {
			.item_id = 1,
		}},
	},
};

static const unsigned char select_item_response_611[] = {
	0x81, 0x03, 0x01, 0x24, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x90, 0x01, 0x01,
};

static const struct terminal_response_test select_item_response_data_611 = {
	.pdu = select_item_response_611,
	.pdu_len = sizeof(select_item_response_611),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x03, /* Choice of navigation options */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .select_item = {
			.item_id = 1,
		}},
	},
};

static const unsigned char select_item_response_621[] = {
	0x81, 0x03, 0x01, 0x24, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x90, 0x01, 0x01,
};

static const struct terminal_response_test select_item_response_data_621 = {
	.pdu = select_item_response_621,
	.pdu_len = sizeof(select_item_response_621),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x01, /* Choice of data values presentation */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .select_item = {
			.item_id = 1,
		}},
	},
};

static const unsigned char select_item_response_711[] = {
	0x81, 0x03, 0x01, 0x24, 0x04, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x90, 0x01, 0x01,
};

static const struct terminal_response_test select_item_response_data_711 = {
	.pdu = select_item_response_711,
	.pdu_len = sizeof(select_item_response_711),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x04, /* Selection using soft keys preferred */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .select_item = {
			.item_id = 1,
		}},
	},
};

static const unsigned char select_item_response_811[] = {
	0x81, 0x03, 0x01, 0x24, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x12,
};

static const struct terminal_response_test select_item_response_data_811 = {
	.pdu = select_item_response_811,
	.pdu_len = sizeof(select_item_response_811),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SELECT_ITEM,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_RESPONSE,
		},
	},
};

static const unsigned char set_up_call_response_111[] = {
	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test set_up_call_response_data_111 = {
	.pdu = set_up_call_response_111,
	.pdu_len = sizeof(set_up_call_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x00, /* Only if not busy on another call */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char set_up_call_response_121[] = {
	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x22,
};

static const struct terminal_response_test set_up_call_response_data_121 = {
	.pdu = set_up_call_response_121,
	.pdu_len = sizeof(set_up_call_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x00, /* Only if not busy on another call */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_USER_REJECT,
		},
	},
};

static const unsigned char set_up_call_response_141[] = {
	0x81, 0x03, 0x01, 0x10, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test set_up_call_response_data_141 = {
	.pdu = set_up_call_response_141,
	.pdu_len = sizeof(set_up_call_response_141),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x02, /* Put all other calls on hold */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char set_up_call_response_151[] = {
	0x81, 0x03, 0x01, 0x10, 0x04, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test set_up_call_response_data_151 = {
	.pdu = set_up_call_response_151,
	.pdu_len = sizeof(set_up_call_response_151),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x04, /* Disconnect all other calls */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char set_up_call_response_161[] = {
	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x02, 0x20, 0x02,
};

static const struct terminal_response_test set_up_call_response_data_161 = {
	.pdu = set_up_call_response_161,
	.pdu_len = sizeof(set_up_call_response_161),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x00, /* Only if not busy on another call */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TERMINAL_BUSY,
			.additional_len = 1, /* ME currently busy on call */
			.additional = (unsigned char[1]) { 0x02 },
		},
	},
};

static const unsigned char set_up_call_response_171a[] = {
	0x81, 0x03, 0x01, 0x10, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x02, 0x21, 0x00,
};

static const struct terminal_response_test set_up_call_response_data_171a = {
	.pdu = set_up_call_response_171a,
	.pdu_len = sizeof(set_up_call_response_171a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x02, /* Put all other calls on hold */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NETWORK_UNAVAILABLE,
			.additional_len = 1, /* No specific cause given */
			.additional = (unsigned char[1]) { 0x00 },
		},
	},
};

static const unsigned char set_up_call_response_171b[] = {
	0x81, 0x03, 0x01, 0x10, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x02, 0x21, 0x9d,
};

static const struct terminal_response_test set_up_call_response_data_171b = {
	.pdu = set_up_call_response_171b,
	.pdu_len = sizeof(set_up_call_response_171b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x02, /* Put all other calls on hold */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NETWORK_UNAVAILABLE,
			.additional_len = 1, /* Facility rejected */
			.additional = (unsigned char[1]) { 0x9d },
		},
	},
};

static const unsigned char set_up_call_response_1101[] = {
	0x81, 0x03, 0x01, 0x10, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test set_up_call_response_data_1101 = {
	.pdu = set_up_call_response_1101,
	.pdu_len = sizeof(set_up_call_response_1101),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x01, /* Only if not busy, with redial */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char set_up_call_response_1111b[] = {
	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x30,
};

static const struct terminal_response_test set_up_call_response_data_1111b = {
	.pdu = set_up_call_response_1111b,
	.pdu_len = sizeof(set_up_call_response_1111b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x00, /* Only if not busy on another call */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NOT_CAPABLE,
		},
	},
};

static const unsigned char set_up_call_response_1121[] = {
	0x81, 0x03, 0x01, 0x10, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x02, 0x21, 0x91,
};

static const struct terminal_response_test set_up_call_response_data_1121 = {
	.pdu = set_up_call_response_1121,
	.pdu_len = sizeof(set_up_call_response_1121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x01, /* Only if not busy, with redial */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NETWORK_UNAVAILABLE,
			.additional_len = 1, /* User busy */
			.additional = (unsigned char[1]) { 0x91 },
		},
	},
};

static const unsigned char set_up_call_response_311b[] = {
	0x81, 0x03, 0x01, 0x10, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04,
};

static const struct terminal_response_test set_up_call_response_data_311b = {
	.pdu = set_up_call_response_311b,
	.pdu_len = sizeof(set_up_call_response_311b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_CALL,
		.qualifier = 0x00, /* Only if not busy on another call */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
	},
};

static const unsigned char polling_off_response_112[] = {
	0x81, 0x03, 0x01, 0x04, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test polling_off_response_data_112 = {
	.pdu = polling_off_response_112,
	.pdu_len = sizeof(polling_off_response_112),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_POLLING_OFF,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char provide_local_info_response_111a[] = {
	0x81, 0x03, 0x01, 0x26, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x93, 0x07, 0x00, 0xf1,
	0x10, 0x00, 0x01, 0x00, 0x01,
};

static const struct terminal_response_test
		provide_local_info_response_data_111a = {
	.pdu = provide_local_info_response_111a,
	.pdu_len = sizeof(provide_local_info_response_111a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x00, /* Location information (MCC MNC LAC CI) */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .location = {
				.mcc = "001",
				.mnc = "01",
				.lac_tac = 0x0001,
				.has_ci = TRUE,
				.ci = 0x0001,
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_111b[] = {
	0x81, 0x03, 0x01, 0x26, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x93, 0x07, 0x00, 0x11,
	0x10, 0x00, 0x01, 0x00, 0x01,
};

static const struct terminal_response_test
		provide_local_info_response_data_111b = {
	.pdu = provide_local_info_response_111b,
	.pdu_len = sizeof(provide_local_info_response_111b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x00, /* Location information (MCC MNC LAC CI) */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .location = {
				.mcc = "001",
				.mnc = "011",
				.lac_tac = 0x0001,
				.has_ci = TRUE,
				.ci = 0x0001,
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_121[] = {
	0x81, 0x03, 0x01, 0x26, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x94, 0x08, 0x1a, 0x32,
	0x54, 0x76, 0x98, 0x10, 0x32, 0x54, /* Typo in TS 102 384? */
};

static const struct terminal_response_test
		provide_local_info_response_data_121 = {
	.pdu = provide_local_info_response_121,
	.pdu_len = sizeof(provide_local_info_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x01, /* IMEI of the Terminal */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .imei = "123456789012345", }
		}},
	},
};

static const unsigned char provide_local_info_response_131[] = {
	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x96, 0x10, 0x34, 0x34,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x0d,
	0x8c, 0x63, 0x58, 0xe2, 0x39, 0x8f, 0x63, 0xf9,
	0x06, 0x45, 0x91, 0xa4, 0x90,
};

static const struct terminal_response_test
		provide_local_info_response_data_131 = {
	.pdu = provide_local_info_response_131,
	.pdu_len = sizeof(provide_local_info_response_131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x02, /* Network Measurement Results */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .nmr = {
				.nmr = {
					/* RXLEV-FULL-SERVING-CELL=52, no BA,
					 * no DTX */
					.array = (unsigned char[16]) {
						0x34, 0x34, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00,
						0x00, 0x00, 0x00, 0x00,
					},
					.len = 16,
				},
				.bcch_ch_list = {
					.channels = {
						561, 565, 568, 569, 573,
						575, 577, 581, 582, 585,
					},
					.num = 10,
					.has_list = TRUE,
				},
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_141[] = {
	0x81, 0x03, 0x01, 0x26, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa6, 0x07, 0x20, 0x50,
	0x70, 0x41, 0x80, 0x71, 0xff,
};

static const struct terminal_response_test
		provide_local_info_response_data_141 = {
	.pdu = provide_local_info_response_141,
	.pdu_len = sizeof(provide_local_info_response_141),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x03, /* Date Time and Time Zone */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .datetime = {
				.year = 2, /* 2002 - 1900 - 100 */
				.month = 5,
				.day = 7,
				.hour = 14,
				.minute = 8,
				.second = 17,
				.timezone = 0xff, /* No information */
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_151[] = {
	0x81, 0x03, 0x01, 0x26, 0x04, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xad, 0x02, 0x65, 0x6e,
};

static const struct terminal_response_test
		provide_local_info_response_data_151 = {
	.pdu = provide_local_info_response_151,
	.pdu_len = sizeof(provide_local_info_response_151),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x04, /* Language setting */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .language = "en", }
		}},
	},
};

static const unsigned char provide_local_info_response_161[] = {
	0x81, 0x03, 0x01, 0x26, 0x05, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xae, 0x02, 0x00, 0x00,
};

static const struct terminal_response_test
		provide_local_info_response_data_161 = {
	.pdu = provide_local_info_response_161,
	.pdu_len = sizeof(provide_local_info_response_161),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x05, /* Timing Advance */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .tadv = {
				.status = STK_ME_STATUS_IDLE,
				.advance = 0,
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_171[] = {
	0x81, 0x03, 0x01, 0x26, 0x06, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x3f, 0x01, 0x03,
};

static const struct terminal_response_test
		provide_local_info_response_data_171 = {
	.pdu = provide_local_info_response_171,
	.pdu_len = sizeof(provide_local_info_response_171),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x06, /* Access technology */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .access_technology = STK_ACCESS_TECHNOLOGY_UTRAN, }
		}},
	},
};

static const unsigned char provide_local_info_response_181[] = {
	0x81, 0x03, 0x01, 0x26, 0x07, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xc6, 0x04, 0x01, 0x02,
	0x03, 0x04,
};

static const struct terminal_response_test
		provide_local_info_response_data_181 = {
	.pdu = provide_local_info_response_181,
	.pdu_len = sizeof(provide_local_info_response_181),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x07, /* ESN of the terminal */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .esn = 0x01020304, }
		}},
	},
};

static const unsigned char provide_local_info_response_191[] = {
	0x81, 0x03, 0x01, 0x26, 0x08, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xe2, 0x09, 0x13, 0x32,
	0x54, 0x76, 0x98, 0x10, 0x32, 0x54, 0xf6,
};

static const struct terminal_response_test
		provide_local_info_response_data_191 = {
	.pdu = provide_local_info_response_191,
	.pdu_len = sizeof(provide_local_info_response_191),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x08, /* IMEISV of the terminal */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .imeisv = "1234567890123456", }
		}},
	},
};

static const unsigned char provide_local_info_response_1111[] = {
	0x81, 0x03, 0x01, 0x26, 0x0a, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xe3, 0x01, 0x04,
};

static const struct terminal_response_test
		provide_local_info_response_data_1111 = {
	.pdu = provide_local_info_response_1111,
	.pdu_len = sizeof(provide_local_info_response_1111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x0a, /* Charge state of the battery */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .battery_charge = STK_BATTERY_FULL, }
		}},
	},
};

static const unsigned char provide_local_info_response_1121[] = {
	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x96, 0x02, 0x80, 0x00,
	/* Intra-frequency UTRAN Measurement report in ASN.1 goes here */
	/* "The remaining bytes shall not be verified" */
};

static const struct terminal_response_test
		provide_local_info_response_data_1121 = {
	.pdu = provide_local_info_response_1121,
	.pdu_len = sizeof(provide_local_info_response_1121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x02, /* Network Measurement Results */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .nmr = {
				.nmr = {
					.array = (unsigned char[2])
						{ 0x80, 0x00 },
					.len = 2,
				},
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_1131[] = {
	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x96, 0x02, 0x80, 0x11,
	/* Inter-frequency UTRAN Measurement report in ASN.1 goes here */
	/* "The remaining bytes shall not be verified" */
};

static const struct terminal_response_test
		provide_local_info_response_data_1131 = {
	.pdu = provide_local_info_response_1131,
	.pdu_len = sizeof(provide_local_info_response_1131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x02, /* Network Measurement Results */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .nmr = {
				.nmr = {
					.array = (unsigned char[2])
						{ 0x80, 0x11},
					.len = 2,
				},
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_1141[] = {
	0x81, 0x03, 0x01, 0x26, 0x06, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x3f, 0x01, 0x08,
};

static const struct terminal_response_test
		provide_local_info_response_data_1141 = {
	.pdu = provide_local_info_response_1141,
	.pdu_len = sizeof(provide_local_info_response_1141),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x06, /* Access technology */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .access_technology = STK_ACCESS_TECHNOLOGY_EUTRAN, }
		}},
	},
};

static const unsigned char provide_local_info_response_1151[] = {
	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x96, 0x02, 0x80, 0x00,
	/* Intra-frequency E-UTRAN Measurement report in ASN.1 goes here */
	/* "The remaining bytes shall not be verified" */
};

static const struct terminal_response_test
		provide_local_info_response_data_1151 = {
	.pdu = provide_local_info_response_1151,
	.pdu_len = sizeof(provide_local_info_response_1151),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x02, /* Network Measurement Results */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .nmr = {
				.nmr = {
					.array = (unsigned char[2])
						{ 0x80, 0x00},
					.len = 2,
				},
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_1161[] = {
	0x81, 0x03, 0x01, 0x26, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x96, 0x02, 0x80, 0x11,
	/* Inter-frequency E-UTRAN Measurement report in ASN.1 goes here */
	/* "The remaining bytes shall not be verified" */
};

static const struct terminal_response_test
		provide_local_info_response_data_1161 = {
	.pdu = provide_local_info_response_1161,
	.pdu_len = sizeof(provide_local_info_response_1161),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x02, /* Network Measurement Results */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .nmr = {
				.nmr = {
					.array = (unsigned char[2])
						{ 0x80, 0x11},
					.len = 2,
				},
			}},
		}},
	},
};

static const unsigned char provide_local_info_response_1171[] = {
	0x81, 0x03, 0x01, 0x26, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0x93, 0x09, 0x00, 0xf1,
	0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f,
	/* Typo in TS 102 223?  Byte 18 changed to 01 here */
};

static const struct terminal_response_test
		provide_local_info_response_data_1171 = {
	.pdu = provide_local_info_response_1171,
	.pdu_len = sizeof(provide_local_info_response_1171),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO,
		.qualifier = 0x00, /* Location information (MCC MNC LAC CI) */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .provide_local_info = {
			{ .location = {
				.mcc = "001",
				.mnc = "01",
				.lac_tac = 0x0001,
				.has_eutran_ci = TRUE,
				.eutran_ci = 0x0000001,
			}},
		}},
	},
};

static const unsigned char set_up_event_list_response_111[] = {
	0x81, 0x03, 0x01, 0x05, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test
		set_up_event_list_response_data_111 = {
	.pdu = set_up_event_list_response_111,
	.pdu_len = sizeof(set_up_event_list_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_EVENT_LIST,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char timer_mgmt_response_111[] = {
	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x01,
};

static const struct terminal_response_test timer_mgmt_response_data_111 = {
	.pdu = timer_mgmt_response_111,
	.pdu_len = sizeof(timer_mgmt_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x00, /* Start the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 1,
		}},
	},
};

static const unsigned char timer_mgmt_response_112[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x01, 0xa5,
	0x03, 0x00, 0x30, 0x95,
};

static const struct terminal_response_test timer_mgmt_response_data_112 = {
	.pdu = timer_mgmt_response_112,
	.pdu_len = sizeof(timer_mgmt_response_112),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 1,
			.value = {
				.minute = 3,
				.second = 59,
				.has_value = TRUE,
			},
		}},
	},
};

static const unsigned char timer_mgmt_response_114[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x01, 0xa5,
	0x03, 0x00, 0x00, 0x95,
};

static const struct terminal_response_test timer_mgmt_response_data_114 = {
	.pdu = timer_mgmt_response_114,
	.pdu_len = sizeof(timer_mgmt_response_114),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 1,
			.value = {
				.second = 59,
				.has_value = TRUE,
			},
		}},
	},
};

static const unsigned char timer_mgmt_response_121[] = {
	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x02,
};

static const struct terminal_response_test timer_mgmt_response_data_121 = {
	.pdu = timer_mgmt_response_121,
	.pdu_len = sizeof(timer_mgmt_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x00, /* Start the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 2,
		}},
	},
};

static const unsigned char timer_mgmt_response_122[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x02, 0xa5,
	0x03, 0x32, 0x85, 0x85,
};

static const struct terminal_response_test timer_mgmt_response_data_122 = {
	.pdu = timer_mgmt_response_122,
	.pdu_len = sizeof(timer_mgmt_response_122),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 2,
			.value = {
				.hour = 23,
				.minute = 58,
				.second = 58,
				.has_value = TRUE,
			},
		}},
	},
};

static const unsigned char timer_mgmt_response_124[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x02, 0xa5,
	0x03, 0x00, 0x00, 0x95,
};

static const struct terminal_response_test timer_mgmt_response_data_124 = {
	.pdu = timer_mgmt_response_124,
	.pdu_len = sizeof(timer_mgmt_response_124),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 2,
			.value = {
				.second = 59,
				.has_value = TRUE,
			},
		}},
	},
};

static const unsigned char timer_mgmt_response_131[] = {
	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x08,
};

static const struct terminal_response_test timer_mgmt_response_data_131 = {
	.pdu = timer_mgmt_response_131,
	.pdu_len = sizeof(timer_mgmt_response_131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x00, /* Start the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 8,
		}},
	},
};

static const unsigned char timer_mgmt_response_132[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x08, 0xa5,
	0x03, 0x00, 0x81, 0x95,
};

static const struct terminal_response_test timer_mgmt_response_data_132 = {
	.pdu = timer_mgmt_response_132,
	.pdu_len = sizeof(timer_mgmt_response_132),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 8,
			.value = {
				.minute = 18,
				.second = 59,
				.has_value = TRUE,
			},
		}},
	},
};

static const unsigned char timer_mgmt_response_134[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x08, 0xa5,
	0x03, 0x00, 0x95, 0x92,
};

static const struct terminal_response_test timer_mgmt_response_data_134 = {
	.pdu = timer_mgmt_response_134,
	.pdu_len = sizeof(timer_mgmt_response_134),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 8,
			.value = {
				.minute = 59,
				.second = 29,
				.has_value = TRUE,
			},
		}},
	},
};

static const unsigned char timer_mgmt_response_141a[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x01,
};

static const struct terminal_response_test timer_mgmt_response_data_141a = {
	.pdu = timer_mgmt_response_141a,
	.pdu_len = sizeof(timer_mgmt_response_141a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 1,
		}},
	},
};

static const unsigned char timer_mgmt_response_141b[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24,
};

static const struct terminal_response_test timer_mgmt_response_data_141b = {
	.pdu = timer_mgmt_response_141b,
	.pdu_len = sizeof(timer_mgmt_response_141b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
	},
};

static const unsigned char timer_mgmt_response_142a[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x02,
};

static const struct terminal_response_test timer_mgmt_response_data_142a = {
	.pdu = timer_mgmt_response_142a,
	.pdu_len = sizeof(timer_mgmt_response_142a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 2,
		}},
	},
};

static const unsigned char timer_mgmt_response_143a[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x03,
};

static const struct terminal_response_test timer_mgmt_response_data_143a = {
	.pdu = timer_mgmt_response_143a,
	.pdu_len = sizeof(timer_mgmt_response_143a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 3,
		}},
	},
};

static const unsigned char timer_mgmt_response_144a[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x04,
};

static const struct terminal_response_test timer_mgmt_response_data_144a = {
	.pdu = timer_mgmt_response_144a,
	.pdu_len = sizeof(timer_mgmt_response_144a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 4,
		}},
	},
};

static const unsigned char timer_mgmt_response_145a[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x05,
};

static const struct terminal_response_test timer_mgmt_response_data_145a = {
	.pdu = timer_mgmt_response_145a,
	.pdu_len = sizeof(timer_mgmt_response_145a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 5,
		}},
	},
};

static const unsigned char timer_mgmt_response_146a[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x06,
};

static const struct terminal_response_test timer_mgmt_response_data_146a = {
	.pdu = timer_mgmt_response_146a,
	.pdu_len = sizeof(timer_mgmt_response_146a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 6,
		}},
	},
};

static const unsigned char timer_mgmt_response_147a[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x07,
};

static const struct terminal_response_test timer_mgmt_response_data_147a = {
	.pdu = timer_mgmt_response_147a,
	.pdu_len = sizeof(timer_mgmt_response_147a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 7,
		}},
	},
};

static const unsigned char timer_mgmt_response_148a[] = {
	0x81, 0x03, 0x01, 0x27, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x08,
};

static const struct terminal_response_test timer_mgmt_response_data_148a = {
	.pdu = timer_mgmt_response_148a,
	.pdu_len = sizeof(timer_mgmt_response_148a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x02, /* Get the current value of the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 8,
		}},
	},
};

static const unsigned char timer_mgmt_response_151a[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x01,
};

static const struct terminal_response_test timer_mgmt_response_data_151a = {
	.pdu = timer_mgmt_response_151a,
	.pdu_len = sizeof(timer_mgmt_response_151a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 1,
		}},
	},
};

static const unsigned char timer_mgmt_response_151b[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24,
};

static const struct terminal_response_test timer_mgmt_response_data_151b = {
	.pdu = timer_mgmt_response_151b,
	.pdu_len = sizeof(timer_mgmt_response_151b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
	},
};

static const unsigned char timer_mgmt_response_152a[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x02,
};

static const struct terminal_response_test timer_mgmt_response_data_152a = {
	.pdu = timer_mgmt_response_152a,
	.pdu_len = sizeof(timer_mgmt_response_152a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 2,
		}},
	},
};

static const unsigned char timer_mgmt_response_153a[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x03,
};

static const struct terminal_response_test timer_mgmt_response_data_153a = {
	.pdu = timer_mgmt_response_153a,
	.pdu_len = sizeof(timer_mgmt_response_153a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 3,
		}},
	},
};

static const unsigned char timer_mgmt_response_154a[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x04,
};

static const struct terminal_response_test timer_mgmt_response_data_154a = {
	.pdu = timer_mgmt_response_154a,
	.pdu_len = sizeof(timer_mgmt_response_154a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 4,
		}},
	},
};

static const unsigned char timer_mgmt_response_155a[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x05,
};

static const struct terminal_response_test timer_mgmt_response_data_155a = {
	.pdu = timer_mgmt_response_155a,
	.pdu_len = sizeof(timer_mgmt_response_155a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 5,
		}},
	},
};

static const unsigned char timer_mgmt_response_156a[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x06,
};

static const struct terminal_response_test timer_mgmt_response_data_156a = {
	.pdu = timer_mgmt_response_156a,
	.pdu_len = sizeof(timer_mgmt_response_156a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 6,
		}},
	},
};

static const unsigned char timer_mgmt_response_157a[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x07,
};

static const struct terminal_response_test timer_mgmt_response_data_157a = {
	.pdu = timer_mgmt_response_157a,
	.pdu_len = sizeof(timer_mgmt_response_157a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 7,
		}},
	},
};

static const unsigned char timer_mgmt_response_158a[] = {
	0x81, 0x03, 0x01, 0x27, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x24, 0xa4, 0x01, 0x08,
};

static const struct terminal_response_test timer_mgmt_response_data_158a = {
	.pdu = timer_mgmt_response_158a,
	.pdu_len = sizeof(timer_mgmt_response_158a),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x01, /* Deactivate the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TIMER_CONFLICT,
		},
		{ .timer_mgmt = {
			.id = 8,
		}},
	},
};

static const unsigned char timer_mgmt_response_163[] = {
	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x03,
};

static const struct terminal_response_test timer_mgmt_response_data_163 = {
	.pdu = timer_mgmt_response_163,
	.pdu_len = sizeof(timer_mgmt_response_163),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x00, /* Start the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 3,
		}},
	},
};

static const unsigned char timer_mgmt_response_164[] = {
	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x04,
};

static const struct terminal_response_test timer_mgmt_response_data_164 = {
	.pdu = timer_mgmt_response_164,
	.pdu_len = sizeof(timer_mgmt_response_164),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x00, /* Start the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 4,
		}},
	},
};

static const unsigned char timer_mgmt_response_165[] = {
	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x05,
};

static const struct terminal_response_test timer_mgmt_response_data_165 = {
	.pdu = timer_mgmt_response_165,
	.pdu_len = sizeof(timer_mgmt_response_165),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x00, /* Start the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 5,
		}},
	},
};

static const unsigned char timer_mgmt_response_166[] = {
	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x06,
};

static const struct terminal_response_test timer_mgmt_response_data_166 = {
	.pdu = timer_mgmt_response_166,
	.pdu_len = sizeof(timer_mgmt_response_166),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x00, /* Start the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 6,
		}},
	},
};

static const unsigned char timer_mgmt_response_167[] = {
	0x81, 0x03, 0x01, 0x27, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xa4, 0x01, 0x07,
};

static const struct terminal_response_test timer_mgmt_response_data_167 = {
	.pdu = timer_mgmt_response_167,
	.pdu_len = sizeof(timer_mgmt_response_167),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_TIMER_MANAGEMENT,
		.qualifier = 0x00, /* Start the Timer */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .timer_mgmt = {
			.id = 7,
		}},
	},
};

static const unsigned char set_up_idle_mode_text_response_111[] = {
	0x81, 0x03, 0x01, 0x28, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test
		set_up_idle_mode_text_response_data_111 = {
	.pdu = set_up_idle_mode_text_response_111,
	.pdu_len = sizeof(set_up_idle_mode_text_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char set_up_idle_mode_text_response_211b[] = {
	0x81, 0x03, 0x01, 0x28, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04,
};

static const struct terminal_response_test
		set_up_idle_mode_text_response_data_211b = {
	.pdu = set_up_idle_mode_text_response_211b,
	.pdu_len = sizeof(set_up_idle_mode_text_response_211b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
	},
};

static const unsigned char set_up_idle_mode_text_response_241[] = {
	0x81, 0x03, 0x01, 0x28, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x32,
};

static const struct terminal_response_test
		set_up_idle_mode_text_response_data_241 = {
	.pdu = set_up_idle_mode_text_response_241,
	.pdu_len = sizeof(set_up_idle_mode_text_response_241),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_DATA_NOT_UNDERSTOOD,
		},
	},
};

static const unsigned char run_at_command_response_111[] = {
	0x81, 0x03, 0x01, 0x34, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00, 0xA9, 0x05, 0x2b, 0x43,
	0x47, 0x4d, 0x49,
};

static const struct terminal_response_test run_at_command_response_data_111 = {
	.pdu = run_at_command_response_111,
	.pdu_len = sizeof(run_at_command_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_RUN_AT_COMMAND,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .run_at_command = {
			.at_response = "+CGMI",
		}},
	},
};

static const unsigned char run_at_command_response_211b[] = {
	0x81, 0x03, 0x01, 0x34, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04, 0xA9, 0x05, 0x2b, 0x43,
	0x47, 0x4d, 0x49,
};

static const struct terminal_response_test run_at_command_response_data_211b = {
	.pdu = run_at_command_response_211b,
	.pdu_len = sizeof(run_at_command_response_211b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_RUN_AT_COMMAND,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
		{ .run_at_command = {
			.at_response = "+CGMI",
		}},
	},
};

static const unsigned char run_at_command_response_251[] = {
	0x81, 0x03, 0x01, 0x34, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x32,
};

static const struct terminal_response_test run_at_command_response_data_251 = {
	.pdu = run_at_command_response_251,
	.pdu_len = sizeof(run_at_command_response_251),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_RUN_AT_COMMAND,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_DATA_NOT_UNDERSTOOD,
		},
	},
};

static const unsigned char send_dtmf_response_111[] = {
	0x81, 0x03, 0x01, 0x14, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test send_dtmf_response_data_111 = {
	.pdu = send_dtmf_response_111,
	.pdu_len = sizeof(send_dtmf_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_DTMF,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char send_dtmf_response_141[] = {
	0x81, 0x03, 0x01, 0x14, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x02, 0x20, 0x07,
};

static const struct terminal_response_test send_dtmf_response_data_141 = {
	.pdu = send_dtmf_response_141,
	.pdu_len = sizeof(send_dtmf_response_141),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_DTMF,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_TERMINAL_BUSY,
			.additional_len = 1, /* Not in speech call */
			.additional = (unsigned char[1]) { 0x07 },
		},
	},
};

static const unsigned char send_dtmf_response_211b[] = {
	0x81, 0x03, 0x01, 0x14, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04,
};

static const struct terminal_response_test send_dtmf_response_data_211b = {
	.pdu = send_dtmf_response_211b,
	.pdu_len = sizeof(send_dtmf_response_211b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_DTMF,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
	},
};

static const unsigned char language_notification_response_111[] = {
	0x81, 0x03, 0x01, 0x35, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test
		language_notification_response_data_111 = {
	.pdu = language_notification_response_111,
	.pdu_len = sizeof(language_notification_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_LANGUAGE_NOTIFICATION,
		.qualifier = 0x01,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char language_notification_response_121[] = {
	0x81, 0x03, 0x01, 0x35, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test
		language_notification_response_data_121 = {
	.pdu = language_notification_response_121,
	.pdu_len = sizeof(language_notification_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_LANGUAGE_NOTIFICATION,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char launch_browser_response_111[] = {
	0x81, 0x03, 0x01, 0x15, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test launch_browser_response_data_111 = {
	.pdu = launch_browser_response_111,
	.pdu_len = sizeof(launch_browser_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
		.qualifier = 0x00, /* Launch browser, if not running */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char launch_browser_response_211[] = {
	0x81, 0x03, 0x01, 0x15, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test launch_browser_response_data_211 = {
	.pdu = launch_browser_response_211,
	.pdu_len = sizeof(launch_browser_response_211),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
		.qualifier = 0x02, /* Use the existing browser */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char launch_browser_response_221[] = {
	0x81, 0x03, 0x01, 0x15, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x00,
};

static const struct terminal_response_test launch_browser_response_data_221 = {
	.pdu = launch_browser_response_221,
	.pdu_len = sizeof(launch_browser_response_221),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
		.qualifier = 0x03, /* Re-start browser session */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
	},
};

static const unsigned char launch_browser_response_231[] = {
	0x81, 0x03, 0x01, 0x15, 0x00, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x02, 0x26, 0x02,
};

static const struct terminal_response_test launch_browser_response_data_231 = {
	.pdu = launch_browser_response_231,
	.pdu_len = sizeof(launch_browser_response_231),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
		.qualifier = 0x00, /* Launch browser, if not running */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_BROWSER_TEMPORARY,
			.additional_len = 1, /* Browser unavailable */
			.additional = (unsigned char[1]) { 0x02 },
		},
	},
};

static const unsigned char launch_browser_response_411b[] = {
	0x81, 0x03, 0x01, 0x15, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x83, 0x01, 0x04,
};

static const struct terminal_response_test launch_browser_response_data_411b = {
	.pdu = launch_browser_response_411b,
	.pdu_len = sizeof(launch_browser_response_411b),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_LAUNCH_BROWSER,
		.qualifier = 0x02, /* Use the existing browser */
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_NO_ICON,
		},
	},
};

static const unsigned char open_channel_response_211[] = {
		0x81, 0x03, 0x01, 0x40, 0x01, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x01, 0x00, 0x38, 0x02, 0x81, 0x00, 0x35, 0x07, 0x02, 0x03,
		0x04, 0x03, 0x04, 0x1F, 0x02, 0x39, 0x02, 0x05, 0x78,
};

static const struct terminal_response_test open_channel_response_data_211 = {
	.pdu = open_channel_response_211,
	.pdu_len = sizeof(open_channel_response_211),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_OPEN_CHANNEL,
		.qualifier = STK_OPEN_CHANNEL_FLAG_IMMEDIATE,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .open_channel = {
			.channel = {
			.id = 1,
			.status = STK_CHANNEL_PACKET_DATA_SERVICE_ACTIVATED,
			},
			.bearer_desc = {
					.type = STK_BEARER_TYPE_GPRS_UTRAN,
					.gprs = {
						.precedence = 3,
						.delay = 4,
						.reliability = 3,
						.peak = 4,
						.mean = 31,
						.pdp_type = 2,
					},
			},
			.buf_size = 1400,
		} },
	},
};

static const unsigned char open_channel_response_271[] = {
		0x81, 0x03, 0x01, 0x40, 0x01, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x01, 0x22, 0x35, 0x07, 0x02, 0x03, 0x04, 0x03, 0x04, 0x1F,
		0x02, 0x39, 0x02, 0x05, 0x78,
};

static const struct terminal_response_test open_channel_response_data_271 = {
	.pdu = open_channel_response_271,
	.pdu_len = sizeof(open_channel_response_271),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_OPEN_CHANNEL,
		.qualifier = STK_OPEN_CHANNEL_FLAG_IMMEDIATE,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_USER_REJECT,
		},
		{ .open_channel = {
			.bearer_desc = {
					.type = STK_BEARER_TYPE_GPRS_UTRAN,
					.gprs = {
						.precedence = 3,
						.delay = 4,
						.reliability = 3,
						.peak = 4,
						.mean = 31,
						.pdp_type = 2,
					},
			},
			.buf_size = 1400,
		} },
	},
};

static const unsigned char close_channel_response_121[] = {
		0x81, 0x03, 0x01, 0x41, 0x00, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x02, 0x3A, 0x03,
};

static const struct terminal_response_test close_channel_response_data_121 = {
	.pdu = close_channel_response_121,
	.pdu_len = sizeof(close_channel_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_CLOSE_CHANNEL,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_BIP_ERROR,
			.additional_len = 1, /* Channel identifier not valid */
			.additional = (unsigned char[1]) { 0x03 },
		},
	},
};

static const unsigned char close_channel_response_131[] = {
		0x81, 0x03, 0x01, 0x41, 0x00, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x02, 0x3A, 0x02,
};

static const struct terminal_response_test close_channel_response_data_131 = {
	.pdu = close_channel_response_131,
	.pdu_len = sizeof(close_channel_response_131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_CLOSE_CHANNEL,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_BIP_ERROR,
			.additional_len = 1, /* Channel already closed */
			.additional = (unsigned char[1]) { 0x02 },
		},
	},
};

static const unsigned char receive_data_response_111[] = {
		0x81, 0x03, 0x01, 0x42, 0x00, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x01, 0x00, 0xB6, 0x81, 0xC8, 0xc8, 0xc9, 0xca, 0xcb, 0xcc,
		0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
		0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
		0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
		0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4,
		0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe,
		0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
		0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
		0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c,
		0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
		0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
		0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,
		0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44,
		0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e,
		0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
		0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62,
		0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c,
		0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
		0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
		0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a,
		0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0xB7, 0x01, 0xFF,
};

static const struct terminal_response_test receive_data_response_data_111 = {
	.pdu = receive_data_response_111,
	.pdu_len = sizeof(receive_data_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_RECEIVE_DATA,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .receive_data = {
				.rx_data = {
					.array = (unsigned char[200]) {
					0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd,
					0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3,
					0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
					0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
					0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5,
					0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
					0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1,
					0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
					0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd,
					0xfe, 0xff, 0x00, 0x01, 0x02, 0x03,
					0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
					0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
					0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
					0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,
					0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21,
					0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
					0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
					0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
					0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
					0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
					0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
					0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b,
					0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
					0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
					0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d,
					0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63,
					0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
					0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
					0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
					0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b,
					0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81,
					0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
					0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d,
					0x8e, 0x8f,
					},
					.len = 200,
				},
				.rx_remaining = 0xFF,
		} },
	},
};

static const unsigned char send_data_response_111[] = {
		0x81, 0x03, 0x01, 0x43, 0x01, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x01, 0x00, 0xB7, 0x01, 0xFF,
};

static const struct terminal_response_test send_data_response_data_111 = {
	.pdu = send_data_response_111,
	.pdu_len = sizeof(send_data_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_DATA,
		.qualifier = STK_SEND_DATA_IMMEDIATELY,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .send_data = {
				/* More than 255 bytes of space available */
				.tx_avail = 0xFF,
		} },
	},
};

static const unsigned char send_data_response_121[] = {
		0x81, 0x03, 0x01, 0x43, 0x00, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x01, 0x00, 0xB7, 0x01, 0xFF,
};

static const struct terminal_response_test send_data_response_data_121 = {
	.pdu = send_data_response_121,
	.pdu_len = sizeof(send_data_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_DATA,
		.qualifier = STK_SEND_DATA_STORE_DATA,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .send_data = {
				/* More than 255 bytes of space available */
				.tx_avail = 0xFF,
		} },
	},
};

static const unsigned char send_data_response_151[] = {
		0x81, 0x03, 0x01, 0x43, 0x01, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x02, 0x3A, 0x03,
};

static const struct terminal_response_test send_data_response_data_151 = {
	.pdu = send_data_response_151,
	.pdu_len = sizeof(send_data_response_151),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_SEND_DATA,
		.qualifier = STK_SEND_DATA_IMMEDIATELY,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_BIP_ERROR,
			.additional_len = 1, /* Channel identifier not valid */
			.additional = (unsigned char[1]) { 0x03 },
		},
	},
};

static const unsigned char get_channel_status_response_111[] = {
		0x81, 0x03, 0x01, 0x44, 0x00, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x01, 0x00, 0xB8, 0x02, 0x00, 0x00,
};

static const struct terminal_response_test
				get_channel_status_response_data_111 = {
	.pdu = get_channel_status_response_111,
	.pdu_len = sizeof(get_channel_status_response_111),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_CHANNEL_STATUS,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .channel_status = {
			/*
			 * No Channel available, link not established or
			 * PDP context not activated
			 */
			.channel = {
				.id = 0,
				.status =
				STK_CHANNEL_PACKET_DATA_SERVICE_NOT_ACTIVATED,
			}
		} },
	},
};

static const unsigned char get_channel_status_response_121[] = {
		0x81, 0x03, 0x01, 0x44, 0x00, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x01, 0x00, 0xB8, 0x02, 0x81, 0x00,
};

static const struct terminal_response_test
				get_channel_status_response_data_121 = {
	.pdu = get_channel_status_response_121,
	.pdu_len = sizeof(get_channel_status_response_121),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_CHANNEL_STATUS,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .channel_status = {
		/* Channel 1 open, link established or PDP context activated */
			.channel = {
				.id = 1,
				.status =
				STK_CHANNEL_PACKET_DATA_SERVICE_ACTIVATED,
			},
		} },
	},
};

static const unsigned char get_channel_status_response_131[] = {
		0x81, 0x03, 0x01, 0x44, 0x00, 0x82, 0x02, 0x82, 0x81, 0x83,
		0x01, 0x00, 0xB8, 0x02, 0x01, 0x05,
};

static const struct terminal_response_test
				get_channel_status_response_data_131 = {
	.pdu = get_channel_status_response_131,
	.pdu_len = sizeof(get_channel_status_response_131),
	.response = {
		.number = 1,
		.type = STK_COMMAND_TYPE_GET_CHANNEL_STATUS,
		.qualifier = 0x00,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		.result = {
			.type = STK_RESULT_TYPE_SUCCESS,
		},
		{ .channel_status = {
				/* Channel 1, link dropped */
				.channel = {
					.id = 1,
					.status = STK_CHANNEL_LINK_DROPPED,
				},
		} },

	},
};

struct envelope_test {
	const unsigned char *pdu;
	unsigned int pdu_len;
	struct stk_envelope envelope;
};

static void test_envelope_encoding(gconstpointer data)
{
	const struct envelope_test *test = data;
	const unsigned char *pdu;
	unsigned int pdu_len;

	pdu = stk_pdu_from_envelope(&test->envelope, &pdu_len);

	if (test->pdu)
		g_assert(pdu);
	else
		g_assert(pdu == NULL);

	g_assert(pdu_len == test->pdu_len);
	g_assert(memcmp(pdu, test->pdu, pdu_len) == 0);
}

static const unsigned char sms_pp_data_download_161[] = {
	0xd1, 0x2d, 0x82, 0x02, 0x83, 0x81, 0x06, 0x09,
	0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
	0xf8, 0x8b, 0x1c, 0x04, 0x04, 0x91, 0x21, 0x43,
	0x7f, 0x16, 0x89, 0x10, 0x10, 0x00, 0x00, 0x00,
	0x00, 0x0d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x20,
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
};

static const struct envelope_test sms_pp_data_download_data_161 = {
	.pdu = sms_pp_data_download_161,
	.pdu_len = sizeof(sms_pp_data_download_161),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_SMS_PP_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .sms_pp_download = {
			.address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "112233445566778",
			},
			.message = {
				.oaddr = {
					.number_type =
						SMS_NUMBER_TYPE_INTERNATIONAL,
					.numbering_plan =
						SMS_NUMBERING_PLAN_ISDN,
					.address = "1234",
				},
				.pid = SMS_PID_TYPE_USIM_DOWNLOAD,
				.dcs = 0x16, /* Uncompressed, Class 2, 8-bit */
				.scts = {
					.year = 98,
					.month = 1,
					.day = 1,
					.has_timezone = TRUE,
					.timezone = 0,
				},
				.udl = 13,
				.ud = "Short Message",
			},
		}},
	},
};

static const unsigned char sms_pp_data_download_162[] = {
	0xd1, 0x2d, 0x82, 0x02, 0x83, 0x81, 0x06, 0x09,
	0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
	0xf8, 0x8b, 0x1c, 0x04, 0x04, 0x91, 0x21, 0x43,
	0x7f, 0xf6, 0x89, 0x10, 0x10, 0x00, 0x00, 0x00,
	0x00, 0x0d, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x20,
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
};

static const struct envelope_test sms_pp_data_download_data_162 = {
	.pdu = sms_pp_data_download_162,
	.pdu_len = sizeof(sms_pp_data_download_162),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_SMS_PP_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .sms_pp_download = {
			.address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "112233445566778",
			},
			.message = {
				.oaddr = {
					.number_type =
						SMS_NUMBER_TYPE_INTERNATIONAL,
					.numbering_plan =
						SMS_NUMBERING_PLAN_ISDN,
					.address = "1234",
				},
				.pid = SMS_PID_TYPE_USIM_DOWNLOAD,
				.dcs = 0xf6, /* Data, Class 2, 8-bit */
				.scts = {
					.year = 98,
					.month = 1,
					.day = 1,
					.has_timezone = TRUE,
					.timezone = 0,
				},
				.udl = 13,
				.ud = "Short Message",
			},
		}},
	},
};

static const unsigned char sms_pp_data_download_182[] = {
	0xd1, 0x3e, 0x82, 0x02, 0x83, 0x81, 0x06, 0x09,
	0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
	0xf8, 0x8b, 0x2d, 0x44, 0x04, 0x91, 0x21, 0x43,
	0x7f, 0xf6, 0x89, 0x10, 0x10, 0x00, 0x00, 0x00,
	0x00, 0x1e, 0x02, 0x70, 0x00, 0x00, 0x19, 0x00,
	0x0d, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xdc, 0xdc,
	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
};

static const struct envelope_test sms_pp_data_download_data_182 = {
	.pdu = sms_pp_data_download_182,
	.pdu_len = sizeof(sms_pp_data_download_182),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_SMS_PP_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .sms_pp_download = {
			.address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "112233445566778",
			},
			.message = {
				.udhi = TRUE,
				.oaddr = {
					.number_type =
						SMS_NUMBER_TYPE_INTERNATIONAL,
					.numbering_plan =
						SMS_NUMBERING_PLAN_ISDN,
					.address = "1234",
				},
				.pid = SMS_PID_TYPE_USIM_DOWNLOAD,
				.dcs = 0xf6, /* Data, Class 2, 8-bit */
				.scts = {
					.year = 98,
					.month = 1,
					.day = 1,
					.has_timezone = TRUE,
					.timezone = 0,
				},
				.udl = 30,
				.ud = {
					0x02, 0x70, 0x00, 0x00, 0x19, 0x00,
					0x0d, 0x00, 0x00, 0x00, 0x00, 0xbf,
					0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
					0x01, 0x00, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
				},
			},
		}},
	},
};

static const unsigned char cbs_pp_data_download_11[] = {
	0xd2, 0x5e, 0x82, 0x02, 0x83, 0x81, 0x8c, 0x58,
	0xc0, 0x11, 0x10, 0x01, 0x01, 0x11, 0xc3, 0x32,
	0x9b, 0x0d, 0x12, 0xca, 0xdf, 0x61, 0xf2, 0x38,
	0x3c, 0xa7, 0x83, 0x40, 0x20, 0x10, 0x08, 0x04,
	0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02,
	0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81,
	0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40,
	0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20,
	0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10,
	0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08,
	0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04,
	0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02,
};

static const struct envelope_test cbs_pp_data_download_data_11 = {
	.pdu = cbs_pp_data_download_11,
	.pdu_len = sizeof(cbs_pp_data_download_11),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_CBS_PP_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .cbs_pp_download = {
			.page = {
				.gs = CBS_GEO_SCOPE_CELL_NORMAL,
				.message_code = 1,
				.update_number = 1,
				.message_identifier = 0x1001,
				.dcs = CBS_LANGUAGE_ENGLISH, /* GSM 7-bit */
				.max_pages = 1,
				.page = 1,
				.ud = {
					/* 7-bit "Cell Broadcast " repeated */
					0xc3, 0x32, 0x9b, 0x0d, 0x12, 0xca,
					0xdf, 0x61, 0xf2, 0x38, 0x3c, 0xa7,
					0x83, 0x40, 0x20, 0x10, 0x08, 0x04,
					0x02, 0x81, 0x40, 0x20, 0x10, 0x08,
					0x04, 0x02, 0x81, 0x40, 0x20, 0x10,
					0x08, 0x04, 0x02, 0x81, 0x40, 0x20,
					0x10, 0x08, 0x04, 0x02, 0x81, 0x40,
					0x20, 0x10, 0x08, 0x04, 0x02, 0x81,
					0x40, 0x20, 0x10, 0x08, 0x04, 0x02,
					0x81, 0x40, 0x20, 0x10, 0x08, 0x04,
					0x02, 0x81, 0x40, 0x20, 0x10, 0x08,
					0x04, 0x02, 0x81, 0x40, 0x20, 0x10,
					0x08, 0x04, 0x02, 0x81, 0x40, 0x20,
					0x10, 0x08, 0x04, 0x02,
				},
			},
		}},
	},
};

static const unsigned char cbs_pp_data_download_17[] = {
	0xd2, 0x5e, 0x82, 0x02, 0x83, 0x81, 0x8c, 0x58,
	0xc0, 0x11, 0x10, 0x01, 0x96, 0x11, 0x02, 0x70,
	0x00, 0x00, 0x4d, 0x00, 0x0d, 0x00, 0x00, 0x00,
	0x00, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x01, 0x00, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
};

static const struct envelope_test cbs_pp_data_download_data_17 = {
	.pdu = cbs_pp_data_download_17,
	.pdu_len = sizeof(cbs_pp_data_download_17),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_CBS_PP_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .cbs_pp_download = {
			.page = {
				.gs = CBS_GEO_SCOPE_CELL_NORMAL,
				.message_code = 1,
				.update_number = 1,
				.message_identifier = 0x1001,
				.dcs = SMS_CLASS_2 | (SMS_CHARSET_8BIT << 2) |
					(9 << 4), /* UDHI present */
				.max_pages = 1,
				.page = 1,
				.ud = {
					/* Secured User Header */
					0x02, 0x70, 0x00, 0x00, 0x4d, 0x00,
					0x0d, 0x00, 0x00, 0x00, 0x00, 0xbf,
					0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
					0x01, 0x00, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
					0xdc, 0xdc, 0xdc, 0xdc,
				},
			},
		}},
	},
};

static const unsigned char menu_selection_111[] = {
	0xd3, 0x07, 0x82, 0x02, 0x01, 0x81, 0x90, 0x01,
	0x02,
};

static const struct envelope_test menu_selection_data_111 = {
	.pdu = menu_selection_111,
	.pdu_len = sizeof(menu_selection_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MENU_SELECTION,
		.src = STK_DEVICE_IDENTITY_TYPE_KEYPAD,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .menu_selection = {
			.item_id = 0x2,
		}},
	},
};

static const unsigned char menu_selection_112[] = {
	0xd3, 0x07, 0x82, 0x02, 0x01, 0x81, 0x90, 0x01,
	0x12,
};

static const struct envelope_test menu_selection_data_112 = {
	.pdu = menu_selection_112,
	.pdu_len = sizeof(menu_selection_112),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MENU_SELECTION,
		.src = STK_DEVICE_IDENTITY_TYPE_KEYPAD,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .menu_selection = {
			.item_id = 0x12,
		}},
	},
};

static const unsigned char menu_selection_121[] = {
	0xd3, 0x07, 0x82, 0x02, 0x01, 0x81, 0x90, 0x01,
	0x3d,
};

static const struct envelope_test menu_selection_data_121 = {
	.pdu = menu_selection_121,
	.pdu_len = sizeof(menu_selection_121),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MENU_SELECTION,
		.src = STK_DEVICE_IDENTITY_TYPE_KEYPAD,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .menu_selection = {
			.item_id = 0x3d,
		}},
	},
};

static const unsigned char menu_selection_122[] = {
	0xd3, 0x07, 0x82, 0x02, 0x01, 0x81, 0x90, 0x01,
	0xfb,
};

static const struct envelope_test menu_selection_data_122 = {
	.pdu = menu_selection_122,
	.pdu_len = sizeof(menu_selection_122),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MENU_SELECTION,
		.src = STK_DEVICE_IDENTITY_TYPE_KEYPAD,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .menu_selection = {
			.item_id = 0xfb,
		}},
	},
};

static const unsigned char menu_selection_123[] = {
	0xd3, 0x07, 0x82, 0x02, 0x01, 0x81, 0x90, 0x01,
	0x01,
};

static const struct envelope_test menu_selection_data_123 = {
	.pdu = menu_selection_123,
	.pdu_len = sizeof(menu_selection_123),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MENU_SELECTION,
		.src = STK_DEVICE_IDENTITY_TYPE_KEYPAD,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .menu_selection = {
			.item_id = 0x1,
		}},
	},
};

static const unsigned char menu_selection_211[] = {
	0xd3, 0x09, 0x82, 0x02, 0x01, 0x81, 0x90, 0x01,
	0x02, 0x15, 0x00,
};

static const struct envelope_test menu_selection_data_211 = {
	.pdu = menu_selection_211,
	.pdu_len = sizeof(menu_selection_211),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MENU_SELECTION,
		.src = STK_DEVICE_IDENTITY_TYPE_KEYPAD,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .menu_selection = {
			.item_id = 0x2,
			.help_request = TRUE,
		}},
	},
};

static const unsigned char menu_selection_612[] = {
	0xd3, 0x07, 0x82, 0x02, 0x01, 0x81, 0x90, 0x01,
	0x05,
};

static const struct envelope_test menu_selection_data_612 = {
	.pdu = menu_selection_612,
	.pdu_len = sizeof(menu_selection_612),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MENU_SELECTION,
		.src = STK_DEVICE_IDENTITY_TYPE_KEYPAD,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .menu_selection = {
			.item_id = 0x5,
		}},
	},
};

static const unsigned char menu_selection_641[] = {
	0xd3, 0x07, 0x82, 0x02, 0x01, 0x81, 0x90, 0x01,
	0x08,
};

static const struct envelope_test menu_selection_data_641 = {
	.pdu = menu_selection_641,
	.pdu_len = sizeof(menu_selection_641),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MENU_SELECTION,
		.src = STK_DEVICE_IDENTITY_TYPE_KEYPAD,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .menu_selection = {
			.item_id = 0x8,
		}},
	},
};

static const unsigned char call_control_111a[] = {
	0xd4, 0x25, 0x82, 0x02, 0x82, 0x81, 0x86, 0x0b,
	0x91, 0x10, 0x32, 0x54, 0x76, 0x98, 0x10, 0x32,
	0x54, 0x76, 0x98, 0x07, 0x07, 0x06, 0x60, 0x04,
	0x02, 0x00, 0x05, 0x81, 0x13, 0x09, 0x00, 0xf1,
	0x10, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
};

static const struct envelope_test call_control_data_111a = {
	.pdu = call_control_111a,
	.pdu_len = sizeof(call_control_111a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_CALL_CONTROL,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .call_control = {
			.type = STK_CC_TYPE_CALL_SETUP,
			{ .address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "01234567890123456789",
			}},
			.ccp1 = {
				.ccp = {
					0x60, 0x04, 0x02, 0x00, 0x05, 0x81,
				},
				.len = 6,
			},
			.location = {
				.mcc = "001",
				.mnc = "01",
				.lac_tac = 0x0001,
				.has_ci = TRUE,
				.ci = 0x0001,
				.has_ext_ci = TRUE,
				.ext_ci = 0x0001,
			},
		}},
	},
};

static const unsigned char call_control_111b[] = {
	0xd4, 0x23, 0x82, 0x02, 0x82, 0x81, 0x86, 0x0b,
	0x91, 0x10, 0x32, 0x54, 0x76, 0x98, 0x10, 0x32,
	0x54, 0x76, 0x98, 0x07, 0x07, 0x06, 0x60, 0x04,
	0x02, 0x00, 0x05, 0x81, 0x13, 0x07, 0x00, 0x11,
	0x10, 0x00, 0x01, 0x00, 0x01,
};

static const struct envelope_test call_control_data_111b = {
	.pdu = call_control_111b,
	.pdu_len = sizeof(call_control_111b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_CALL_CONTROL,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .call_control = {
			.type = STK_CC_TYPE_CALL_SETUP,
			{ .address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "01234567890123456789",
			}},
			.ccp1 = {
				.ccp = {
					0x60, 0x04, 0x02, 0x00, 0x05, 0x81,
				},
				.len = 6,
			},
			.location = {
				.mcc = "001",
				.mnc = "011",
				.lac_tac = 0x0001,
				.has_ci = TRUE,
				.ci = 0x0001,
			},
		}},
	},
};

static const unsigned char call_control_131a[] = {
	0xd4, 0x18, 0x82, 0x02, 0x82, 0x81, 0x86, 0x07,
	0x91, 0x10, 0x32, 0x04, 0x21, 0x43, 0x65, 0x13,
	0x09, 0x00, 0xf1, 0x10, 0x00, 0x01, 0x00, 0x01,
	0x00, 0x01,
	/*
	 * Byte 3 changed to 0x82 and byte 7 changed to 0x86 (Comprehension
	 * Required should be set according to TS 102 223 7.3.1.6)
	 */
};

static const struct envelope_test call_control_data_131a = {
	.pdu = call_control_131a,
	.pdu_len = sizeof(call_control_131a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_CALL_CONTROL,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .call_control = {
			.type = STK_CC_TYPE_CALL_SETUP,
			{ .address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "012340123456",
			}},
			.location = {
				.mcc = "001",
				.mnc = "01",
				.lac_tac = 0x0001,
				.has_ci = TRUE,
				.ci = 0x0001,
				.has_ext_ci = TRUE,
				.ext_ci = 0x0001,
			},
		}},
	},
};

static const unsigned char call_control_131b[] = {
	0xd4, 0x16, 0x82, 0x02, 0x82, 0x81, 0x86, 0x07,
	0x91, 0x10, 0x32, 0x04, 0x21, 0x43, 0x65, 0x13,
	0x07, 0x00, 0x11, 0x10, 0x00, 0x01, 0x00, 0x01,
	/*
	 * Byte 3 changed to 0x82 and byte 7 changed to 0x86 (Comprehension
	 * Required should be set according to TS 102 223 7.3.1.6)
	 */
};

static const struct envelope_test call_control_data_131b = {
	.pdu = call_control_131b,
	.pdu_len = sizeof(call_control_131b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_CALL_CONTROL,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .call_control = {
			.type = STK_CC_TYPE_CALL_SETUP,
			{ .address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "012340123456",
			}},
			.location = {
				.mcc = "001",
				.mnc = "011",
				.lac_tac = 0x0001,
				.has_ci = TRUE,
				.ci = 0x0001,
			},
		}},
	},
};

static const unsigned char mo_short_message_control_111a[] = {
	0xd5, 0x22, 0x02, 0x02, 0x82, 0x81, 0x06, 0x09,
	0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
	0xf8, 0x06, 0x06, 0x91, 0x10, 0x32, 0x54, 0x76,
	0xf8, 0x13, 0x09, 0x00, 0xf1, 0x10, 0x00, 0x01,
	0x00, 0x01, 0x00, 0x01,
};

static const struct envelope_test mo_short_message_control_data_111a = {
	.pdu = mo_short_message_control_111a,
	.pdu_len = sizeof(mo_short_message_control_111a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MO_SMS_CONTROL,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .sms_mo_control = {
			.sc_address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "112233445566778",
			},
			.dest_address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "012345678",
			},
			.location = {
				.mcc = "001",
				.mnc = "01",
				.lac_tac = 0x0001,
				.has_ci = TRUE,
				.ci = 0x0001,
				.has_ext_ci = TRUE,
				.ext_ci = 0x0001,
			},
		}},
	},
};

static const unsigned char mo_short_message_control_111b[] = {
	0xd5, 0x20, 0x02, 0x02, 0x82, 0x81, 0x06, 0x09,
	0x91, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
	0xf8, 0x06, 0x06, 0x91, 0x10, 0x32, 0x54, 0x76,
	0xf8, 0x13, 0x07, 0x00, 0x11, 0x10, 0x00, 0x01,
	0x00, 0x01,
};

static const struct envelope_test mo_short_message_control_data_111b = {
	.pdu = mo_short_message_control_111b,
	.pdu_len = sizeof(mo_short_message_control_111b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_MO_SMS_CONTROL,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .sms_mo_control = {
			.sc_address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "112233445566778",
			},
			.dest_address = {
				.ton_npi = 0x91, /* Intl, ISDN */
				.number = "012345678",
			},
			.location = {
				.mcc = "001",
				.mnc = "011",
				.lac_tac = 0x0001,
				.has_ci = TRUE,
				.ci = 0x0001,
			},
		}},
	},
};

static const unsigned char event_download_mt_call_111[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x00, 0x82, 0x02, 0x83,
	0x81, 0x9c, 0x01, 0x00,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c (Comprehension
	 * Required should be set according to TS 102 223 7.5.1.2)
	 */
};

static const struct envelope_test event_download_mt_call_data_111 = {
	.pdu = event_download_mt_call_111,
	.pdu_len = sizeof(event_download_mt_call_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_MT_CALL,
			{ .mt_call = {
				.transaction_id = 0,
			}},
		}},
	},
};

static const unsigned char event_download_mt_call_112[] = {
	0xd6, 0x0f, 0x99, 0x01, 0x00, 0x82, 0x02, 0x83,
	0x81, 0x9c, 0x01, 0x00, 0x06, 0x03, 0x81, 0x89,
	0x67,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c and byte 13 to
	 * 0x06 (Comprehension Required should be set according to
	 * TS 102 223 7.5.1.2)
	 */
};

static const struct envelope_test event_download_mt_call_data_112 = {
	.pdu = event_download_mt_call_112,
	.pdu_len = sizeof(event_download_mt_call_112),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_MT_CALL,
			{ .mt_call = {
				.transaction_id = 0,
				.caller_address = {
					.ton_npi = 0x81, /* Unknown, ISDN */
					.number = "9876",
				},
			}},
		}},
	},
};

static const unsigned char event_download_call_connected_111[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x01, 0x82, 0x02, 0x82,
	0x81, 0x9c, 0x01, 0x80,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c (Comprehension
	 * Required should be set according to TS 102 223 7.5.2.2)
	 */
};

static const struct envelope_test event_download_call_connected_data_111 = {
	.pdu = event_download_call_connected_111,
	.pdu_len = sizeof(event_download_call_connected_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_CONNECTED,
			{ .call_connected = {
				.transaction_id = 0x80,
			}},
		}},
	},
};

static const unsigned char event_download_call_connected_112[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x01, 0x82, 0x02, 0x83,
	0x81, 0x9c, 0x01, 0x80,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c (Comprehension
	 * Required should be set according to TS 102 223 7.5.2.2)
	 */
};

static const struct envelope_test event_download_call_connected_data_112 = {
	.pdu = event_download_call_connected_112,
	.pdu_len = sizeof(event_download_call_connected_112),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_CONNECTED,
			{ .call_connected = {
				.transaction_id = 0x80,
			}},
		}},
	},
};

static const unsigned char event_download_call_disconnected_111[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x02, 0x82, 0x02, 0x83,
	0x81, 0x9c, 0x01, 0x80,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c (Comprehension
	 * Required should be set according to TS 102 223 7.5.3.2)
	 */
};

static const struct envelope_test event_download_call_disconnected_data_111 = {
	.pdu = event_download_call_disconnected_111,
	.pdu_len = sizeof(event_download_call_disconnected_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_DISCONNECTED,
			{ .call_disconnected = {
				.transaction_ids = {
					.len = 1,
					.list = { 0x80 },
				},
			}},
		}},
	},
};

static const unsigned char event_download_call_disconnected_112a[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x9c, 0x01, 0x80,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c (Comprehension
	 * Required should be set according to TS 102 223 7.5.3.2)
	 */
};

static const struct envelope_test
		event_download_call_disconnected_data_112a = {
	.pdu = event_download_call_disconnected_112a,
	.pdu_len = sizeof(event_download_call_disconnected_112a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_DISCONNECTED,
			{ .call_disconnected = {
				.transaction_ids = {
					.len = 1,
					.list = { 0x80 },
				},
			}},
		}},
	},
};

static const unsigned char event_download_call_disconnected_112b[] = {
	0xd6, 0x0e, 0x99, 0x01, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x9c, 0x01, 0x80, 0x1a, 0x02, 0x60, 0x90,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c and byte 13 to
	 * 1a (Comprehension Required should be set according to TS
	 * 102 223 7.5.3.2)
	 */
};

static const struct envelope_test
		event_download_call_disconnected_data_112b = {
	.pdu = event_download_call_disconnected_112b,
	.pdu_len = sizeof(event_download_call_disconnected_112b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_DISCONNECTED,
			{ .call_disconnected = {
				.transaction_ids = {
					.len = 1,
					.list = { 0x80 },
				},
				.cause = {
					.has_cause = TRUE,
					.len = 2,
					/* Normal call clearing */
					.cause = { 0x60, 0x90 },
				},
			}},
		}},
	},
};

static const unsigned char event_download_call_disconnected_112c[] = {
	0xd6, 0x0e, 0x99, 0x01, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x9c, 0x01, 0x80, 0x1a, 0x02, 0xe0, 0x90,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c and byte 13 to
	 * 1a (Comprehension Required should be set according to TS
	 * 102 223 7.5.3.2)
	 */
};

static const struct envelope_test
		event_download_call_disconnected_data_112c = {
	.pdu = event_download_call_disconnected_112c,
	.pdu_len = sizeof(event_download_call_disconnected_112c),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_DISCONNECTED,
			{ .call_disconnected = {
				.transaction_ids = {
					.len = 1,
					.list = { 0x80 },
				},
				.cause = {
					.has_cause = TRUE,
					.len = 2,
					/* Normal call clearing */
					.cause = { 0xe0, 0x90 },
				},
			}},
		}},
	},
};

static const unsigned char event_download_call_disconnected_113a[] = {
	0xd6, 0x0e, 0x99, 0x01, 0x02, 0x82, 0x02, 0x83,
	0x81, 0x9c, 0x01, 0x00, 0x1a, 0x02, 0x60, 0x90,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c and byte 13 to
	 * 1a (Comprehension Required should be set according to TS
	 * 102 223 7.5.3.2)
	 */
};

static const struct envelope_test
		event_download_call_disconnected_data_113a = {
	.pdu = event_download_call_disconnected_113a,
	.pdu_len = sizeof(event_download_call_disconnected_113a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_DISCONNECTED,
			{ .call_disconnected = {
				.transaction_ids = {
					.len = 1,
					.list = { 0 },
				},
				.cause = {
					.has_cause = TRUE,
					.len = 2,
					/* Normal call clearing */
					.cause = { 0x60, 0x90 },
				},
			}},
		}},
	},
};

static const unsigned char event_download_call_disconnected_113b[] = {
	0xd6, 0x0e, 0x99, 0x01, 0x02, 0x82, 0x02, 0x83,
	0x81, 0x9c, 0x01, 0x00, 0x1a, 0x02, 0xe0, 0x90,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c and byte 13 to
	 * 1a (Comprehension Required should be set according to TS
	 * 102 223 7.5.3.2)
	 */
};

static const struct envelope_test
		event_download_call_disconnected_data_113b = {
	.pdu = event_download_call_disconnected_113b,
	.pdu_len = sizeof(event_download_call_disconnected_113b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_DISCONNECTED,
			{ .call_disconnected = {
				.transaction_ids = {
					.len = 1,
					.list = { 0 },
				},
				.cause = {
					.has_cause = TRUE,
					.len = 2,
					/* Normal call clearing */
					.cause = { 0xe0, 0x90 },
				},
			}},
		}},
	},
};

static const unsigned char event_download_call_disconnected_114a[] = {
	0xd6, 0x0c, 0x99, 0x01, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x9c, 0x01, 0x80, 0x1a, 0x00,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c and byte 13 to
	 * 1a (Comprehension Required should be set according to TS
	 * 102 223 7.5.3.2)
	 */
};

static const struct envelope_test
		event_download_call_disconnected_data_114a = {
	.pdu = event_download_call_disconnected_114a,
	.pdu_len = sizeof(event_download_call_disconnected_114a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_DISCONNECTED,
			{ .call_disconnected = {
				.transaction_ids = {
					.len = 1,
					.list = { 0x80 },
				},
				.cause = {
					.has_cause = TRUE,
					/* Radio link failure */
				},
			}},
		}},
	},
};

static const unsigned char event_download_call_disconnected_114b[] = {
	0xd6, 0x0c, 0x99, 0x01, 0x02, 0x82, 0x02, 0x82,
	0x81, 0x9c, 0x01, 0x00, 0x1a, 0x00,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9c and byte 13 to
	 * 1a (Comprehension Required should be set according to TS
	 * 102 223 7.5.3.2)
	 */
};

static const struct envelope_test
		event_download_call_disconnected_data_114b = {
	.pdu = event_download_call_disconnected_114b,
	.pdu_len = sizeof(event_download_call_disconnected_114b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CALL_DISCONNECTED,
			{ .call_disconnected = {
				.transaction_ids = {
					.len = 1,
					.list = { 0 },
				},
				.cause = {
					.has_cause = TRUE,
					/* Radio link failure */
				},
			}},
		}},
	},
};

static const unsigned char event_download_location_status_111[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x9b, 0x01, 0x02,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9b (Comprehension
	 * Required should be set according to TS 102 223 7.5.4.2)
	 */
};

static const struct envelope_test
		event_download_location_status_data_111 = {
	.pdu = event_download_location_status_111,
	.pdu_len = sizeof(event_download_location_status_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_LOCATION_STATUS,
			{ .location_status = {
				.state = STK_NO_SERVICE,
			}},
		}},
	},
};

static const unsigned char event_download_location_status_112a[] = {
	0xd6, 0x15, 0x99, 0x01, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x9b, 0x01, 0x00, 0x13, 0x09, 0x00, 0xf1,
	0x10, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9b (Comprehension
	 * Required should be set according to TS 102 223 7.5.4.2)
	 */
};

static const struct envelope_test
		event_download_location_status_data_112a = {
	.pdu = event_download_location_status_112a,
	.pdu_len = sizeof(event_download_location_status_112a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_LOCATION_STATUS,
			{ .location_status = {
				.state = STK_NORMAL_SERVICE,
				.info = {
					.mcc = "001",
					.mnc = "01",
					.lac_tac = 0x0002,
					.has_ci = TRUE,
					.ci = 0x0002,
					.has_ext_ci = TRUE,
					.ext_ci = 0x0001,
				},
			}},
		}},
	},
};

static const unsigned char event_download_location_status_112b[] = {
	0xd6, 0x13, 0x99, 0x01, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x9b, 0x01, 0x00, 0x13, 0x07, 0x00, 0x11,
	0x10, 0x00, 0x02, 0x00, 0x02,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9b (Comprehension
	 * Required should be set according to TS 102 223 7.5.4.2)
	 */
};

static const struct envelope_test
		event_download_location_status_data_112b = {
	.pdu = event_download_location_status_112b,
	.pdu_len = sizeof(event_download_location_status_112b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_LOCATION_STATUS,
			{ .location_status = {
				.state = STK_NORMAL_SERVICE,
				.info = {
					.mcc = "001",
					.mnc = "011",
					.lac_tac = 0x0002,
					.has_ci = TRUE,
					.ci = 0x0002,
				},
			}},
		}},
	},
};

static const unsigned char event_download_location_status_122[] = {
	0xd6, 0x15, 0x99, 0x01, 0x03, 0x82, 0x02, 0x82,
	0x81, 0x9b, 0x01, 0x00, 0x13, 0x09, 0x00, 0xf1,
	0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2f,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0x9b (Comprehension
	 * Required should be set according to TS 102 223 7.5.4.2)
	 */
};

static const struct envelope_test
		event_download_location_status_data_122 = {
	.pdu = event_download_location_status_122,
	.pdu_len = sizeof(event_download_location_status_122),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_LOCATION_STATUS,
			{ .location_status = {
				.state = STK_NORMAL_SERVICE,
				.info = {
					.mcc = "001",
					.mnc = "01",
					.lac_tac = 0x0002,
					.has_eutran_ci = TRUE,
					.eutran_ci = 0x0000002,
				},
			}},
		}},
	},
};

/*
 * This is from 27.22.7.5.  The ENVELOPE given in 27.22.4.16.1.1 seems to
 * have invalid length value (2nd byte), but in turn the Comprehension
 * Required bit is set correctly..
 */
static const unsigned char event_download_user_activity_111[] = {
	0xd6, 0x07, 0x99, 0x01, 0x04, 0x82, 0x02, 0x82,
	0x81,
	/*
	 * Byte 3 changed to 0x99 (Comprehension Required should be
	 * set according to TS 102 223 7.5.5.2)
	 */
};

static const struct envelope_test event_download_user_activity_data_111 = {
	.pdu = event_download_user_activity_111,
	.pdu_len = sizeof(event_download_user_activity_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_USER_ACTIVITY,
		}},
	},
};

static const unsigned char event_download_idle_screen_available_111[] = {
	0xd6, 0x07, 0x99, 0x01, 0x05, 0x82, 0x02, 0x02,
	0x81,
	/*
	 * Byte 3 changed to 0x99 (Comprehension Required should be
	 * set according to TS 102 223 7.5.6.2)
	 */
};

static const struct envelope_test
		event_download_idle_screen_available_data_111 = {
	.pdu = event_download_idle_screen_available_111,
	.pdu_len = sizeof(event_download_idle_screen_available_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_DISPLAY,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE,
		}},
	},
};

static const unsigned char event_download_card_reader_status_111a[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x79,
};

static const struct envelope_test
		event_download_card_reader_status_data_111a = {
	.pdu = event_download_card_reader_status_111a,
	.pdu_len = sizeof(event_download_card_reader_status_111a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = TRUE,
				.present = TRUE,
				.id1_size = TRUE,
				.card_present = TRUE,
				.card_powered = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_111b[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x59,
};

static const struct envelope_test
		event_download_card_reader_status_data_111b = {
	.pdu = event_download_card_reader_status_111b,
	.pdu_len = sizeof(event_download_card_reader_status_111b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = TRUE,
				.present = TRUE,
				.id1_size = FALSE,
				.card_present = TRUE,
				.card_powered = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_111c[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x71,
};

static const struct envelope_test
		event_download_card_reader_status_data_111c = {
	.pdu = event_download_card_reader_status_111c,
	.pdu_len = sizeof(event_download_card_reader_status_111c),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = FALSE,
				.present = TRUE,
				.id1_size = TRUE,
				.card_present = TRUE,
				.card_powered = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_111d[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x51,
};

static const struct envelope_test
		event_download_card_reader_status_data_111d = {
	.pdu = event_download_card_reader_status_111d,
	.pdu_len = sizeof(event_download_card_reader_status_111d),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = FALSE,
				.present = TRUE,
				.id1_size = FALSE,
				.card_present = TRUE,
				.card_powered = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_112a[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x39,
};

static const struct envelope_test
		event_download_card_reader_status_data_112a = {
	.pdu = event_download_card_reader_status_112a,
	.pdu_len = sizeof(event_download_card_reader_status_112a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = TRUE,
				.present = TRUE,
				.id1_size = TRUE,
				.card_present = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_112b[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x19,
};

static const struct envelope_test
		event_download_card_reader_status_data_112b = {
	.pdu = event_download_card_reader_status_112b,
	.pdu_len = sizeof(event_download_card_reader_status_112b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = TRUE,
				.present = TRUE,
				.id1_size = FALSE,
				.card_present = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_112c[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x31,
};

static const struct envelope_test
		event_download_card_reader_status_data_112c = {
	.pdu = event_download_card_reader_status_112c,
	.pdu_len = sizeof(event_download_card_reader_status_112c),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = FALSE,
				.present = TRUE,
				.id1_size = TRUE,
				.card_present = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_112d[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x11,
};

static const struct envelope_test
		event_download_card_reader_status_data_112d = {
	.pdu = event_download_card_reader_status_112d,
	.pdu_len = sizeof(event_download_card_reader_status_112d),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = FALSE,
				.present = TRUE,
				.id1_size = FALSE,
				.card_present = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_212a[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x29,
};

static const struct envelope_test
		event_download_card_reader_status_data_212a = {
	.pdu = event_download_card_reader_status_212a,
	.pdu_len = sizeof(event_download_card_reader_status_212a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = TRUE,
				.present = FALSE,
				.id1_size = TRUE,
				.card_present = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_card_reader_status_212b[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x06, 0x82, 0x02, 0x82,
	0x81, 0xa0, 0x01, 0x09,
};

static const struct envelope_test
		event_download_card_reader_status_data_212b = {
	.pdu = event_download_card_reader_status_212b,
	.pdu_len = sizeof(event_download_card_reader_status_212b),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CARD_READER_STATUS,
			{ .card_reader_status = {
				.id = 1,
				.removable = TRUE,
				.present = FALSE,
				.id1_size = FALSE,
				.card_present = FALSE,
			}},
		}},
	},
};

static const unsigned char event_download_language_selection_111[] = {
	0xd6, 0x0b, 0x99, 0x01, 0x07, 0x82, 0x02, 0x82,
	0x81, 0xad, 0x02, 0x64, 0x65,
	/*
	 * Byte 3 changed to 0x99 and byte 10 to 0xad (Comprehension
	 * Required should be set according to TS 102 223 7.5.8.2)
	 */
};

static const struct envelope_test
		event_download_language_selection_data_111 = {
	.pdu = event_download_language_selection_111,
	.pdu_len = sizeof(event_download_language_selection_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_LANGUAGE_SELECTION,
			{ .language_selection = "de" },
		}},
	},
};

static const unsigned char event_download_language_selection_122[] = {
	0xd6, 0x0b, 0x99, 0x01, 0x07, 0x82, 0x02, 0x82,
	0x81, 0xad, 0x02, 0x73, 0x65,
	/* Byte 5 changed to 0x07 (Event: Language Selection) */
	/* Byte 8 changed to 0x82 (Source device: Terminal) */
	/* Removed the (unexpected?) Transaction ID data object (0x2d) */
};

static const struct envelope_test
		event_download_language_selection_data_122 = {
	.pdu = event_download_language_selection_122,
	.pdu_len = sizeof(event_download_language_selection_122),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_LANGUAGE_SELECTION,
			{ .language_selection = "se" },
		}},
	},
};

static const unsigned char event_download_browser_termination_111[] = {
	0xd6, 0x0a, 0x99, 0x01, 0x08, 0x82, 0x02, 0x82,
	0x81, 0xb4, 0x01, 0x00,
};

static const struct envelope_test
		event_download_browser_termination_data_111 = {
	.pdu = event_download_browser_termination_111,
	.pdu_len = sizeof(event_download_browser_termination_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_BROWSER_TERMINATION,
			{ .browser_termination = {
				.cause = STK_BROWSER_USER_TERMINATION,
			}},
		}},
	},
};

static const unsigned char event_download_data_available_111[] = {
	0xd6, 0x0e, 0x99, 0x01, 0x09, 0x82, 0x02, 0x82,
	0x81, 0xb8, 0x02, 0x81, 0x00, 0xb7, 0x01, 0xff,
};

static const struct envelope_test event_download_data_available_data_111 = {
	.pdu = event_download_data_available_111,
	.pdu_len = sizeof(event_download_data_available_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_DATA_AVAILABLE,
			{ .data_available = {
				/* Channel 1 open, Link established */
				.channel = {
				.id = 1,
				.status =
				STK_CHANNEL_PACKET_DATA_SERVICE_ACTIVATED,
				},
				.channel_data_len = 255,
			} },
		} },
	},
};

static const unsigned char event_download_data_available_211[] = {
	0xd6, 0x0e, 0x99, 0x01, 0x09, 0x82, 0x02, 0x82,
	0x81, 0xb8, 0x02, 0x81, 0x00, 0xb7, 0x01, 0xff,
};

static const struct envelope_test event_download_data_available_data_211 = {
	.pdu = event_download_data_available_211,
	.pdu_len = sizeof(event_download_data_available_211),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_DATA_AVAILABLE,
			{ .data_available = {
				/* Channel 1 open, Link established */
				.channel = {
				.id = 1,
				.status =
				STK_CHANNEL_PACKET_DATA_SERVICE_ACTIVATED,
				},
				.channel_data_len = 255,
			} },
		} },
	},
};

static const unsigned char event_download_channel_status_131[] = {
	0xd6, 0x0b, 0x99, 0x01, 0x0a, 0x82, 0x02, 0x82,
	0x81, 0xb8, 0x02, 0x01, 0x05,
};

static const struct envelope_test event_download_channel_status_data_131 = {
	.pdu = event_download_channel_status_131,
	.pdu_len = sizeof(event_download_channel_status_131),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CHANNEL_STATUS,
			{ .channel_status = {
				/* Channel 1, Link dropped */
				.channel = {
					.id = 1,
					.status = STK_CHANNEL_LINK_DROPPED,
				},
			} },
		} },
	},
};

static const unsigned char event_download_channel_status_211[] = {
	0xd6, 0x0b, 0x99, 0x01, 0x0a, 0x82, 0x02, 0x82,
	0x81, 0xb8, 0x02, 0x41, 0x00,
	/*
	 * Byte 10 changed to 0xb8 (Comprehension Required should be
	 * set according to TS 102 223 7.5.11.2)
	 */
};

static const struct envelope_test event_download_channel_status_data_211 = {
	.pdu = event_download_channel_status_211,
	.pdu_len = sizeof(event_download_channel_status_211),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CHANNEL_STATUS,
			{ .channel_status = {
				/* Channel 1, TCP in LISTEN state */
				.channel = {
				.id = 1,
				.status = STK_CHANNEL_TCP_IN_LISTEN_STATE,
				},
			} },
		} },
	},
};

static const unsigned char event_download_channel_status_221[] = {
	0xd6, 0x0b, 0x99, 0x01, 0x0a, 0x82, 0x02, 0x82,
	0x81, 0xb8, 0x02, 0x81, 0x00,
	/*
	 * Byte 10 changed to 0xb8 (Comprehension Required should be
	 * set according to TS 102 223 7.5.11.2)
	 */
};

static const struct envelope_test event_download_channel_status_data_221 = {
	.pdu = event_download_channel_status_221,
	.pdu_len = sizeof(event_download_channel_status_221),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_CHANNEL_STATUS,
			{ .channel_status = {
				/* Channel 1 open, TCP Link established */
				.channel = {
				.id = 1,
				.status =
				STK_CHANNEL_PACKET_DATA_SERVICE_ACTIVATED,
				},
			} },
		} },
	},
};

static const unsigned char event_download_network_rejection_111[] = {
	0xd6, 0x17, 0x99, 0x01, 0x12, 0x82, 0x02, 0x83,
	0x81, 0x7d, 0x05, 0x00, 0xf1, 0x10, 0x00, 0x01,
	0xbf, 0x01, 0x08, 0xf4, 0x01, 0x09, 0xf5, 0x01,
	0x0b,
	/*
	 * Byte 3 changed to 99, byte 17 changed to bf, byte 19 to f4 and
	 * byte 22 to f5 (Comprehension Required should be set according
	 * to TS 131 111 7.5.2.2)
	 */
};

static const struct envelope_test event_download_network_rejection_data_111 = {
	.pdu = event_download_network_rejection_111,
	.pdu_len = sizeof(event_download_network_rejection_111),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_NETWORK_REJECTION,
			{ .network_rejection = {
				.tai = {
					.mcc = "001",
					.mnc = "01",
					.tac = 0x0001,
				},
				.access_tech = STK_ACCESS_TECHNOLOGY_EUTRAN,
				.update_attach = STK_UPDATE_ATTACH_EPS_ATTACH,
				.cause = STK_CAUSE_EMM_PLMN_NOT_ALLOWED,
			}},
		}},
	},
};

static const unsigned char event_download_network_rejection_121[] = {
	0xd6, 0x17, 0x99, 0x01, 0x12, 0x82, 0x02, 0x83,
	0x81, 0x7d, 0x05, 0x00, 0xf1, 0x10, 0x00, 0x01,
	0xbf, 0x01, 0x08, 0xf4, 0x01, 0x0b, 0xf5, 0x01,
	0x0c,
	/*
	 * Byte 3 changed to 99, byte 17 changed to bf, byte 19 to f4 and
	 * byte 22 to f5 (Comprehension Required should be set according
	 * to TS 131 111 7.5.2.2)
	 */
};

static const struct envelope_test event_download_network_rejection_data_121 = {
	.pdu = event_download_network_rejection_121,
	.pdu_len = sizeof(event_download_network_rejection_121),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_EVENT_DOWNLOAD,
		.src = STK_DEVICE_IDENTITY_TYPE_NETWORK,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .event_download = {
			.type = STK_EVENT_TYPE_NETWORK_REJECTION,
			{ .network_rejection = {
				.tai = {
					.mcc = "001",
					.mnc = "01",
					.tac = 0x0001,
				},
				.access_tech = STK_ACCESS_TECHNOLOGY_EUTRAN,
				.update_attach = STK_UPDATE_ATTACH_TA_UPDATING,
				.cause = STK_CAUSE_EMM_TAC_NOT_ALLOWED,
			}},
		}},
	},
};

static const unsigned char timer_expiration_211[] = {
	0xd7, 0x0c, 0x82, 0x02, 0x82, 0x81, 0xa4, 0x01,
	0x01, 0xa5, 0x03, 0x00, 0x00, 0x01,
};

static const struct envelope_test timer_expiration_data_211 = {
	.pdu = timer_expiration_211,
	.pdu_len = sizeof(timer_expiration_211),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_TIMER_EXPIRATION,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .timer_expiration = {
			.id = 1,
			.value = {
				.second = 10,
				.has_value = TRUE,
			},
		}},
	},
};

static const unsigned char timer_expiration_221a[] = {
	0xd7, 0x0c, 0x82, 0x02, 0x82, 0x81, 0xa4, 0x01,
	0x01, 0xa5, 0x03, 0x00, 0x00, 0x03,
};

static const struct envelope_test timer_expiration_data_221a = {
	.pdu = timer_expiration_221a,
	.pdu_len = sizeof(timer_expiration_221a),
	.envelope = {
		.type = STK_ENVELOPE_TYPE_TIMER_EXPIRATION,
		.src = STK_DEVICE_IDENTITY_TYPE_TERMINAL,
		.dst = STK_DEVICE_IDENTITY_TYPE_UICC,
		{ .timer_expiration = {
			.id = 1,
			.value = {
				.second = 30,
				.has_value = TRUE,
			},
		}},
	},
};

struct html_attr_test {
	char *text;
	struct stk_text_attribute text_attr;
	char *html;
};

static struct html_attr_test html_attr_data_1 = {
	.text = "Blue green green green",
	.text_attr = {
		.len = 8,
		.attributes = {	0x00, 0x00, 0x03, 0x94, 0x00, 0x04, 0x03,
				0x96 },
	},
	.html = "<span style=\"color: #0000A0;background-color: #FFFFFF;\">"
		"Blue</span><span style=\"color: #347235;background-color: "
		"#FFFFFF;\"> green green green</span>",
};

static struct html_attr_test html_attr_data_2 = {
	.text = "abc",
	.text_attr = {
		.len = 8,
		.attributes = { 0x00, 0x02, 0x03, 0x94, 0x01, 0x02, 0x03,
				0x96 },
	},
	.html = "<span style=\"color: #347235;background-color: #FFFFFF;\">"
		"a</span><span style=\"color: #0000A0;background-color: "
		"#FFFFFF;\">bc</span>",
};

static struct html_attr_test html_attr_data_3 = {
	.text = "1 < 2, 2 > 1, 1 & 0 == 0\nSpecial Chars are Fun\r\nTo Write",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x00, 0x03, 0x00 },
	},
	.html = "1 &lt; 2, 2 &gt; 1, 1 &amp; 0 == 0<br/>Special Chars are Fun"
		"<br/>To Write",
};

static struct html_attr_test html_attr_data_4 = {
	.text = "€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"
		"€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"
		"€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"
		"€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"
		"€€€€€€€€€€€€€€€",
	.text_attr = {
		.len = 4,
		.attributes = { 0x00, 0x00, 0x03, 0x94 },
	},
	.html = "<span style=\"color: #347235;background-color: #FFFFFF;\">"
		"€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"
		"€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"
		"€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"
		"€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€"
		"€€€€€€€€€€€€€€€</span>",
};

static void test_html_attr(gconstpointer data)
{
	const struct html_attr_test *test = data;
	check_text_attr_html(&test->text_attr, test->text, test->html);
}

struct img_xpm_test {
	const unsigned char *img;
	unsigned int len;
	const unsigned char *clut;
	unsigned short clut_len;
	guint8 scheme;
	char *xpm;
};

const unsigned char img1[] = { 0x05, 0x05, 0xFE, 0xEB, 0xBF, 0xFF, 0xFF, 0xFF };

const unsigned char img2[] = { 0x08, 0x08, 0x02, 0x03, 0x00, 0x16, 0xAA,
					0xAA, 0x80, 0x02, 0x85, 0x42, 0x81,
					0x42, 0x81, 0x42, 0x81, 0x52, 0x80,
					0x02, 0xAA, 0xAA, 0xFF, 0x00, 0x00,
					0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF };

const unsigned char img3[] = { 0x2E, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F,
				0xFF, 0x00, 0x00, 0x00, 0x00, 0x77, 0xFE, 0x00,
				0x00, 0x00, 0x01, 0xBF, 0xF8, 0x00, 0x00, 0x00,
				0x06, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1A, 0x03,
				0x80, 0x00, 0x00, 0x00, 0x6B, 0xF6, 0xBC, 0x00,
				0x00, 0x01, 0xAF, 0xD8, 0x38, 0x00, 0x00, 0x06,
				0xBF, 0x60, 0x20, 0x00, 0x00, 0x1A, 0xFD, 0x80,
				0x40, 0x00, 0x00, 0x6B, 0xF6, 0x00, 0x80, 0x00,
				0x01, 0xA0, 0x1F, 0x02, 0x00, 0x00, 0x06, 0xFF,
				0xE4, 0x04, 0x00, 0x00, 0x1B, 0xFF, 0x90, 0x10,
				0x00, 0x00, 0x6D, 0xEE, 0x40, 0x40, 0x00, 0x01,
				0xBF, 0xF9, 0x01, 0x00, 0x00, 0x6F, 0xFF, 0xE4,
				0x04, 0x00, 0x00, 0x1B, 0xFF, 0x90, 0x10, 0x00,
				0x00, 0x6F, 0xFE, 0x40, 0x40, 0x00, 0x01, 0xBF,
				0xF9, 0x01, 0x00, 0x00, 0x06, 0xFF, 0xE6, 0x04,
				0x00, 0x00, 0x1B, 0xFF, 0x88, 0x10, 0x00, 0x00,
				0x6F, 0xFE, 0x20, 0x40, 0x00, 0x01, 0xBF, 0xF8,
				0x66, 0x00, 0x00, 0x06, 0xFF, 0xE0, 0xF0, 0x00,
				0x00, 0x1B, 0xFF, 0x80, 0x80, 0x00, 0x00, 0x7F,
				0xFE, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0x00,
				0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x1C, 0x21, 0x08, 0x44, 0xEE, 0x00, 0x48, 0xC4,
				0x31, 0x92, 0x20, 0x01, 0x25, 0x11, 0x45, 0x50,
				0x80, 0x07, 0x14, 0x45, 0x15, 0x43, 0x80, 0x12,
				0x71, 0x1C, 0x4D, 0x08, 0x00, 0x4A, 0x24, 0x89,
				0x32, 0x20, 0x01, 0xC8, 0x9E, 0x24, 0x4E,
				0xE0 };

const unsigned char img4[] = { 0x18, 0x10, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01,
				0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x8F,
				0x3C, 0xF1, 0x89, 0x20, 0x81, 0x89, 0x20,
				0x81, 0x89, 0x20, 0xF1, 0x89, 0x20, 0x11,
				0x89, 0x20, 0x11, 0x89, 0x20, 0x11, 0x8F,
				0x3C, 0xF1, 0x80, 0x00, 0x01, 0x80, 0x00,
				0x01, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF };

const unsigned char img5[] = { 0x08, 0x08, 0xFF, 0x03, 0xA5, 0x99, 0x99,
				0xA5, 0xC3, 0xFF };

static struct img_xpm_test xpm_test_1 = {
	.img = img1,
	.len = sizeof(img1),
	.scheme = STK_IMG_SCHEME_BASIC,
	.xpm = "/* XPM */\n"
		"static char *xpm[] = {\n"
		"\"5 5 2 1\",\n"
		"\"0	c #000000\",\n"
		"\"1	c #FFFFFF\",\n"
		"\"11111\",\n"
		"\"11011\",\n"
		"\"10101\",\n"
		"\"11011\",\n"
		"\"11111\",\n"
		"};",
};

static struct img_xpm_test xpm_test_2 = {
	.img = img2,
	.len = sizeof(img2),
	.clut = img2 + 0x16,
	.clut_len = 0x09,
	.scheme = STK_IMG_SCHEME_COLOR,
	.xpm = "/* XPM */\n"
		"static char *xpm[] = {\n"
		"\"8 8 3 1\",\n"
		"\"0	c #FF0000\",\n"
		"\"1	c #00FF00\",\n"
		"\"2	c #0000FF\",\n"
		"\"22222222\",\n"
		"\"20000002\",\n"
		"\"20111002\",\n"
		"\"20011002\",\n"
		"\"20011002\",\n"
		"\"20011102\",\n"
		"\"20000002\",\n"
		"\"22222222\",\n"
		"};",
};

static struct img_xpm_test xpm_test_3 = {
	.img = img3,
	.len = sizeof(img3),
	.scheme = STK_IMG_SCHEME_BASIC,
	.xpm = "/* XPM */\n"
		"static char *xpm[] = {\n"
		"\"46 40 2 1\",\n"
		"\"0	c #000000\",\n"
		"\"1	c #FFFFFF\",\n"
		"\"0000000000000000000000000000000000000000000000\",\n"
		"\"0000000000000000011111111110000000000000000000\",\n"
		"\"0000000000000000111111111111000000000000000000\",\n"
		"\"0000000000000001110111111111100000000000000000\",\n"
		"\"0000000000000001101111111111100000000000000000\",\n"
		"\"0000000000000001101111111111100000000000000000\",\n"
		"\"0000000000000001101000000011100000000000000000\",\n"
		"\"0000000000000001101011111101101011110000000000\",\n"
		"\"0000000000000001101011111101100000111000000000\",\n"
		"\"0000000000000001101011111101100000001000000000\",\n"
		"\"0000000000000001101011111101100000000100000000\",\n"
		"\"0000000000000001101011111101100000000010000000\",\n"
		"\"0000000000000001101000000001111100000010000000\",\n"
		"\"0000000000000001101111111111100100000001000000\",\n"
		"\"0000000000000001101111111111100100000001000000\",\n"
		"\"0000000000000001101101111011100100000001000000\",\n"
		"\"0000000000000001101111111111100100000001000000\",\n"
		"\"0000000000011011111111111111100100000001000000\",\n"
		"\"0000000000000001101111111111100100000001000000\",\n"
		"\"0000000000000001101111111111100100000001000000\",\n"
		"\"0000000000000001101111111111100100000001000000\",\n"
		"\"0000000000000001101111111111100110000001000000\",\n"
		"\"0000000000000001101111111111100010000001000000\",\n"
		"\"0000000000000001101111111111100010000001000000\",\n"
		"\"0000000000000001101111111111100001100110000000\",\n"
		"\"0000000000000001101111111111100000111100000000\",\n"
		"\"0000000000000001101111111111100000001000000000\",\n"
		"\"0000000000000001111111111111100000000000000000\",\n"
		"\"0000000000000011000000000000110000000000000000\",\n"
		"\"0000000000000111111111111111111000000000000000\",\n"
		"\"0000000000000000000000000000000000000000000000\",\n"
		"\"0000000000000000000000000000000000000000000000\",\n"
		"\"0000000000000000000000000000000000000000000000\",\n"
		"\"0000011100001000010000100001000100111011100000\",\n"
		"\"0000010010001100010000110001100100100010000000\",\n"
		"\"0000010010010100010001010001010101000010000000\",\n"
		"\"0000011100010100010001010001010101000011100000\",\n"
		"\"0000010010011100010001110001001101000010000000\",\n"
		"\"0000010010100010010010001001001100100010000000\",\n"
		"\"0000011100100010011110001001000100111011100000\",\n"
		"};",
};

static struct img_xpm_test xpm_test_4 = {
	.img = img4,
	.len = sizeof(img4),
	.scheme = STK_IMG_SCHEME_BASIC,
	.xpm = "/* XPM */\n"
		"static char *xpm[] = {\n"
		"\"24 16 2 1\",\n"
		"\"0	c #000000\",\n"
		"\"1	c #FFFFFF\",\n"
		"\"111111111111111111111111\",\n"
		"\"100000000000000000000001\",\n"
		"\"100000000000000000000001\",\n"
		"\"100000000000000000000001\",\n"
		"\"100011110011110011110001\",\n"
		"\"100010010010000010000001\",\n"
		"\"100010010010000010000001\",\n"
		"\"100010010010000011110001\",\n"
		"\"100010010010000000010001\",\n"
		"\"100010010010000000010001\",\n"
		"\"100010010010000000010001\",\n"
		"\"100011110011110011110001\",\n"
		"\"100000000000000000000001\",\n"
		"\"100000000000000000000001\",\n"
		"\"100000000000000000000001\",\n"
		"\"111111111111111111111111\",\n"
		"};",
};

static struct img_xpm_test xpm_test_5 = {
	.img = img5,
	.len = sizeof(img5),
	.scheme = STK_IMG_SCHEME_BASIC,
	.xpm = "/* XPM */\n"
		"static char *xpm[] = {\n"
		"\"8 8 2 1\",\n"
		"\"0	c #000000\",\n"
		"\"1	c #FFFFFF\",\n"
		"\"11111111\",\n"
		"\"00000011\",\n"
		"\"10100101\",\n"
		"\"10011001\",\n"
		"\"10011001\",\n"
		"\"10100101\",\n"
		"\"11000011\",\n"
		"\"11111111\",\n"
		"};",
};

static struct img_xpm_test xpm_test_6 = {
	.img = img2,
	.len = sizeof(img2),
	.clut = img2 + 0x16,
	.clut_len = 0x09,
	.scheme = STK_IMG_SCHEME_TRANSPARENCY,
	.xpm = "/* XPM */\n"
		"static char *xpm[] = {\n"
		"\"8 8 3 1\",\n"
		"\"0	c #FF0000\",\n"
		"\"1	c #00FF00\",\n"
		"\"2	c None\",\n"
		"\"22222222\",\n"
		"\"20000002\",\n"
		"\"20111002\",\n"
		"\"20011002\",\n"
		"\"20011002\",\n"
		"\"20011102\",\n"
		"\"20000002\",\n"
		"\"22222222\",\n"
		"};",
};

static void test_img_to_xpm(gconstpointer data)
{
	const struct img_xpm_test *test = data;
	char *xpm;

	xpm = stk_image_to_xpm(test->img, test->len, test->scheme,
				test->clut, test->clut_len);

	g_assert(memcmp(xpm, test->xpm, strlen(test->xpm)) == 0);
	g_free(xpm);
}

int main(int argc, char **argv)
{
	g_test_init(&argc, &argv, NULL);

	g_test_add_data_func("/teststk/Display Text 1.1.1",
				&display_text_data_111, test_display_text);
	g_test_add_data_func("/teststk/Display Text 1.3.1",
				&display_text_data_131, test_display_text);
	g_test_add_data_func("/teststk/Display Text 1.4.1",
				&display_text_data_141, test_display_text);
	g_test_add_data_func("/teststk/Display Text 1.5.1",
				&display_text_data_151, test_display_text);
	g_test_add_data_func("/teststk/Display Text 1.6.1",
				&display_text_data_161, test_display_text);
	g_test_add_data_func("/teststk/Display Text 1.7.1",
				&display_text_data_171, test_display_text);
	g_test_add_data_func("/teststk/Display Text 5.1.1",
				&display_text_data_511, test_display_text);
	g_test_add_data_func("/teststk/Display Text 5.2.1",
				&display_text_data_521, test_display_text);
	g_test_add_data_func("/teststk/Display Text 5.3.1",
				&display_text_data_531, test_display_text);
	g_test_add_data_func("/teststk/Display Text 6.1.1",
				&display_text_data_611, test_display_text);
	g_test_add_data_func("/teststk/Display Text 7.1.1",
				&display_text_data_711, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.1.1",
				&display_text_data_811, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.2.1",
				&display_text_data_821, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.3.1",
				&display_text_data_831, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.4.1",
				&display_text_data_841, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.5.1",
				&display_text_data_851, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.6.1",
				&display_text_data_861, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.7.1",
				&display_text_data_871, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.8.1",
				&display_text_data_881, test_display_text);
	g_test_add_data_func("/teststk/Display Text 8.9.1",
				&display_text_data_891, test_display_text);
	g_test_add_data_func("/teststk/Display Text 9.1.1",
				&display_text_data_911, test_display_text);
	g_test_add_data_func("/teststk/Display Text 10.1.1",
				&display_text_data_1011, test_display_text);

	g_test_add_data_func("/teststk/Display Text response 1.1.1",
				&display_text_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Display Text response 1.2.1",
				&display_text_response_data_121,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Display Text response 1.3.1",
				&display_text_response_data_131,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Display Text response 1.5.1",
				&display_text_response_data_151,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Display Text response 1.7.1",
				&display_text_response_data_171,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Display Text response 1.8.1",
				&display_text_response_data_181,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Display Text response 1.9.1",
				&display_text_response_data_191,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Display Text response 2.1.1",
				&display_text_response_data_211,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Display Text response 5.1.1B",
				&display_text_response_data_511b,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Get Inkey 1.1.1",
				&get_inkey_data_111, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 1.2.1",
				&get_inkey_data_121, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 1.3.1",
				&get_inkey_data_131, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 1.4.1",
				&get_inkey_data_141, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 1.5.1",
				&get_inkey_data_151, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 1.6.1",
				&get_inkey_data_161, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 2.1.1",
				&get_inkey_data_211, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 3.1.1",
				&get_inkey_data_311, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 3.2.1",
				&get_inkey_data_321, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 4.1.1",
				&get_inkey_data_411, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 5.1.1",
				&get_inkey_data_511, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 5.1.2",
				&get_inkey_data_512, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 6.1.1",
				&get_inkey_data_611, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 6.2.1",
				&get_inkey_data_621, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 6.3.1",
				&get_inkey_data_631, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 6.4.1",
				&get_inkey_data_641, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 7.1.1",
				&get_inkey_data_711, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 7.1.2",
				&get_inkey_data_712, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 8.1.1",
				&get_inkey_data_811, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.1.1",
				&get_inkey_data_911, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.1.2",
				&get_inkey_data_912, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.2.1",
				&get_inkey_data_921, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.2.2",
				&get_inkey_data_922, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.3.1",
				&get_inkey_data_931, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.3.2",
				&get_inkey_data_932, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.4.1",
				&get_inkey_data_941, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.4.2",
				&get_inkey_data_942, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.4.3",
				&get_inkey_data_943, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.5.1",
				&get_inkey_data_951, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.5.2",
				&get_inkey_data_952, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.5.3",
				&get_inkey_data_953, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.6.1",
				&get_inkey_data_961, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.6.2",
				&get_inkey_data_962, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.6.3",
				&get_inkey_data_963, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.7.1",
				&get_inkey_data_971, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.7.2",
				&get_inkey_data_972, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.7.3",
				&get_inkey_data_973, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.8.1",
				&get_inkey_data_981, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.8.2",
				&get_inkey_data_982, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.8.3",
				&get_inkey_data_983, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.9.1",
				&get_inkey_data_991, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.9.2a",
				&get_inkey_data_992a, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.9.2b",
				&get_inkey_data_992b, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.9.3",
				&get_inkey_data_993, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.10.1",
				&get_inkey_data_9101, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 9.10.2",
				&get_inkey_data_9102, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 10.1.1",
				&get_inkey_data_1011, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 10.2.1",
				&get_inkey_data_1021, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 11.1.1",
				&get_inkey_data_1111, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 12.1.1",
				&get_inkey_data_1211, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 12.2.1",
				&get_inkey_data_1221, test_get_inkey);
	g_test_add_data_func("/teststk/Get Inkey 13.1.1",
				&get_inkey_data_1311, test_get_inkey);

	g_test_add_data_func("/teststk/Get Inkey response 1.1.1",
				&get_inkey_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 1.2.1",
				&get_inkey_response_data_121,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 1.3.1",
				&get_inkey_response_data_131,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 1.4.1",
				&get_inkey_response_data_141,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 1.5.1",
				&get_inkey_response_data_151,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 1.6.1",
				&get_inkey_response_data_161,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 2.1.1",
				&get_inkey_response_data_211,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 4.1.1",
				&get_inkey_response_data_411,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 5.1.1",
				&get_inkey_response_data_511,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 5.1.2",
				&get_inkey_response_data_512,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 6.1.1B",
				&get_inkey_response_data_611b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 7.1.1",
				&get_inkey_response_data_711,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 7.1.2",
				&get_inkey_response_data_712,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 8.1.1",
				&get_inkey_response_data_811,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 9.1.2",
				&get_inkey_response_data_912,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 11.1.1",
				&get_inkey_response_data_1111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Inkey response 13.1.1",
				&get_inkey_response_data_1311,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Get Input 1.1.1",
				&get_input_data_111, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.2.1",
				&get_input_data_121, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.3.1",
				&get_input_data_131, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.4.1",
				&get_input_data_141, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.5.1",
				&get_input_data_151, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.6.1",
				&get_input_data_161, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.7.1",
				&get_input_data_171, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.8.1",
				&get_input_data_181, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.9.1",
				&get_input_data_191, test_get_input);
	g_test_add_data_func("/teststk/Get Input 1.10.1",
				&get_input_data_1101, test_get_input);
	g_test_add_data_func("/teststk/Get Input 2.1.1",
				&get_input_data_211, test_get_input);
	g_test_add_data_func("/teststk/Get Input 3.1.1",
				&get_input_data_311, test_get_input);
	g_test_add_data_func("/teststk/Get Input 3.2.1",
				&get_input_data_321, test_get_input);
	g_test_add_data_func("/teststk/Get Input 4.1.1",
				&get_input_data_411, test_get_input);
	g_test_add_data_func("/teststk/Get Input 4.2.1",
				&get_input_data_421, test_get_input);
	g_test_add_data_func("/teststk/Get Input 5.1.1",
				&get_input_data_511, test_get_input);
	g_test_add_data_func("/teststk/Get Input 5.2.1",
				&get_input_data_521, test_get_input);
	g_test_add_data_func("/teststk/Get Input 6.1.1",
				&get_input_data_611, test_get_input);
	g_test_add_data_func("/teststk/Get Input 6.2.1",
				&get_input_data_621, test_get_input);
	g_test_add_data_func("/teststk/Get Input 6.3.1",
				&get_input_data_631, test_get_input);
	g_test_add_data_func("/teststk/Get Input 6.4.1",
				&get_input_data_641, test_get_input);
	g_test_add_data_func("/teststk/Get Input 7.1.1",
				&get_input_data_711, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.1.1",
				&get_input_data_811, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.1.2",
				&get_input_data_812, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.2.1",
				&get_input_data_821, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.2.2",
				&get_input_data_822, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.3.1",
				&get_input_data_831, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.3.2",
				&get_input_data_832, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.4.1",
				&get_input_data_841, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.4.2",
				&get_input_data_842, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.4.3",
				&get_input_data_843, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.5.1",
				&get_input_data_851, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.5.2",
				&get_input_data_852, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.5.3",
				&get_input_data_853, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.6.1",
				&get_input_data_861, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.6.2",
				&get_input_data_862, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.6.3",
				&get_input_data_863, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.7.1",
				&get_input_data_871, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.7.2",
				&get_input_data_872, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.7.3",
				&get_input_data_873, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.8.1",
				&get_input_data_881, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.8.2",
				&get_input_data_882, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.8.3",
				&get_input_data_883, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.9.1",
				&get_input_data_891, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.9.2",
				&get_input_data_892, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.9.3",
				&get_input_data_893, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.10.1",
				&get_input_data_8101, test_get_input);
	g_test_add_data_func("/teststk/Get Input 8.10.2",
				&get_input_data_8102, test_get_input);
	g_test_add_data_func("/teststk/Get Input 9.1.1",
				&get_input_data_911, test_get_input);
	g_test_add_data_func("/teststk/Get Input 9.2.1",
				&get_input_data_921, test_get_input);
	g_test_add_data_func("/teststk/Get Input 10.1.1",
				&get_input_data_1011, test_get_input);
	g_test_add_data_func("/teststk/Get Input 10.2.1",
				&get_input_data_1021, test_get_input);
	g_test_add_data_func("/teststk/Get Input 11.1.1",
				&get_input_data_1111, test_get_input);
	g_test_add_data_func("/teststk/Get Input 11.2.1",
				&get_input_data_1121, test_get_input);
	g_test_add_data_func("/teststk/Get Input 12.1.1",
				&get_input_data_1211, test_get_input);
	g_test_add_data_func("/teststk/Get Input 12.2.1",
				&get_input_data_1221, test_get_input);

	g_test_add_data_func("/teststk/Get Input response 1.1.1",
				&get_input_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 1.2.1",
				&get_input_response_data_121,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 1.3.1",
				&get_input_response_data_131,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 1.4.1",
				&get_input_response_data_141,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 1.5.1",
				&get_input_response_data_151,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 1.6.1",
				&get_input_response_data_161,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 1.7.1",
				&get_input_response_data_171,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 1.8.1",
				&get_input_response_data_181,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 1.9.1",
				&get_input_response_data_191,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 2.1.1",
				&get_input_response_data_211,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 3.1.1",
				&get_input_response_data_311,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 4.1.1",
				&get_input_response_data_411,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 4.2.1",
				&get_input_response_data_421,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 6.1.1A",
				&get_input_response_data_611a,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 6.1.1B",
				&get_input_response_data_611b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 7.1.1",
				&get_input_response_data_711,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 8.1.2",
				&get_input_response_data_812,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 8.4.3",
				&get_input_response_data_843,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 10.1.1",
				&get_input_response_data_1011,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 10.2.1",
				&get_input_response_data_1021,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 12.1.1",
				&get_input_response_data_1211,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Input response 12.2.1",
				&get_input_response_data_1221,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/More Time 1.1.1",
				&more_time_data_111, test_more_time);

	g_test_add_data_func("/teststk/More Time response 1.1.1",
				&more_time_response_data_111,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Play Tone 1.1.1",
				&play_tone_data_111, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.2",
				&play_tone_data_112, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.3",
				&play_tone_data_113, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.4",
				&play_tone_data_114, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.5",
				&play_tone_data_115, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.6",
				&play_tone_data_116, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.7",
				&play_tone_data_117, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.8",
				&play_tone_data_118, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.9",
				&play_tone_data_119, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.10",
				&play_tone_data_1110, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.11",
				&play_tone_data_1111, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.12",
				&play_tone_data_1112, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.13",
				&play_tone_data_1113, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.14",
				&play_tone_data_1114, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 1.1.15",
				&play_tone_data_1115, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 2.1.1",
				&play_tone_data_211, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 2.1.2",
				&play_tone_data_212, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 2.1.3",
				&play_tone_data_213, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 3.1.1",
				&play_tone_data_311, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 3.2.1",
				&play_tone_data_321, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 3.3.1",
				&play_tone_data_331, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 3.4.1",
				&play_tone_data_341, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.1.1",
				&play_tone_data_411, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.1.2",
				&play_tone_data_412, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.2.1",
				&play_tone_data_421, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.2.2",
				&play_tone_data_422, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.3.1",
				&play_tone_data_431, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.3.2",
				&play_tone_data_432, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.4.1",
				&play_tone_data_441, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.4.2",
				&play_tone_data_442, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.4.3",
				&play_tone_data_443, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.5.1",
				&play_tone_data_451, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.5.2",
				&play_tone_data_452, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.5.3",
				&play_tone_data_453, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.6.1",
				&play_tone_data_461, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.6.2",
				&play_tone_data_462, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.6.3",
				&play_tone_data_463, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.7.1",
				&play_tone_data_471, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.7.2",
				&play_tone_data_472, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.7.3",
				&play_tone_data_473, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.8.1",
				&play_tone_data_481, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.8.2",
				&play_tone_data_482, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.8.3",
				&play_tone_data_483, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.9.1",
				&play_tone_data_491, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.9.2",
				&play_tone_data_492, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.9.3",
				&play_tone_data_493, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.10.1",
				&play_tone_data_4101, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 4.10.2",
				&play_tone_data_4102, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 5.1.1",
				&play_tone_data_511, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 5.1.2",
				&play_tone_data_512, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 5.1.3",
				&play_tone_data_513, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 6.1.1",
				&play_tone_data_611, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 6.1.2",
				&play_tone_data_612, test_play_tone);
	g_test_add_data_func("/teststk/Play Tone 6.1.3",
				&play_tone_data_613, test_play_tone);

	g_test_add_data_func("/teststk/Play Tone response 1.1.1",
				&play_tone_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Play Tone response 1.1.9B",
				&play_tone_response_data_119b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Play Tone response 1.1.14",
				&play_tone_response_data_1114,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Play Tone response 3.1.1B",
				&play_tone_response_data_311b,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Poll Interval 1.1.1",
				&poll_interval_data_111, test_poll_interval);

	g_test_add_data_func("/teststk/Poll Interval response 1.1.1",
				&poll_interval_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Poll Interval response 1.1.1A",
				&poll_interval_response_data_111a,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Setup Menu 1.1.1",
				&setup_menu_data_111, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 1.1.2",
				&setup_menu_data_112, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 1.1.3",
				&setup_menu_data_113, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 1.2.1",
				&setup_menu_data_121, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 1.2.2",
				&setup_menu_data_122, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 1.2.3",
				&setup_menu_data_123, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 2.1.1",
				&setup_menu_data_211, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 3.1.1",
				&setup_menu_data_311, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 4.1.1",
				&setup_menu_data_411, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 4.2.1",
				&setup_menu_data_421, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 5.1.1",
				&setup_menu_data_511, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.1.1",
				&setup_menu_data_611, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.1.2",
				&setup_menu_data_612, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.2.1",
				&setup_menu_data_621, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.2.2",
				&setup_menu_data_622, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.3.1",
				&setup_menu_data_631, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.3.2",
				&setup_menu_data_632, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.4.1",
				&setup_menu_data_641, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.4.2",
				&setup_menu_data_642, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.4.3",
				&setup_menu_data_643, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.5.1",
				&setup_menu_data_651, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.6.1",
				&setup_menu_data_661, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.7.1",
				&setup_menu_data_671, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.8.1",
				&setup_menu_data_681, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.9.1",
				&setup_menu_data_691, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 6.10.1",
				&setup_menu_data_6101, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 7.1.1",
				&setup_menu_data_711, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 7.1.2",
				&setup_menu_data_712, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 7.1.3",
				&setup_menu_data_713, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 8.1.1",
				&setup_menu_data_811, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 8.1.2",
				&setup_menu_data_812, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 8.1.3",
				&setup_menu_data_813, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 9.1.1",
				&setup_menu_data_911, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 9.1.2",
				&setup_menu_data_912, test_setup_menu);
	g_test_add_data_func("/teststk/Setup Menu 9.1.3",
				&setup_menu_data_913, test_setup_menu);

	g_test_add_data_func("/teststk/Setup Menu Negative 1",
			&setup_menu_data_neg_1, test_setup_menu_missing_val);
	g_test_add_data_func("/teststk/Setup Menu Negative 2",
			&setup_menu_data_neg_2, test_setup_menu_neg);
	g_test_add_data_func("/teststk/Setup Menu Negative 3",
			&setup_menu_data_neg_3, test_setup_menu_neg);
	g_test_add_data_func("/teststk/Setup Menu Negative 4",
			&setup_menu_data_neg_4, test_setup_menu_neg);

	g_test_add_data_func("/teststk/Set Up Menu response 1.1.1",
				&set_up_menu_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Menu response 4.1.1B",
				&set_up_menu_response_data_411b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Menu response 5.1.1",
				&set_up_menu_response_data_511,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Select Item 1.1.1",
				&select_item_data_111, test_select_item);
	g_test_add_data_func("/teststk/Select Item 1.2.1",
				&select_item_data_121, test_select_item);
	g_test_add_data_func("/teststk/Select Item 1.3.1",
				&select_item_data_131, test_select_item);
	g_test_add_data_func("/teststk/Select Item 1.4.1",
				&select_item_data_141, test_select_item);
	g_test_add_data_func("/teststk/Select Item 1.5.1",
				&select_item_data_151, test_select_item);
	g_test_add_data_func("/teststk/Select Item 1.6.1",
				&select_item_data_161, test_select_item);
	g_test_add_data_func("/teststk/Select Item 2.1.1",
				&select_item_data_211, test_select_item);
	g_test_add_data_func("/teststk/Select Item 3.1.1",
				&select_item_data_311, test_select_item);
	g_test_add_data_func("/teststk/Select Item 4.1.1",
				&select_item_data_411, test_select_item);
	g_test_add_data_func("/teststk/Select Item 5.1.1",
				&select_item_data_511, test_select_item);
	g_test_add_data_func("/teststk/Select Item 5.2.1",
				&select_item_data_521, test_select_item);
	g_test_add_data_func("/teststk/Select Item 6.1.1",
				&select_item_data_611, test_select_item);
	g_test_add_data_func("/teststk/Select Item 6.2.1",
				&select_item_data_621, test_select_item);
	g_test_add_data_func("/teststk/Select Item 7.1.1",
				&select_item_data_711, test_select_item);
	g_test_add_data_func("/teststk/Select Item 8.1.1",
				&select_item_data_811, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.1.1",
				&select_item_data_911, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.1.2",
				&select_item_data_912, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.2.1",
				&select_item_data_921, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.2.2",
				&select_item_data_922, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.3.1",
				&select_item_data_931, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.3.2",
				&select_item_data_932, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.4.1",
				&select_item_data_941, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.4.2",
				&select_item_data_942, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.4.3",
				&select_item_data_943, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.5.1",
				&select_item_data_951, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.5.2",
				&select_item_data_952, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.5.3",
				&select_item_data_953, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.6.1",
				&select_item_data_961, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.6.2",
				&select_item_data_962, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.6.3",
				&select_item_data_963, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.7.1",
				&select_item_data_971, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.7.2",
				&select_item_data_972, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.7.3",
				&select_item_data_973, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.8.1",
				&select_item_data_981, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.8.2",
				&select_item_data_982, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.8.3",
				&select_item_data_983, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.9.1",
				&select_item_data_991, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.9.2",
				&select_item_data_992, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.9.3",
				&select_item_data_993, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.10.1",
				&select_item_data_9101, test_select_item);
	g_test_add_data_func("/teststk/Select Item 9.10.2",
				&select_item_data_9102, test_select_item);
	g_test_add_data_func("/teststk/Select Item 10.1.1",
				&select_item_data_1011, test_select_item);
	g_test_add_data_func("/teststk/Select Item 10.2.1",
				&select_item_data_1021, test_select_item);
	g_test_add_data_func("/teststk/Select Item 10.3.1",
				&select_item_data_1031, test_select_item);
	g_test_add_data_func("/teststk/Select Item 11.1.1",
				&select_item_data_1111, test_select_item);
	g_test_add_data_func("/teststk/Select Item 12.1.1",
				&select_item_data_1211, test_select_item);
	g_test_add_data_func("/teststk/Select Item 12.2.1",
				&select_item_data_1221, test_select_item);
	g_test_add_data_func("/teststk/Select Item 12.3.1",
				&select_item_data_1231, test_select_item);

	g_test_add_data_func("/teststk/Select Item response 1.1.1",
				&select_item_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 1.2.1",
				&select_item_response_data_121,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 1.3.1",
				&select_item_response_data_131,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 1.4.1",
				&select_item_response_data_141,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 1.4.2",
				&select_item_response_data_142,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 1.5.1",
				&select_item_response_data_151,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 3.1.1",
				&select_item_response_data_311,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 4.1.1",
				&select_item_response_data_411,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 5.1.1B",
				&select_item_response_data_511b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 6.1.1",
				&select_item_response_data_611,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 6.2.1",
				&select_item_response_data_621,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 7.1.1",
				&select_item_response_data_711,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Select Item response 8.1.1",
				&select_item_response_data_811,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Send SMS 1.1.1",
				&send_sms_data_111, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 1.2.1",
				&send_sms_data_121, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 1.3.1",
				&send_sms_data_131, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 1.4.1",
				&send_sms_data_141, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 1.5.1",
				&send_sms_data_151, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 1.6.1",
				&send_sms_data_161, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 1.7.1",
				&send_sms_data_171, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 1.8.1",
				&send_sms_data_181, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 2.1.1",
				&send_sms_data_211, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 2.1.2",
				&send_sms_data_212, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 2.1.3",
				&send_sms_data_213, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 3.1.1",
				&send_sms_data_311, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 3.2.1",
				&send_sms_data_321, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.1.1",
				&send_sms_data_411, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.1.2",
				&send_sms_data_412, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.2.1",
				&send_sms_data_421, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.2.2",
				&send_sms_data_422, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.3.1",
				&send_sms_data_431, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.3.2",
				&send_sms_data_432, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.4.1",
				&send_sms_data_441, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.4.2",
				&send_sms_data_442, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.4.3",
				&send_sms_data_443, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.5.1",
				&send_sms_data_451, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.5.2",
				&send_sms_data_452, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.5.3",
				&send_sms_data_453, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.6.1",
				&send_sms_data_461, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.6.2",
				&send_sms_data_462, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.6.3",
				&send_sms_data_463, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.7.1",
				&send_sms_data_471, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.7.2",
				&send_sms_data_472, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.7.3",
				&send_sms_data_473, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.8.1",
				&send_sms_data_481, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.8.2",
				&send_sms_data_482, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.8.3",
				&send_sms_data_483, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.9.1",
				&send_sms_data_491, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.9.2",
				&send_sms_data_492, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.9.3",
				&send_sms_data_493, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.10.1",
				&send_sms_data_4101, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 4.10.2",
				&send_sms_data_4102, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 5.1.1",
				&send_sms_data_511, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 5.1.2",
				&send_sms_data_512, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 5.1.3",
				&send_sms_data_513, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 6.1.1",
				&send_sms_data_611, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 6.1.2",
				&send_sms_data_612, test_send_sms);
	g_test_add_data_func("/teststk/Send SMS 6.1.3",
				&send_sms_data_613, test_send_sms);

	g_test_add_data_func("/teststk/Send SS 1.1.1",
				&send_ss_data_111, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 1.4.1",
				&send_ss_data_141, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 1.5.1",
				&send_ss_data_151, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 1.6.1",
				&send_ss_data_161, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 2.1.1",
				&send_ss_data_211, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 2.2.1",
				&send_ss_data_221, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 2.3.1",
				&send_ss_data_231, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 2.4.1",
				&send_ss_data_241, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 3.1.1",
				&send_ss_data_311, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.1.1",
				&send_ss_data_411, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.1.2",
				&send_ss_data_412, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.2.1",
				&send_ss_data_421, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.2.2",
				&send_ss_data_422, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.3.1",
				&send_ss_data_431, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.3.2",
				&send_ss_data_432, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.4.1",
				&send_ss_data_441, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.4.2",
				&send_ss_data_442, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.4.3",
				&send_ss_data_443, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.5.1",
				&send_ss_data_451, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.5.2",
				&send_ss_data_452, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.5.3",
				&send_ss_data_453, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.6.1",
				&send_ss_data_461, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.6.2",
				&send_ss_data_462, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.6.3",
				&send_ss_data_463, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.7.1",
				&send_ss_data_471, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.7.2",
				&send_ss_data_472, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.7.3",
				&send_ss_data_473, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.8.1",
				&send_ss_data_481, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.8.2",
				&send_ss_data_482, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.8.3",
				&send_ss_data_483, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.9.1",
				&send_ss_data_491, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.9.2",
				&send_ss_data_492, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.9.3",
				&send_ss_data_493, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.10.1",
				&send_ss_data_4101, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 4.10.2",
				&send_ss_data_4102, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 5.1.1",
				&send_ss_data_511, test_send_ss);
	g_test_add_data_func("/teststk/Send SS 6.1.1",
				&send_ss_data_611, test_send_ss);

	g_test_add_data_func("/teststk/Send USSD 1.1.1",
				&send_ussd_data_111, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 1.2.1",
				&send_ussd_data_121, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 1.3.1",
				&send_ussd_data_131, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 1.6.1",
				&send_ussd_data_161, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 1.7.1",
				&send_ussd_data_171, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 1.8.1",
				&send_ussd_data_181, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 2.1.1",
				&send_ussd_data_211, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 2.2.1",
				&send_ussd_data_221, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 2.3.1",
				&send_ussd_data_231, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 2.4.1",
				&send_ussd_data_241, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 3.1.1",
				&send_ussd_data_311, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.1.1",
				&send_ussd_data_411, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.1.2",
				&send_ussd_data_412, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.2.1",
				&send_ussd_data_421, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.2.2",
				&send_ussd_data_422, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.3.1",
				&send_ussd_data_431, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.3.2",
				&send_ussd_data_432, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.4.1",
				&send_ussd_data_441, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.4.2",
				&send_ussd_data_442, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.4.3",
				&send_ussd_data_443, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.5.1",
				&send_ussd_data_451, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.5.2",
				&send_ussd_data_452, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.5.3",
				&send_ussd_data_453, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.6.1",
				&send_ussd_data_461, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.6.2",
				&send_ussd_data_462, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.6.3",
				&send_ussd_data_463, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.7.1",
				&send_ussd_data_471, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.7.2",
				&send_ussd_data_472, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.7.3",
				&send_ussd_data_473, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.8.1",
				&send_ussd_data_481, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.8.2",
				&send_ussd_data_482, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.8.3",
				&send_ussd_data_483, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.9.1",
				&send_ussd_data_491, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.9.2",
				&send_ussd_data_492, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.9.3",
				&send_ussd_data_493, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.10.1",
				&send_ussd_data_4101, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 4.10.2",
				&send_ussd_data_4102, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 5.1.1",
				&send_ussd_data_511, test_send_ussd);
	g_test_add_data_func("/teststk/Send USSD 6.1.1",
				&send_ussd_data_611, test_send_ussd);

	g_test_add_data_func("/teststk/Send SMS response 1.1.1",
				&send_sms_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Send SMS response 1.2.1",
				&send_sms_response_data_121,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Send SMS response 3.1.1B",
				&send_sms_response_data_311b,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Setup Call 1.1.1",
				&setup_call_data_111, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 1.4.1",
				&setup_call_data_141, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 1.5.1",
				&setup_call_data_151, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 1.8.1",
				&setup_call_data_181, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 1.9.1",
				&setup_call_data_191, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 1.10.1",
				&setup_call_data_1101, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 1.11.1",
				&setup_call_data_1111, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 1.12.1",
				&setup_call_data_1121, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 2.1.1",
				&setup_call_data_211, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 3.1.1",
				&setup_call_data_311, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 3.2.1",
				&setup_call_data_321, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 3.3.1",
				&setup_call_data_331, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 3.4.1",
				&setup_call_data_341, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.1.1",
				&setup_call_data_411, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.1.2",
				&setup_call_data_412, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.2.1",
				&setup_call_data_421, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.2.2",
				&setup_call_data_422, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.3.1",
				&setup_call_data_431, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.3.2",
				&setup_call_data_432, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.4.1",
				&setup_call_data_441, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.4.2",
				&setup_call_data_442, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.4.3",
				&setup_call_data_443, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.5.1",
				&setup_call_data_451, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.5.2",
				&setup_call_data_452, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.5.3",
				&setup_call_data_453, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.6.1",
				&setup_call_data_461, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.6.2",
				&setup_call_data_462, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.6.3",
				&setup_call_data_463, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.7.1",
				&setup_call_data_471, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.7.2",
				&setup_call_data_472, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.7.3",
				&setup_call_data_473, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.8.1",
				&setup_call_data_481, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.8.2",
				&setup_call_data_482, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.8.3",
				&setup_call_data_483, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.9.1",
				&setup_call_data_491, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.9.2",
				&setup_call_data_492, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.9.3",
				&setup_call_data_493, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.10.1",
				&setup_call_data_4101, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 4.10.2",
				&setup_call_data_4102, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 5.1.1",
				&setup_call_data_511, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 5.2.1",
				&setup_call_data_521, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 6.1.1",
				&setup_call_data_611, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 6.2.1",
				&setup_call_data_621, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 7.1.1",
				&setup_call_data_711, test_setup_call);
	g_test_add_data_func("/teststk/Setup Call 7.2.1",
				&setup_call_data_721, test_setup_call);

	g_test_add_data_func("/teststk/Set Up Call response 1.1.1",
				&set_up_call_response_data_111,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.2.1",
				&set_up_call_response_data_121,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.4.1",
				&set_up_call_response_data_141,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.5.1",
				&set_up_call_response_data_151,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.6.1",
				&set_up_call_response_data_161,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.7.1A",
				&set_up_call_response_data_171a,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.7.1B",
				&set_up_call_response_data_171b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.10.1",
				&set_up_call_response_data_1101,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.11.1B",
				&set_up_call_response_data_1111b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 1.12.1",
				&set_up_call_response_data_1121,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Call response 3.1.1B",
				&set_up_call_response_data_311b,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Refresh 1.2.1",
				&refresh_data_121, test_refresh);
	g_test_add_data_func("/teststk/Refresh 1.5.1",
				&refresh_data_151, test_refresh);

	g_test_add_data_func("/teststk/Refresh response 1.1.1A",
				&refresh_response_data_111a,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 1.1.1B",
				&refresh_response_data_111b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 1.2.1A",
				&refresh_response_data_121a,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 1.2.1B",
				&refresh_response_data_121b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 1.3.1A",
				&refresh_response_data_131a,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 1.3.1B",
				&refresh_response_data_141b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 1.4.1A",
				&refresh_response_data_141a,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 1.4.1B",
				&refresh_response_data_141b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 1.7.1",
				&refresh_response_data_171,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 2.4.1A",
				&refresh_response_data_241a,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 2.4.1B",
				&refresh_response_data_241b,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 3.1.1",
				&refresh_response_data_311,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Refresh response 3.1.2",
				&refresh_response_data_312,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Polling off 1.1.2",
				&polling_off_data_112, test_polling_off);

	g_test_add_data_func("/teststk/Polling off response 1.1.2",
				&polling_off_response_data_112,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Provide Local Info 1.2.1",
			&provide_local_info_data_121, test_provide_local_info);
	g_test_add_data_func("/teststk/Provide Local Info 1.4.1",
			&provide_local_info_data_141, test_provide_local_info);
	g_test_add_data_func("/teststk/Provide Local Info 1.5.1",
			&provide_local_info_data_151, test_provide_local_info);
	g_test_add_data_func("/teststk/Provide Local Info 1.8.1",
			&provide_local_info_data_181, test_provide_local_info);
	g_test_add_data_func("/teststk/Provide Local Info 1.9.1",
			&provide_local_info_data_191, test_provide_local_info);
	g_test_add_data_func("/teststk/Provide Local Info 1.11.1",
			&provide_local_info_data_1111, test_provide_local_info);

	g_test_add_data_func("/teststk/Provide Local Info response 1.1.1A",
			&provide_local_info_response_data_111a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.1.1B",
			&provide_local_info_response_data_111b,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.2.1",
			&provide_local_info_response_data_121,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.3.1",
			&provide_local_info_response_data_131,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.4.1",
			&provide_local_info_response_data_141,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.5.1",
			&provide_local_info_response_data_151,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.6.1",
			&provide_local_info_response_data_161,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.7.1",
			&provide_local_info_response_data_171,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.8.1",
			&provide_local_info_response_data_181,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.9.1",
			&provide_local_info_response_data_191,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.11.1",
			&provide_local_info_response_data_1111,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.12.1",
			&provide_local_info_response_data_1121,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.13.1",
			&provide_local_info_response_data_1131,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.14.1",
			&provide_local_info_response_data_1141,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.15.1",
			&provide_local_info_response_data_1151,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.16.1",
			&provide_local_info_response_data_1161,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Provide Local Info response 1.17.1",
			&provide_local_info_response_data_1171,
			test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Setup Event List 1.1.1",
			&setup_event_list_data_111, test_setup_event_list);
	g_test_add_data_func("/teststk/Setup Event List 1.2.1",
			&setup_event_list_data_121, test_setup_event_list);
	g_test_add_data_func("/teststk/Setup Event List 1.2.2",
			&setup_event_list_data_122, test_setup_event_list);
	g_test_add_data_func("/teststk/Setup Event List 1.3.1",
			&setup_event_list_data_131, test_setup_event_list);
	g_test_add_data_func("/teststk/Setup Event List 1.3.2",
			&setup_event_list_data_132, test_setup_event_list);
	g_test_add_data_func("/teststk/Setup Event List 1.4.1",
			&setup_event_list_data_141, test_setup_event_list);

	g_test_add_data_func("/teststk/Set Up Event List response 1.1.1",
			&set_up_event_list_response_data_111,
			test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Perform Card APDU 1.1.1",
			&perform_card_apdu_data_111, test_perform_card_apdu);
	g_test_add_data_func("/teststk/Perform Card APDU 1.1.2",
			&perform_card_apdu_data_112, test_perform_card_apdu);
	g_test_add_data_func("/teststk/Perform Card APDU 1.2.1",
			&perform_card_apdu_data_121, test_perform_card_apdu);
	g_test_add_data_func("/teststk/Perform Card APDU 1.2.2",
			&perform_card_apdu_data_122, test_perform_card_apdu);
	g_test_add_data_func("/teststk/Perform Card APDU 1.2.3",
			&perform_card_apdu_data_123, test_perform_card_apdu);
	g_test_add_data_func("/teststk/Perform Card APDU 1.2.4",
			&perform_card_apdu_data_124, test_perform_card_apdu);
	g_test_add_data_func("/teststk/Perform Card APDU 1.2.5",
			&perform_card_apdu_data_125, test_perform_card_apdu);
	g_test_add_data_func("/teststk/Perform Card APDU 1.5.1",
			&perform_card_apdu_data_151, test_perform_card_apdu);
	g_test_add_data_func("/teststk/Perform Card APDU 2.1.1",
			&perform_card_apdu_data_211, test_perform_card_apdu);

	g_test_add_data_func("/teststk/Get Reader Status 1.1.1",
			&get_reader_status_data_111, test_get_reader_status);

	g_test_add_data_func("/teststk/Timer Management 1.1.1",
			&timer_mgmt_data_111, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.1.2",
			&timer_mgmt_data_112, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.1.3",
			&timer_mgmt_data_113, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.1.4",
			&timer_mgmt_data_114, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.2.1",
			&timer_mgmt_data_121, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.2.2",
			&timer_mgmt_data_122, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.2.3",
			&timer_mgmt_data_123, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.2.4",
			&timer_mgmt_data_124, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.3.1",
			&timer_mgmt_data_131, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.3.2",
			&timer_mgmt_data_132, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.3.3",
			&timer_mgmt_data_133, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.3.4",
			&timer_mgmt_data_134, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.4.1",
			&timer_mgmt_data_141, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.4.2",
			&timer_mgmt_data_142, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.4.3",
			&timer_mgmt_data_143, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.4.4",
			&timer_mgmt_data_144, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.4.5",
			&timer_mgmt_data_145, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.4.6",
			&timer_mgmt_data_146, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.4.7",
			&timer_mgmt_data_147, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.4.8",
			&timer_mgmt_data_148, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.5.1",
			&timer_mgmt_data_151, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.5.2",
			&timer_mgmt_data_152, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.5.3",
			&timer_mgmt_data_153, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.5.4",
			&timer_mgmt_data_154, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.5.5",
			&timer_mgmt_data_155, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.5.6",
			&timer_mgmt_data_156, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.5.7",
			&timer_mgmt_data_157, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.5.8",
			&timer_mgmt_data_158, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.6.1",
			&timer_mgmt_data_161, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.6.2",
			&timer_mgmt_data_162, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.6.3",
			&timer_mgmt_data_163, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.6.4",
			&timer_mgmt_data_164, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.6.5",
			&timer_mgmt_data_165, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.6.6",
			&timer_mgmt_data_166, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.6.7",
			&timer_mgmt_data_167, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 1.6.8",
			&timer_mgmt_data_168, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 2.1.1",
			&timer_mgmt_data_211, test_timer_mgmt);
	g_test_add_data_func("/teststk/Timer Management 2.2.1",
			&timer_mgmt_data_221, test_timer_mgmt);

	g_test_add_data_func("/teststk/Timer Management response 1.1.1",
			&timer_mgmt_response_data_111,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.1.2",
			&timer_mgmt_response_data_112,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.1.4",
			&timer_mgmt_response_data_114,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.2.1",
			&timer_mgmt_response_data_121,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.2.2",
			&timer_mgmt_response_data_122,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.2.4",
			&timer_mgmt_response_data_124,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.3.1",
			&timer_mgmt_response_data_131,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.3.2",
			&timer_mgmt_response_data_132,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.3.4",
			&timer_mgmt_response_data_134,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.1A",
			&timer_mgmt_response_data_141a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.1B",
			&timer_mgmt_response_data_141b,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.2A",
			&timer_mgmt_response_data_142a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.3A",
			&timer_mgmt_response_data_143a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.4A",
			&timer_mgmt_response_data_144a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.5A",
			&timer_mgmt_response_data_145a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.6A",
			&timer_mgmt_response_data_146a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.7A",
			&timer_mgmt_response_data_147a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.4.8A",
			&timer_mgmt_response_data_148a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.1A",
			&timer_mgmt_response_data_151a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.1B",
			&timer_mgmt_response_data_151b,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.2A",
			&timer_mgmt_response_data_152a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.3A",
			&timer_mgmt_response_data_153a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.4A",
			&timer_mgmt_response_data_154a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.5A",
			&timer_mgmt_response_data_155a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.6A",
			&timer_mgmt_response_data_156a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.7A",
			&timer_mgmt_response_data_157a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.5.8A",
			&timer_mgmt_response_data_158a,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.6.3",
			&timer_mgmt_response_data_163,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.6.4",
			&timer_mgmt_response_data_164,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.6.5",
			&timer_mgmt_response_data_165,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.6.6",
			&timer_mgmt_response_data_166,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Timer Management response 1.6.7",
			&timer_mgmt_response_data_167,
			test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Setup Idle Mode Text 1.1.1",
		&setup_idle_mode_text_data_111, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 1.2.1",
		&setup_idle_mode_text_data_121, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 1.3.1",
		&setup_idle_mode_text_data_131, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 1.7.1",
		&setup_idle_mode_text_data_171, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 2.1.1",
		&setup_idle_mode_text_data_211, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 2.2.1",
		&setup_idle_mode_text_data_221, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 2.3.1",
		&setup_idle_mode_text_data_231, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 2.4.1",
		&setup_idle_mode_text_data_241, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 3.1.1",
		&setup_idle_mode_text_data_311, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.1.1",
		&setup_idle_mode_text_data_411, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.1.2",
		&setup_idle_mode_text_data_412, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.2.1",
		&setup_idle_mode_text_data_421, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.2.2",
		&setup_idle_mode_text_data_422, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.3.1",
		&setup_idle_mode_text_data_431, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.3.2",
		&setup_idle_mode_text_data_432, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.4.1",
		&setup_idle_mode_text_data_441, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.4.2",
		&setup_idle_mode_text_data_442, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.4.3",
		&setup_idle_mode_text_data_443, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.5.1",
		&setup_idle_mode_text_data_451, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.5.2",
		&setup_idle_mode_text_data_452, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.5.3",
		&setup_idle_mode_text_data_453, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.6.1",
		&setup_idle_mode_text_data_461, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.6.2",
		&setup_idle_mode_text_data_462, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.6.3",
		&setup_idle_mode_text_data_463, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.7.1",
		&setup_idle_mode_text_data_471, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.7.2",
		&setup_idle_mode_text_data_472, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.7.3",
		&setup_idle_mode_text_data_473, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.8.1",
		&setup_idle_mode_text_data_481, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.8.2",
		&setup_idle_mode_text_data_482, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.8.3",
		&setup_idle_mode_text_data_483, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.9.1",
		&setup_idle_mode_text_data_491, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.9.2",
		&setup_idle_mode_text_data_492, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.9.3",
		&setup_idle_mode_text_data_493, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.10.1",
		&setup_idle_mode_text_data_4101, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 4.10.2",
		&setup_idle_mode_text_data_4102, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 5.1.1",
		&setup_idle_mode_text_data_511, test_setup_idle_mode_text);
	g_test_add_data_func("/teststk/Setup Idle Mode Text 6.1.1",
		&setup_idle_mode_text_data_611, test_setup_idle_mode_text);

	g_test_add_data_func("/teststk/Set Up Idle Mode Text response 1.1.1",
			&set_up_idle_mode_text_response_data_111,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Idle Mode Text response 2.1.1B",
			&set_up_idle_mode_text_response_data_211b,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Set Up Idle Mode Text response 2.4.1",
			&set_up_idle_mode_text_response_data_241,
			test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Run At Command 1.1.1",
			&run_at_command_data_111, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 1.2.1",
			&run_at_command_data_121, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 1.3.1",
			&run_at_command_data_131, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 2.1.1",
			&run_at_command_data_211, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 2.2.1",
			&run_at_command_data_221, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 2.3.1",
			&run_at_command_data_231, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 2.4.1",
			&run_at_command_data_241, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 2.5.1",
			&run_at_command_data_251, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.1.1",
			&run_at_command_data_311, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.1.2",
			&run_at_command_data_312, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.2.1",
			&run_at_command_data_321, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.2.2",
			&run_at_command_data_322, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.3.1",
			&run_at_command_data_331, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.3.2",
			&run_at_command_data_332, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.4.1",
			&run_at_command_data_341, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.4.2",
			&run_at_command_data_342, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.4.3",
			&run_at_command_data_343, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.5.1",
			&run_at_command_data_351, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.5.2",
			&run_at_command_data_352, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.5.3",
			&run_at_command_data_353, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.6.1",
			&run_at_command_data_361, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.6.2",
			&run_at_command_data_362, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.6.3",
			&run_at_command_data_363, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.7.1",
			&run_at_command_data_371, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.7.2",
			&run_at_command_data_372, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.7.3",
			&run_at_command_data_373, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.8.1",
			&run_at_command_data_381, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.8.2",
			&run_at_command_data_382, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.8.3",
			&run_at_command_data_383, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.9.1",
			&run_at_command_data_391, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.9.2",
			&run_at_command_data_392, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.9.3",
			&run_at_command_data_393, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.10.1",
			&run_at_command_data_3101, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 3.10.2",
			&run_at_command_data_3102, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 4.1.1",
			&run_at_command_data_411, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 5.1.1",
			&run_at_command_data_511, test_run_at_command);
	g_test_add_data_func("/teststk/Run At Command 6.1.1",
			&run_at_command_data_611, test_run_at_command);

	g_test_add_data_func("/teststk/Run AT Command response 1.1.1",
			&run_at_command_response_data_111,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Run AT Command response 2.1.1B",
			&run_at_command_response_data_211b,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Run AT Command response 2.5.1",
			&run_at_command_response_data_251,
			test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Send DTMF 1.1.1",
			&send_dtmf_data_111, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 1.2.1",
			&send_dtmf_data_121, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 1.3.1",
			&send_dtmf_data_131, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 2.1.1",
			&send_dtmf_data_211, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 2.2.1",
			&send_dtmf_data_221, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 2.3.1",
			&send_dtmf_data_231, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 3.1.1",
			&send_dtmf_data_311, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.1.1",
			&send_dtmf_data_411, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.1.2",
			&send_dtmf_data_412, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.2.1",
			&send_dtmf_data_421, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.2.2",
			&send_dtmf_data_422, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.3.1",
			&send_dtmf_data_431, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.3.2",
			&send_dtmf_data_432, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.4.1",
			&send_dtmf_data_441, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.4.2",
			&send_dtmf_data_442, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.4.3",
			&send_dtmf_data_443, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.5.1",
			&send_dtmf_data_451, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.5.2",
			&send_dtmf_data_452, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.5.3",
			&send_dtmf_data_453, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.6.1",
			&send_dtmf_data_461, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.6.2",
			&send_dtmf_data_462, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.6.3",
			&send_dtmf_data_463, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.7.1",
			&send_dtmf_data_471, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.7.2",
			&send_dtmf_data_472, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.7.3",
			&send_dtmf_data_473, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.8.1",
			&send_dtmf_data_481, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.8.2",
			&send_dtmf_data_482, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.8.3",
			&send_dtmf_data_483, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.9.1",
			&send_dtmf_data_491, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.9.2",
			&send_dtmf_data_492, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.9.3",
			&send_dtmf_data_493, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.10.1",
			&send_dtmf_data_4101, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 4.10.2",
			&send_dtmf_data_4102, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 5.1.1",
			&send_dtmf_data_511, test_send_dtmf);
	g_test_add_data_func("/teststk/Send DTMF 6.1.1",
			&send_dtmf_data_611, test_send_dtmf);

	g_test_add_data_func("/teststk/Send DTMF response 1.1.1",
			&send_dtmf_response_data_111,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Send DTMF response 1.4.1",
			&send_dtmf_response_data_141,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Send DTMF response 2.1.1B",
			&send_dtmf_response_data_211b,
			test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Language Notification 1.1.1",
		&language_notification_data_111, test_language_notification);
	g_test_add_data_func("/teststk/Language Notification 1.2.1",
		&language_notification_data_121, test_language_notification);

	g_test_add_data_func("/teststk/Language Notification response 1.1.1",
			&language_notification_response_data_111,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Language Notification response 1.2.1",
			&language_notification_response_data_121,
			test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Launch Browser 1.1.1",
				&launch_browser_data_111, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 1.2.1",
				&launch_browser_data_121, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 1.3.1",
				&launch_browser_data_131, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 1.4.1",
				&launch_browser_data_141, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 2.1.1",
				&launch_browser_data_211, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 2.2.1",
				&launch_browser_data_221, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 2.3.1",
				&launch_browser_data_231, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 3.1.1",
				&launch_browser_data_311, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 4.1.1",
				&launch_browser_data_411, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 4.2.1",
				&launch_browser_data_421, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.1.1",
				&launch_browser_data_511, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.1.2",
				&launch_browser_data_512, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.2.1",
				&launch_browser_data_521, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.2.2",
				&launch_browser_data_522, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.3.1",
				&launch_browser_data_531, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.3.2",
				&launch_browser_data_532, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.4.1",
				&launch_browser_data_541, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.4.2",
				&launch_browser_data_542, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.4.3",
				&launch_browser_data_543, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.5.1",
				&launch_browser_data_551, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.5.2",
				&launch_browser_data_552, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.5.3",
				&launch_browser_data_553, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.6.1",
				&launch_browser_data_561, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.6.2",
				&launch_browser_data_562, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.6.3",
				&launch_browser_data_563, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.7.1",
				&launch_browser_data_571, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.7.2",
				&launch_browser_data_572, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.7.3",
				&launch_browser_data_573, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.8.1",
				&launch_browser_data_581, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.8.2",
				&launch_browser_data_582, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.8.3",
				&launch_browser_data_583, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.9.1",
				&launch_browser_data_591, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.9.2",
				&launch_browser_data_592, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.9.3",
				&launch_browser_data_593, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.10.1",
				&launch_browser_data_5101, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 5.10.2",
				&launch_browser_data_5102, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 6.1.1",
				&launch_browser_data_611, test_launch_browser);
	g_test_add_data_func("/teststk/Launch Browser 7.1.1",
				&launch_browser_data_711, test_launch_browser);

	g_test_add_data_func("/teststk/Launch Browser response 1.1.1",
			&launch_browser_response_data_111,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Launch Browser response 2.1.1",
			&launch_browser_response_data_211,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Launch Browser response 2.2.1",
			&launch_browser_response_data_221,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Launch Browser response 2.3.1",
			&launch_browser_response_data_231,
			test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Launch Browser response 4.1.1B",
			&launch_browser_response_data_411b,
			test_terminal_response_encoding);


	g_test_add_data_func("/teststk/Open channel 2.1.1",
				&open_channel_data_211, test_open_channel);
	g_test_add_data_func("/teststk/Open channel 2.2.1",
				&open_channel_data_221, test_open_channel);
	g_test_add_data_func("/teststk/Open channel 2.3.1",
				&open_channel_data_231, test_open_channel);
	g_test_add_data_func("/teststk/Open channel 2.4.1",
				&open_channel_data_241, test_open_channel);
	g_test_add_data_func("/teststk/Open channel 5.1.1",
				&open_channel_data_511, test_open_channel);
	g_test_add_data_func("/teststk/Open channel response 2.1.1",
				&open_channel_response_data_211,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Open channel response 2.7.1",
				&open_channel_response_data_271,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Close channel 1.1.1",
				&close_channel_data_111, test_close_channel);
	g_test_add_data_func("/teststk/Close channel 2.1.1",
				&close_channel_data_211, test_close_channel);
	g_test_add_data_func("/teststk/Close channel response 1.2.1",
				&close_channel_response_data_121,
				test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Close channel response 1.3.1",
				&close_channel_response_data_131,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Receive data 1.1.1",
				&receive_data_data_111, test_receive_data);
	g_test_add_data_func("/teststk/Receive data 2.1.1",
				&receive_data_data_211, test_receive_data);
	g_test_add_data_func("/teststk/Receive data response 1.1.1",
				&receive_data_response_data_111,
				test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Send data 1.1.1",
					&send_data_data_111, test_send_data);
	g_test_add_data_func("/teststk/Send data 1.2.1",
					&send_data_data_121, test_send_data);
	g_test_add_data_func("/teststk/Send data 2.1.1",
					&send_data_data_211, test_send_data);
	g_test_add_data_func("/teststk/Send data response 1.1.1",
					&send_data_response_data_111,
					test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Send data response 1.2.1",
					&send_data_response_data_121,
					test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Send data response 1.5.1",
					&send_data_response_data_151,
					test_terminal_response_encoding);

	g_test_add_data_func("/teststk/Get Channel status 1.1.1",
			&get_channel_status_data_111, test_get_channel_status);
	g_test_add_data_func("/teststk/Get Channel status response 1.1.1",
					&get_channel_status_response_data_111,
					test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Channel status response 1.2.1",
					&get_channel_status_response_data_121,
					test_terminal_response_encoding);
	g_test_add_data_func("/teststk/Get Channel status response 1.3.1",
					&get_channel_status_response_data_131,
					test_terminal_response_encoding);

	g_test_add_data_func("/teststk/SMS-PP data download 1.6.1",
			&sms_pp_data_download_data_161,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/SMS-PP data download 1.6.2",
			&sms_pp_data_download_data_162,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/SMS-PP data download 1.8.2",
			&sms_pp_data_download_data_182,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/CBS-PP data download 1.1",
			&cbs_pp_data_download_data_11, test_envelope_encoding);
	g_test_add_data_func("/teststk/CBS-PP data download 1.7",
			&cbs_pp_data_download_data_17, test_envelope_encoding);

	g_test_add_data_func("/teststk/Menu Selection 1.1.1",
			&menu_selection_data_111, test_envelope_encoding);
	g_test_add_data_func("/teststk/Menu Selection 1.1.2",
			&menu_selection_data_112, test_envelope_encoding);
	g_test_add_data_func("/teststk/Menu Selection 1.2.1",
			&menu_selection_data_121, test_envelope_encoding);
	g_test_add_data_func("/teststk/Menu Selection 1.2.2",
			&menu_selection_data_122, test_envelope_encoding);
	g_test_add_data_func("/teststk/Menu Selection 1.2.3",
			&menu_selection_data_123, test_envelope_encoding);
	g_test_add_data_func("/teststk/Menu Selection 2.1.1",
			&menu_selection_data_211, test_envelope_encoding);
	g_test_add_data_func("/teststk/Menu Selection 6.1.2",
			&menu_selection_data_612, test_envelope_encoding);
	g_test_add_data_func("/teststk/Menu Selection 6.4.1",
			&menu_selection_data_641, test_envelope_encoding);

	g_test_add_data_func("/teststk/Call Control 1.1.1A",
			&call_control_data_111a, test_envelope_encoding);
	g_test_add_data_func("/teststk/Call Control 1.1.1B",
			&call_control_data_111b, test_envelope_encoding);
	g_test_add_data_func("/teststk/Call Control 1.3.1A",
			&call_control_data_131a, test_envelope_encoding);
	g_test_add_data_func("/teststk/Call Control 1.3.1B",
			&call_control_data_131b, test_envelope_encoding);

	g_test_add_data_func("/teststk/MO Short Message Control 1.1.1A",
			&mo_short_message_control_data_111a,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/MO Short Message Control 1.1.1B",
			&mo_short_message_control_data_111b,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: MT Call 1.1.1",
			&event_download_mt_call_data_111,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: MT Call 1.1.2",
			&event_download_mt_call_data_112,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Call Connected 1.1.1",
			&event_download_call_connected_data_111,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Call Connected 1.1.2",
			&event_download_call_connected_data_112,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Call Disconnected 1.1.1",
			&event_download_call_disconnected_data_111,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Call Disconnected 1.1.2A",
			&event_download_call_disconnected_data_112a,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Call Disconnected 1.1.2B",
			&event_download_call_disconnected_data_112b,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Call Disconnected 1.1.2C",
			&event_download_call_disconnected_data_112c,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Call Disconnected 1.1.3A",
			&event_download_call_disconnected_data_113a,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Call Disconnected 1.1.3B",
			&event_download_call_disconnected_data_113b,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Call Disconnected 1.1.4A",
			&event_download_call_disconnected_data_114a,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Call Disconnected 1.1.4B",
			&event_download_call_disconnected_data_114b,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Location Status 1.1.1",
			&event_download_location_status_data_111,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Location Status 1.1.2A",
			&event_download_location_status_data_112a,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Location Status 1.1.2B",
			&event_download_location_status_data_112b,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Location Status 1.2.2",
			&event_download_location_status_data_122,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: User Activity 1.1.1",
			&event_download_user_activity_data_111,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Idle Screen Available 1.1.1",
			&event_download_idle_screen_available_data_111,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Card Reader Status 1.1.1A",
			&event_download_card_reader_status_data_111a,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 1.1.1B",
			&event_download_card_reader_status_data_111b,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 1.1.1C",
			&event_download_card_reader_status_data_111c,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 1.1.1D",
			&event_download_card_reader_status_data_111d,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 1.1.2A",
			&event_download_card_reader_status_data_112a,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 1.1.2B",
			&event_download_card_reader_status_data_112b,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 1.1.2C",
			&event_download_card_reader_status_data_112c,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 1.1.2D",
			&event_download_card_reader_status_data_112d,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 2.1.2A",
			&event_download_card_reader_status_data_212a,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Card Reader Status 2.1.2B",
			&event_download_card_reader_status_data_212b,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Language Selection 1.1.1",
			&event_download_language_selection_data_111,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Language Selection 1.2.2",
			&event_download_language_selection_data_122,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Browser Termination 1.1.1",
			&event_download_browser_termination_data_111,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Data Available 1.1.1",
			&event_download_data_available_data_111,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Data Available 2.1.1",
			&event_download_data_available_data_211,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Channel Status 1.3.1",
			&event_download_channel_status_data_131,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Channel Status 2.1.1",
			&event_download_channel_status_data_211,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Channel Status 2.2.1",
			&event_download_channel_status_data_221,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Event: Network Rejection 1.1.1",
			&event_download_network_rejection_data_111,
			test_envelope_encoding);
	g_test_add_data_func("/teststk/Event: Network Rejection 1.2.1",
			&event_download_network_rejection_data_121,
			test_envelope_encoding);

	g_test_add_data_func("/teststk/Timer Expiration 2.1.1",
			&timer_expiration_data_211, test_envelope_encoding);
	g_test_add_data_func("/teststk/Timer Expiration 2.2.1A",
			&timer_expiration_data_221a, test_envelope_encoding);

	g_test_add_data_func("/teststk/HTML Attribute Test 1",
				&html_attr_data_1, test_html_attr);
	g_test_add_data_func("/teststk/HTML Attribute Test 2",
				&html_attr_data_2, test_html_attr);
	g_test_add_data_func("/teststk/HTML Attribute Test 3",
				&html_attr_data_3, test_html_attr);
	g_test_add_data_func("/teststk/HTML Attribute Test 4",
				&html_attr_data_4, test_html_attr);

	g_test_add_data_func("/teststk/IMG to XPM Test 1",
				&xpm_test_1, test_img_to_xpm);
	g_test_add_data_func("/teststk/IMG to XPM Test 2",
				&xpm_test_2, test_img_to_xpm);
	g_test_add_data_func("/teststk/IMG to XPM Test 3",
				&xpm_test_3, test_img_to_xpm);
	g_test_add_data_func("/teststk/IMG to XPM Test 4",
				&xpm_test_4, test_img_to_xpm);
	g_test_add_data_func("/teststk/IMG to XPM Test 5",
				&xpm_test_5, test_img_to_xpm);
	g_test_add_data_func("/teststk/IMG to XPM Test 6",
				&xpm_test_6, test_img_to_xpm);

	return g_test_run();
}
