Merge "target: msm8909: Change target_volume_down function"
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index 89e60bd..6f72f15 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -63,6 +63,10 @@
#include <rpmb.h>
#endif
+#if ENABLE_WBC
+#include <pm_app_smbchg.h>
+#endif
+
#if DEVICE_TREE
#include <libfdt.h>
#include <dev_tree.h>
@@ -177,6 +181,8 @@
static device_info device = {DEVICE_MAGIC, 0, 0, 0, 0, {0}, {0},{0}};
static bool is_allow_unlock = 0;
+static char frp_ptns[2][8] = {"config","frp"};
+
struct atag_ptbl_entry
{
char name[16];
@@ -1586,7 +1592,6 @@
static int read_allow_oem_unlock(device_info *dev)
{
- const char *ptn_name = "frp";
unsigned offset;
int index;
unsigned long long ptn;
@@ -1594,11 +1599,15 @@
unsigned blocksize = mmc_get_device_blocksize();
char buf[blocksize];
- index = partition_get_index(ptn_name);
+ index = partition_get_index(frp_ptns[0]);
if (index == INVALID_PTN)
{
- dprintf(CRITICAL, "No '%s' partition found\n", ptn_name);
- return -1;
+ index = partition_get_index(frp_ptns[1]);
+ if (index == INVALID_PTN)
+ {
+ dprintf(CRITICAL, "Neither '%s' nor '%s' partition found\n", frp_ptns[0],frp_ptns[1]);
+ return -1;
+ }
}
ptn = partition_get_offset(index);
@@ -1618,20 +1627,22 @@
static int write_allow_oem_unlock(bool allow_unlock)
{
- const char *ptn_name = "frp";
unsigned offset;
-
int index;
unsigned long long ptn;
unsigned long long ptn_size;
unsigned blocksize = mmc_get_device_blocksize();
char buf[blocksize];
- index = partition_get_index(ptn_name);
+ index = partition_get_index(frp_ptns[0]);
if (index == INVALID_PTN)
{
- dprintf(CRITICAL, "No '%s' partition found\n", ptn_name);
- return -1;
+ index = partition_get_index(frp_ptns[1]);
+ if (index == INVALID_PTN)
+ {
+ dprintf(CRITICAL, "Neither '%s' nor '%s' partition found\n", frp_ptns[0],frp_ptns[1]);
+ return -1;
+ }
}
ptn = partition_get_offset(index);
@@ -3180,7 +3191,14 @@
if (!check_alarm_boot()) {
#endif
dprintf(SPEW, "Display Init: Start\n");
+#if ENABLE_WBC
+ if (!pm_appsbl_display_init_done())
+ target_display_init(device.display_panel);
+ else
+ display_image_on_screen();
+#else
target_display_init(device.display_panel);
+#endif
dprintf(SPEW, "Display Init: Done\n");
#if NO_ALARM_DISPLAY
}
diff --git a/arch/arm/include/arch/defines.h b/arch/arm/include/arch/defines.h
index 6f0985a..ffa766f 100644
--- a/arch/arm/include/arch/defines.h
+++ b/arch/arm/include/arch/defines.h
@@ -1,7 +1,7 @@
/*
* Copyright (c) 2008 Travis Geiselbrecht
*
- * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files
@@ -36,6 +36,8 @@
#define CACHE_LINE 32
#elif defined(ARM_CPU_CORE_KRAIT) || defined(ARM_CPU_CORE_A7)
#define CACHE_LINE 64
+#elif defined(ARM_CPU_CORE_KRYO)
+ #define CACHE_LINE 128
#else
#error unknown cpu
#endif
diff --git a/dev/fbcon/fbcon.c b/dev/fbcon/fbcon.c
index 4010f1b..885ce87 100644
--- a/dev/fbcon/fbcon.c
+++ b/dev/fbcon/fbcon.c
@@ -36,6 +36,9 @@
#include <platform.h>
#include <string.h>
#include <arch/ops.h>
+#if ENABLE_WBC
+#include <pm_app_smbchg.h>
+#endif
#include "font5x12.h"
@@ -339,6 +342,9 @@
unsigned total_y;
unsigned bytes_per_bpp;
unsigned image_base;
+#if DISPLAY_TYPE_MIPI
+ char *image = NULL;
+#endif
if (!config) {
dprintf(CRITICAL,"NULL configuration, image cannot be displayed\n");
@@ -354,10 +360,16 @@
(config->width)) + (total_x/2 - (SPLASH_IMAGE_WIDTH / 2)));
#if DISPLAY_TYPE_MIPI
+#if ENABLE_WBC
+ image = (pm_appsbl_charging_in_progress() ? image_batt888 : imageBuffer_rgb888);
+#else
+ image = imageBuffer_rgb888;
+#endif
+
if (bytes_per_bpp == 3) {
for (i = 0; i < SPLASH_IMAGE_HEIGHT; i++) {
memcpy (config->base + ((image_base + (i * (config->width))) * bytes_per_bpp),
- imageBuffer_rgb888 + (i * SPLASH_IMAGE_WIDTH * bytes_per_bpp),
+ image + (i * SPLASH_IMAGE_WIDTH * bytes_per_bpp),
SPLASH_IMAGE_WIDTH * bytes_per_bpp);
}
}
diff --git a/dev/gcdb/display/fastboot_oem_display.h b/dev/gcdb/display/fastboot_oem_display.h
index 7492d2f..9dd8b5c 100644
--- a/dev/gcdb/display/fastboot_oem_display.h
+++ b/dev/gcdb/display/fastboot_oem_display.h
@@ -30,9 +30,14 @@
#ifndef _FASTBOOT_OEM_DISPLAY_H_
#define _FASTBOOT_OEM_DISPLAY_H_
-/*---------------------------------------------------------------------------*/
-/* Lookup table for skip panels */
-/*---------------------------------------------------------------------------*/
+#define SIM_OVERRIDE_LEN 10
+
+enum {
+ SIM_NONE,
+ SIM_MODE,
+ SIM_SWTE,
+ SIM_HWTE,
+};
struct panel_lookup_list {
char name[MAX_PANEL_ID_LEN];
@@ -40,6 +45,15 @@
bool is_split_dsi;
};
+struct sim_lookup_list {
+ uint32_t sim_mode;
+ char override_string[SIM_OVERRIDE_LEN];
+};
+
+/*---------------------------------------------------------------------------*/
+/* Lookup table for skip panels */
+/*---------------------------------------------------------------------------*/
+
struct panel_lookup_list lookup_skip_panels[] = {
{"adv7533_1080p_video", "qcom,mdss_dsi_adv7533_1080p60_video", false},
{"adv7533_720p_video", "qcom,mdss_dsi_adv7533_720p60_video", false},
@@ -89,4 +103,10 @@
{"truly_wvga_video", "qcom,mdss_dsi_truly_wvga_video", false},
};
+struct sim_lookup_list lookup_sim[] = {
+ {SIM_MODE, "sim"},
+ {SIM_SWTE, "sim-swte"},
+ {SIM_HWTE, "sim-hwte"},
+};
+
#endif /*_FASTBOOT_OEM_DISPLAY_H_ */
diff --git a/dev/gcdb/display/gcdb_display.c b/dev/gcdb/display/gcdb_display.c
index bfb1153..d4fe865 100644
--- a/dev/gcdb/display/gcdb_display.c
+++ b/dev/gcdb/display/gcdb_display.c
@@ -408,6 +408,45 @@
return panelstruct;
}
+static void mdss_dsi_set_pll_src(void)
+{
+ struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
+
+ if (panelstruct.paneldata->panel_operating_mode & USE_DSI1_PLL_FLAG)
+ oem_data->dsi_pll_src = DSI_PLL1;
+
+ if (strcmp(oem_data->sec_panel, "")) {
+ if (oem_data->dsi_pll_src != DSI_PLL_DEFAULT) {
+ dprintf(CRITICAL, "Dual DSI config detected!"
+ "Use default PLL\n");
+ oem_data->dsi_pll_src = DSI_PLL_DEFAULT;
+ }
+ } else if (panelstruct.paneldata->slave_panel_node_id) {
+ if((dsi_video_mode_phy_db.pll_type != DSI_PLL_TYPE_THULIUM)
+ && (oem_data->dsi_pll_src == DSI_PLL1)) {
+ dprintf(CRITICAL, "Split DSI on 28nm/20nm!"
+ "Use DSI PLL0\n");
+ oem_data->dsi_pll_src = DSI_PLL0;
+ }
+ } else {
+ if ((dsi_video_mode_phy_db.pll_type != DSI_PLL_TYPE_THULIUM)
+ && !strcmp(panelstruct.paneldata->panel_destination,
+ "DISPLAY_1") && (oem_data->dsi_pll_src == DSI_PLL1)) {
+ dprintf(CRITICAL, "Single DSI with DSI-0 on 28nm/20nm!"
+ "Use DSI PLL0\n");
+ oem_data->dsi_pll_src = DSI_PLL0;
+ }
+ }
+
+ if (oem_data->dsi_pll_src == DSI_PLL1)
+ panelstruct.paneldata->panel_operating_mode |=
+ USE_DSI1_PLL_FLAG;
+ else
+ panelstruct.paneldata->panel_operating_mode &=
+ ~USE_DSI1_PLL_FLAG;
+
+}
+
int gcdb_display_init(const char *panel_name, uint32_t rev, void *base)
{
int ret = NO_ERROR;
@@ -419,6 +458,7 @@
if (pan_type == PANEL_TYPE_DSI) {
target_dsi_phy_config(&dsi_video_mode_phy_db);
+ mdss_dsi_set_pll_src();
if (dsi_panel_init(&(panel.panel_info), &panelstruct)) {
dprintf(CRITICAL, "DSI panel init failed!\n");
ret = ERROR;
diff --git a/dev/gcdb/display/gcdb_display.h b/dev/gcdb/display/gcdb_display.h
index 1fbc2f7..088aa05 100755
--- a/dev/gcdb/display/gcdb_display.h
+++ b/dev/gcdb/display/gcdb_display.h
@@ -43,6 +43,8 @@
#define BIST_SIZE 6
#define LANE_SIZE 45
+#define DSI_CFG_SIZE 15
+
/*---------------------------------------------------------------------------*/
/* API */
/*---------------------------------------------------------------------------*/
@@ -62,12 +64,23 @@
struct msm_panel_info *pinfo, struct mdss_dsi_phy_ctrl *phy_db);
void set_panel_cmd_string(const char *panel_name);
struct oem_panel_data mdss_dsi_get_oem_data(void);
+struct oem_panel_data *mdss_dsi_get_oem_data_ptr(void);
struct panel_struct mdss_dsi_get_panel_data(void);
struct oem_panel_data {
char panel[MAX_PANEL_ID_LEN];
+ char sec_panel[MAX_PANEL_ID_LEN];
bool cont_splash;
bool skip;
+ uint32_t sim_mode;
+ char dsi_config[DSI_CFG_SIZE];
+ uint32_t dsi_pll_src;
+};
+
+enum {
+ DSI_PLL_DEFAULT,
+ DSI_PLL0,
+ DSI_PLL1,
};
#endif /*_GCDB_DISPLAY_H_ */
diff --git a/dev/gcdb/display/gcdb_display_param.c b/dev/gcdb/display/gcdb_display_param.c
index 027207c..ce98cf0 100644
--- a/dev/gcdb/display/gcdb_display_param.c
+++ b/dev/gcdb/display/gcdb_display_param.c
@@ -37,38 +37,47 @@
#include "target/display.h"
#include "fastboot_oem_display.h"
-struct oem_panel_data oem_data = {{'\0'}, false, false};
+struct oem_panel_data oem_data = {{'\0'}, {'\0'}, false, false, SIM_NONE, "single_dsi", DSI_PLL_DEFAULT};
-void panel_name_to_dt_string(struct panel_lookup_list supp_panels[],
+static int panel_name_to_dt_string(struct panel_lookup_list supp_panels[],
uint32_t supp_panels_size,
- const char *panel_name, char **panel_node,
- char **slave_panel_node, int *panel_mode)
+ const char *panel_name, char **panel_node)
{
uint32_t i;
if (!panel_name) {
dprintf(CRITICAL, "Invalid panel name\n");
- return;
+ return ERR_NOT_VALID;
}
for (i = 0; i < supp_panels_size; i++) {
if (!strncmp(panel_name, supp_panels[i].name,
MAX_PANEL_ID_LEN)) {
*panel_node = supp_panels[i].panel_dt_string;
- if (supp_panels[i].is_split_dsi) {
- *slave_panel_node =
- supp_panels[i].panel_dt_string;
- *panel_mode = DUAL_DSI_FLAG;
- } else {
- *panel_mode = 0;
- }
+ return supp_panels[i].is_split_dsi;
+ }
+ }
+
+ dprintf(CRITICAL, "Panel_name:%s not found in lookup table\n",
+ panel_name);
+ return ERR_NOT_FOUND;
+}
+
+void sim_override_to_cmdline(struct sim_lookup_list sim[],
+ uint32_t sim_size, uint32_t sim_mode,
+ char **sim_string)
+{
+ uint32_t i;
+
+ for (i = 0; i < sim_size; i++) {
+ if (sim_mode == sim[i].sim_mode) {
+ *sim_string = sim[i].override_string;
break;
}
}
- if (i == supp_panels_size)
- dprintf(CRITICAL, "Panel_name:%s not found in lookup table\n",
- panel_name);
+ if (i == sim_size)
+ dprintf(CRITICAL, "Sim_mode not found in lookup table\n");
}
struct oem_panel_data mdss_dsi_get_oem_data(void)
@@ -76,21 +85,106 @@
return oem_data;
}
+struct oem_panel_data *mdss_dsi_get_oem_data_ptr(void)
+{
+ return &oem_data;
+}
+
+static char *get_panel_token_end(const char *string)
+{
+ char *ch_hash = NULL, *ch_col = NULL;
+
+ /* ':' and '#' are delimiters in the string */
+ ch_col = strchr((char *) string, ':');
+ ch_hash = strchr((char *) string, '#');
+
+ if (ch_col && ch_hash)
+ return ((ch_col < ch_hash) ? ch_col : ch_hash);
+ else if (ch_col)
+ return ch_col;
+ else if (ch_hash)
+ return ch_hash;
+ return NULL;
+}
+
void set_panel_cmd_string(const char *panel_name)
{
- char *ch = NULL;
+ char *ch = NULL, *ch_tmp = NULL;
int i;
panel_name += strspn(panel_name, " ");
- /* Panel string */
- ch = strchr((char *) panel_name, ':');
+ /* Primary panel string */
+ ch = strstr((char *) panel_name, "prim:");
if (ch) {
- for (i = 0; (panel_name + i) < ch; i++)
- oem_data.panel[i] = *(panel_name + i);
+ /*
+ * Parse the primary panel for cases where 'prim' prefix
+ * is present in the fastboot oem command before primary
+ * panel string.
+ * Examples:
+ * 1.) fastboot oem select-display-panel prim:jdi_1080p_video:sec:sharp_1080p_cmd
+ * 2.) fastboot oem select-display-panel prim:jdi_1080p_video:skip:sec:sharp_1080p_cmd
+ * 3.) fastboot oem select-display-panel prim:jdi_1080p_video:disable:sec:sharp_1080p_cmd
+ * 4.) fastboot oem select-display-panel prim:jdi_1080p_video:skip#sim:sec:sharp_1080p_cmd
+ */
+ ch += 5;
+ ch_tmp = get_panel_token_end((const char*) ch);
+ if (!ch_tmp)
+ ch_tmp = ch + strlen(ch);
+ for (i = 0; (ch + i) < ch_tmp; i++)
+ oem_data.panel[i] = *(ch + i);
oem_data.panel[i] = '\0';
} else {
- strlcpy(oem_data.panel, panel_name, MAX_PANEL_ID_LEN);
+ /*
+ * Check if secondary panel string is present.
+ * The 'prim' prefix definitely needs to be present
+ * to specify primary panel for cases where secondary panel
+ * is also specified in fastboot oem command. Otherwise, it
+ * becomes tough to parse the fastboot oem command for primary
+ * panel. If 'sec' prefix is used without 'prim' prefix, it
+ * means the default panel needs to be picked as primary panel.
+ * Example:
+ * fastboot oem select-display-panel sec:sharp_1080p_cmd
+ */
+ ch = strstr((char *) panel_name, "sec:");
+ if (!ch) {
+ /*
+ * This code will be executed for cases where the
+ * secondary panel is not specified i.e., single/split
+ * DSI cases.
+ * Examples:
+ * 1.) fastboot oem select-display-panel jdi_1080p_video
+ * 2.) fastboot oem select-display-panel sharp_1080p_cmd:skip
+ * 3.) fastboot oem select-display-panel sharp_1080p_cmd:disable
+ * 4.) fastboot oem select-display-panel sim_cmd_panel#sim-swte
+ */
+ ch = get_panel_token_end(panel_name);
+ if (ch) {
+ for (i = 0; (panel_name + i) < ch; i++)
+ oem_data.panel[i] =
+ *(panel_name + i);
+ oem_data.panel[i] = '\0';
+ } else {
+ strlcpy(oem_data.panel, panel_name,
+ MAX_PANEL_ID_LEN);
+ }
+ }
+ }
+
+ /*
+ * Secondary panel string.
+ * This is relatively simple. The secondary panel string gets
+ * parsed if the 'sec' prefix is present.
+ */
+ ch = strstr((char *) panel_name, "sec:");
+ if (ch) {
+ ch += 4;
+ ch_tmp = get_panel_token_end((const char*) ch);
+ if (!ch_tmp)
+ ch_tmp = ch + strlen(ch);
+ for (i = 0; (ch + i) < ch_tmp; i++)
+ oem_data.sec_panel[i] = *(ch + i);
+ oem_data.sec_panel[i] = '\0';
}
/* Skip LK configuration */
@@ -100,11 +194,33 @@
/* Cont. splash status */
ch = strstr((char *) panel_name, ":disable");
oem_data.cont_splash = ch ? false : true;
+
+ /* DSI PLL source */
+ ch = strstr((char *) panel_name, ":pll0");
+ if (ch) {
+ oem_data.dsi_pll_src = DSI_PLL0;
+ } else {
+ ch = strstr((char *) panel_name, ":pll1");
+ if (ch)
+ oem_data.dsi_pll_src = DSI_PLL1;
+ }
+
+ /* Simulator status */
+ oem_data.sim_mode = SIM_NONE;
+ if (strstr((char *) panel_name, "#sim-hwte"))
+ oem_data.sim_mode = SIM_HWTE;
+ else if (strstr((char *) panel_name, "#sim-swte"))
+ oem_data.sim_mode = SIM_SWTE;
+ else if (strstr((char *) panel_name, "#sim"))
+ oem_data.sim_mode = SIM_MODE;
+
}
static bool mdss_dsi_set_panel_node(char *panel_name, char **dsi_id,
char **panel_node, char **slave_panel_node, int *panel_mode)
{
+ int rc = 0;
+
if (!strcmp(panel_name, SIM_VIDEO_PANEL)) {
*dsi_id = SIM_DSI_ID;
*panel_node = SIM_VIDEO_PANEL_NODE;
@@ -126,12 +242,21 @@
} else if (oem_data.skip) {
/* For skip panel case, check the lookup table */
*dsi_id = SIM_DSI_ID;
- panel_name_to_dt_string(lookup_skip_panels,
+ rc = panel_name_to_dt_string(lookup_skip_panels,
ARRAY_SIZE(lookup_skip_panels), panel_name,
- panel_node, slave_panel_node, panel_mode);
+ panel_node);
+ if (rc < 0) {
+ return false;
+ } else if (rc == 1) {
+ *slave_panel_node = *panel_node;
+ *panel_mode = DUAL_DSI_FLAG;
+ } else {
+ *panel_mode = 0;
+ }
} else {
return false;
}
+
return true;
}
@@ -140,15 +265,16 @@
char *dsi_id = NULL;
char *panel_node = NULL;
char *slave_panel_node = NULL;
+ char *sim_mode_string = NULL;
uint16_t dsi_id_len = 0, panel_node_len = 0, slave_panel_node_len = 0;
uint32_t arg_size = 0;
- bool ret = true;
- bool rc;
+ bool ret = true, rc;
+ int ret_val;
char *default_str;
struct panel_struct panelstruct;
int panel_mode = SPLIT_DISPLAY_FLAG | DUAL_PIPE_FLAG | DST_SPLIT_FLAG;
int prefix_string_len = strlen(DISPLAY_CMDLINE_PREFIX);
- char *sctl_string;
+ char *sctl_string, *pll_src_string = NULL;
panelstruct = mdss_dsi_get_panel_data();
@@ -196,13 +322,44 @@
return false;
}
+ if (oem_data.sec_panel) {
+ if (panel_mode & (DUAL_DSI_FLAG | SPLIT_DISPLAY_FLAG |
+ DST_SPLIT_FLAG)) {
+ dprintf(CRITICAL, "Invalid config: Primary panel is"
+ "split DSI and still secondary panel passed\n");
+ } else {
+ ret_val = panel_name_to_dt_string(lookup_skip_panels,
+ ARRAY_SIZE(lookup_skip_panels), oem_data.sec_panel,
+ &slave_panel_node);
+ if (ret_val < 0) {
+ dprintf(CRITICAL, "Sec. panel not found."
+ " Continue with primary panel\n");
+ } else if (ret_val == 1) {
+ dprintf(CRITICAL, "Invalid config: Secondary panel cant"
+ "be split DSI. Continue with primary panel\n");
+ slave_panel_node = NULL;
+ }
+ }
+ }
+
+ /* Check for the DSI configuration */
+ if (slave_panel_node && (panel_mode & (DUAL_DSI_FLAG |
+ SPLIT_DISPLAY_FLAG | DST_SPLIT_FLAG)))
+ strcpy(oem_data.dsi_config, "split_dsi");
+ else if (slave_panel_node)
+ strcpy(oem_data.dsi_config, "dual_dsi");
+ else
+ strcpy(oem_data.dsi_config, "single_dsi");
+
+ arg_size = DSI_CFG_STRING_LEN + strlen(oem_data.dsi_config);
+
dsi_id_len = strlen(dsi_id);
panel_node_len = strlen(panel_node);
if (!slave_panel_node || !strcmp(slave_panel_node, ""))
slave_panel_node = NO_PANEL_CONFIG;
slave_panel_node_len = strlen(slave_panel_node);
- arg_size = prefix_string_len + dsi_id_len + panel_node_len +
+ arg_size += prefix_string_len + dsi_id_len + panel_node_len +
LK_OVERRIDE_PANEL_LEN + 1;
if (panelstruct.paneldata &&
@@ -213,6 +370,35 @@
arg_size += strlen(sctl_string) + slave_panel_node_len;
+ if (oem_data.skip && !strcmp(oem_data.dsi_config, "dual_dsi") &&
+ (oem_data.dsi_pll_src != DSI_PLL_DEFAULT)) {
+ dprintf(CRITICAL, "Dual DSI config detected!"
+ " Use default PLL\n");
+ oem_data.dsi_pll_src = DSI_PLL_DEFAULT;
+ }
+
+ if (oem_data.dsi_pll_src != DSI_PLL_DEFAULT) {
+ if (oem_data.dsi_pll_src == DSI_PLL0)
+ pll_src_string = DSI_PLL0_STRING;
+ else
+ pll_src_string = DSI_PLL1_STRING;
+
+ arg_size += strlen(pll_src_string);
+ }
+
+ if (oem_data.sim_mode != SIM_NONE) {
+ sim_override_to_cmdline(lookup_sim,
+ ARRAY_SIZE(lookup_sim), oem_data.sim_mode,
+ &sim_mode_string);
+ if (sim_mode_string) {
+ arg_size += LK_SIM_OVERRIDE_LEN +
+ strlen(sim_mode_string);
+ } else {
+ dprintf(CRITICAL, "SIM string NULL but mode is not NONE\n");
+ return false;
+ }
+ }
+
if (buf_size < arg_size) {
dprintf(CRITICAL, "display command line buffer is small\n");
ret = false;
@@ -230,14 +416,40 @@
buf_size -= dsi_id_len;
strlcpy(pbuf, panel_node, buf_size);
-
pbuf += panel_node_len;
buf_size -= panel_node_len;
strlcpy(pbuf, sctl_string, buf_size);
pbuf += strlen(sctl_string);
buf_size -= strlen(sctl_string);
+
strlcpy(pbuf, slave_panel_node, buf_size);
+ pbuf += slave_panel_node_len;
+ buf_size -= slave_panel_node_len;
+
+ strlcpy(pbuf, DSI_CFG_STRING, buf_size);
+ pbuf += DSI_CFG_STRING_LEN;
+ buf_size -= DSI_CFG_STRING_LEN;
+
+ strlcpy(pbuf, oem_data.dsi_config, buf_size);
+ pbuf += strlen(oem_data.dsi_config);
+ buf_size -= strlen(oem_data.dsi_config);
+
+ if (pll_src_string) {
+ strlcpy(pbuf, pll_src_string, buf_size);
+ pbuf += strlen(pll_src_string);
+ buf_size -= strlen(pll_src_string);
+ }
+
+ if (sim_mode_string) {
+ strlcpy(pbuf, LK_SIM_OVERRIDE, buf_size);
+ pbuf += LK_SIM_OVERRIDE_LEN;
+ buf_size -= LK_SIM_OVERRIDE_LEN;
+
+ strlcpy(pbuf, sim_mode_string, buf_size);
+ pbuf += strlen(sim_mode_string);
+ buf_size -= strlen(sim_mode_string);
+ }
}
return ret;
}
diff --git a/dev/gcdb/display/include/display_resource.h b/dev/gcdb/display/include/display_resource.h
index 6fc177a..12437aa 100755
--- a/dev/gcdb/display/include/display_resource.h
+++ b/dev/gcdb/display/include/display_resource.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -42,11 +42,20 @@
#define LK_OVERRIDE_PANEL "1:"
#define LK_OVERRIDE_PANEL_LEN 2
+#define LK_SIM_OVERRIDE "#override:"
+#define LK_SIM_OVERRIDE_LEN 10
+
#define DSI_0_STRING ":0:"
#define DSI_0_STRING_LEN 3
#define DSI_1_STRING ":1:"
#define DSI_1_STRING_LEN 3
+#define DSI_CFG_STRING ":cfg:"
+#define DSI_CFG_STRING_LEN 5
+
+#define DSI_PLL0_STRING ":pll0"
+#define DSI_PLL1_STRING ":pll1"
+
#define NO_PANEL_CONFIG "none"
#define SIM_VIDEO_PANEL "sim_video_panel"
#define SIM_DUALDSI_VIDEO_PANEL "sim_dualdsi_video_panel"
diff --git a/dev/gcdb/display/include/panel_nt35597_wqxga_dualdsi_cmd.h b/dev/gcdb/display/include/panel_nt35597_wqxga_dualdsi_cmd.h
index b2bf27f..b01752a 100644
--- a/dev/gcdb/display/include/panel_nt35597_wqxga_dualdsi_cmd.h
+++ b/dev/gcdb/display/include/panel_nt35597_wqxga_dualdsi_cmd.h
@@ -230,7 +230,7 @@
/* Panel timing */
/*---------------------------------------------------------------------------*/
static const uint32_t nt35597_wqxga_dualdsi_cmd_timings[] = {
- 0xe2, 0x36, 0x24, 0x00, 0x66, 0x6a, 0x28, 0x38, 0x2a, 0x03, 0x04, 0x00
+ 0xd5, 0x32, 0x22, 0x00, 0x60, 0x64, 0x26, 0x36, 0x29, 0x03, 0x04, 0x00
};
static const uint32_t nt35597_wqxga_dualdsi_thulium_cmd_timings[] = {
diff --git a/dev/pmic/pm8x41/include/pm8x41.h b/dev/pmic/pm8x41/include/pm8x41.h
index 9278470..59d0fca 100644
--- a/dev/pmic/pm8x41/include/pm8x41.h
+++ b/dev/pmic/pm8x41/include/pm8x41.h
@@ -239,4 +239,6 @@
void pmi8994_config_mpp_slave_id(uint8_t slave_id);
void pm_pwm_enable(bool enable);
int pm_pwm_config(unsigned int duty_us, unsigned int period_us);
+uint32_t spmi_reg_read(uint32_t slave_id, uint16_t addr, uint8_t *data, uint8_t priority);
+uint32_t spmi_reg_write(uint32_t slave_id, uint16_t addr, uint8_t *data, uint8_t priority);
#endif
diff --git a/dev/pmic/pm8x41/include/pm8x41_adc.h b/dev/pmic/pm8x41/include/pm8x41_adc.h
index 3180899..74c3367 100644
--- a/dev/pmic/pm8x41/include/pm8x41_adc.h
+++ b/dev/pmic/pm8x41/include/pm8x41_adc.h
@@ -55,6 +55,7 @@
/* ADC1 Apps base */
#define VADC_USR1_BASE 0x3100
+#define VADC_USR2_BASE 0x23100
/* ADC mode control */
#define VADC_MODE_CTRL 0x40
@@ -103,6 +104,7 @@
#define VREF_125_CHAN_ID 10
#define GND_REF_CHAN_ID 14
#define VDD_VADC_CHAN_ID 15
+#define MPP_1_CHAN_ID 16
#define MPP_8_CHAN_ID 39
#define VADC_BAT_CHAN_ID 49
@@ -158,12 +160,16 @@
/* MPP defines */
+#define SID_REG_BASE 0x10000
#define MPP_REG_BASE 0xA000
#define MPP_REG_RANGE 0x100
#define MPP_MAX_NUM 0x7
#define MPP_MODE_AIN 0x4
#define MPP_MASTER_ENABLE 0x1
+#define MPP_AIN_ROUTE_AMUX0 0x0
+#define MPP_AIN_ROUTE_AMUX1 0x1
+#define MPP_AIN_ROUTE_AMUX2 0x2
#define MPP_AIN_ROUTE_AMUX3 0x3
/* control register base address offsets */
@@ -193,6 +199,10 @@
#define Q_REG_AIN_ROUTE_SHIFT 0
#define Q_REG_AIN_ROUTE_MASK 0x7
+/* sid of pmic */
+#define PM8950_SID 0
+#define PMI8950_SID 2
+
/* Function declations */
uint32_t pm8x41_adc_channel_read(uint16_t ch_num);
int pm8x41_iusb_max_config(uint32_t current);
@@ -205,7 +215,11 @@
uint32_t pm8x41_get_batt_voltage();
/* API: Get Voltage based State of Charge */
uint32_t pm8x41_get_voltage_based_soc(uint32_t cutoff_vol, uint32_t vdd_max);
-/* API: Set the MMP pin as ADC */
+/* API: Set the PM8x41 MPP pin as ADC */
void pm8x41_enable_mpp_as_adc(uint16_t mpp_num);
+/* API: Set the PMI8950 MMP pin as ADC */
+void pmi8950_enable_mpp_as_adc(uint16_t mpp_num);
+/* API: Set the PM8950 MPP pin as ADC */
+void pm8950_enable_mpp_as_adc(uint16_t mpp_num);
#endif /* _PM8X41_ADC_H_ */
diff --git a/dev/pmic/pm8x41/include/pm8x41_hw.h b/dev/pmic/pm8x41/include/pm8x41_hw.h
index 0a8e2e8..03e30eb 100644
--- a/dev/pmic/pm8x41/include/pm8x41_hw.h
+++ b/dev/pmic/pm8x41/include/pm8x41_hw.h
@@ -29,6 +29,10 @@
#ifndef _PM8x41_HW_H_
#define _PM8x41_HW_H_
+#include <stdint.h>
+#include <sys/types.h>
+
+
/* SMBB Registers */
#define SMBB_MISC_BOOT_DONE 0x1642
@@ -94,6 +98,9 @@
/* USB Peripheral registers */
#define SMBCHGL_USB_ICL_STS_2 0x1309
+/* PMI8950 slave id */
+#define PMI8950_SLAVE_ID 0x20000
+
/* USB Peripheral register bits */
#define USBIN_ACTIVE_PWR_SRC BIT(0)
#define DCIN_ACTIVE_PWR_SRC BIT(1)
diff --git a/dev/pmic/pm8x41/pm8x41.c b/dev/pmic/pm8x41/pm8x41.c
index 6733656..4ce9869 100644
--- a/dev/pmic/pm8x41/pm8x41.c
+++ b/dev/pmic/pm8x41/pm8x41.c
@@ -77,6 +77,40 @@
return val;
}
+uint32_t spmi_reg_read(uint32_t slave_id, uint16_t addr, uint8_t *data, uint8_t priority)
+{
+ struct pmic_arb_cmd cmd;
+ struct pmic_arb_param param;
+
+ cmd.address = PERIPH_ID(addr);
+ cmd.offset = REG_OFFSET(addr);
+ cmd.slave_id = slave_id;
+
+ cmd.priority = priority;
+
+ param.buffer = data;
+ param.size = 1;
+
+ return pmic_arb_read_cmd(&cmd, ¶m);
+}
+
+uint32_t spmi_reg_write(uint32_t slave_id, uint16_t addr, uint8_t *data, uint8_t priority)
+{
+ struct pmic_arb_cmd cmd;
+ struct pmic_arb_param param;
+
+ cmd.address = PERIPH_ID(addr);
+ cmd.offset = REG_OFFSET(addr);
+ cmd.slave_id = slave_id;
+
+ cmd.priority = priority;
+
+ param.buffer = data;
+ param.size = 1;
+
+ return pmic_arb_write_cmd(&cmd, ¶m);
+}
+
/* SPMI helper function which takes slave id as the i/p */
void pm8xxx_reg_write(uint8_t slave_id, uint32_t addr, uint8_t val)
{
@@ -545,7 +579,7 @@
{
uint8_t pon_reason = 0;
- pon_reason = REG_READ(SMBCHGL_USB_ICL_STS_2);
+ pon_reason = REG_READ(SMBCHGL_USB_ICL_STS_2|PMI8950_SLAVE_ID);
/* check usbin/dcin status on pmi and set the corresponding bits for pon */
pon_reason = (pon_reason & (USBIN_ACTIVE_PWR_SRC|DCIN_ACTIVE_PWR_SRC)) << 3 ;
pon_reason |= REG_READ(PON_PON_REASON1);
diff --git a/dev/pmic/pm8x41/pm8x41_adc.c b/dev/pmic/pm8x41/pm8x41_adc.c
index a4b3a82..c70acfc 100644
--- a/dev/pmic/pm8x41/pm8x41_adc.c
+++ b/dev/pmic/pm8x41/pm8x41_adc.c
@@ -42,6 +42,7 @@
CHAN_INIT(VADC_USR1_BASE, VADC_BAT_CHAN_ID, VADC_MODE_NORMAL, VADC_DECIM_RATIO_VAL, HW_SET_DELAY_100US, FAST_AVG_SAMP_1, CALIB_RATIO),
CHAN_INIT(VADC_USR1_BASE, VADC_BAT_VOL_CHAN_ID, VADC_MODE_NORMAL, VADC_DECIM_RATIO_VAL, HW_SET_DELAY_100US, FAST_AVG_SAMP_1, CALIB_ABS),
CHAN_INIT(VADC_USR1_BASE, MPP_8_CHAN_ID, VADC_MODE_NORMAL, VADC_DECIM_RATIO_VAL, HW_SET_DELAY_100US, FAST_AVG_SAMP_1, CALIB_ABS),
+ CHAN_INIT(VADC_USR2_BASE, MPP_1_CHAN_ID, VADC_MODE_NORMAL, VADC_DECIM_RATIO_VAL, HW_SET_DELAY_100US, FAST_AVG_SAMP_1, CALIB_RATIO),
};
@@ -151,7 +152,7 @@
return result;
}
-static uint32_t vadc_calibrate(uint16_t result, uint8_t calib_type)
+static uint32_t vadc_calibrate(uint16_t result, struct adc_conf* adc)
{
struct adc_conf calib;
uint16_t calib1;
@@ -159,11 +160,11 @@
uint32_t calib_result = 0;
uint32_t mul;
- if(calib_type == CALIB_ABS) {
+ if(adc->calib_type == CALIB_ABS) {
/*
* Measure the calib data for 1.25 V ref
*/
- calib.base = VADC_USR1_BASE;
+ calib.base = adc->base;
calib.chan = VREF_125_CHAN_ID;
calib.mode = VADC_MODE_NORMAL;
calib.adc_param = VADC_DECIM_RATIO_VAL;
@@ -175,7 +176,7 @@
/*
* Measure the calib data for 0.625 V ref
*/
- calib.base = VADC_USR1_BASE;
+ calib.base = adc->base;
calib.chan = VREF_625_CHAN_ID;
calib.mode = VADC_MODE_NORMAL;
calib.adc_param = VADC_DECIM_RATIO_VAL;
@@ -189,11 +190,11 @@
calib_result += VREF_625_MV;
calib_result *= OFFSET_GAIN_DNOM;
calib_result /= OFFSET_GAIN_NUME;
- } else if(calib_type == CALIB_RATIO) {
+ } else if(adc->calib_type == CALIB_RATIO) {
/*
* Measure the calib data for VDD_ADC ref
*/
- calib.base = VADC_USR1_BASE;
+ calib.base = adc->base;
calib.chan = VDD_VADC_CHAN_ID;
calib.mode = VADC_MODE_NORMAL;
calib.adc_param = VADC_DECIM_RATIO_VAL;
@@ -205,7 +206,7 @@
/*
* Measure the calib data for ADC_GND
*/
- calib.base = VADC_USR1_BASE;
+ calib.base = adc->base;
calib.chan = GND_REF_CHAN_ID;
calib.mode = VADC_MODE_NORMAL;
calib.adc_param = VADC_DECIM_RATIO_VAL;
@@ -240,7 +241,7 @@
result = adc_configure(adc);
- calib_result = vadc_calibrate(result, adc->calib_type);
+ calib_result = vadc_calibrate(result, adc);
dprintf(SPEW, "Result: Raw %u\tCalibrated:%u\n", result, calib_result);
@@ -388,10 +389,12 @@
/*
* API: pm8x41_enable_mpp_as_adc
* Configurate the MPP pin as the ADC feature.
+ * mpp_num starts from 0.
*/
void pm8x41_enable_mpp_as_adc(uint16_t mpp_num)
{
uint32_t val;
+ uint32_t amux_offset;
if(mpp_num > MPP_MAX_NUM)
{
dprintf(CRITICAL, "Error: The MPP pin number is unavailable\n");
@@ -401,14 +404,83 @@
val = (MPP_MODE_AIN << Q_REG_MODE_SEL_SHIFT) \
| (0x1 << Q_REG_OUT_INVERT_SHIFT) \
| (0x0 << Q_REG_SRC_SEL_SHIFT);
- REG_WRITE((MPP_REG_BASE + mpp_num * MPP_REG_RANGE + Q_REG_MODE_CTL), val);
+ REG_WRITE((MPP_REG_BASE + mpp_num * MPP_REG_RANGE + Q_REG_MODE_CTL),
+ val);
/* Enable the MPP */
val = (MPP_MASTER_ENABLE << Q_REG_MASTER_EN_SHIFT);
REG_WRITE((MPP_REG_BASE + mpp_num * MPP_REG_RANGE + Q_REG_EN_CTL), val);
- /* AIN route to AMUX8 */
- val = (MPP_AIN_ROUTE_AMUX3 << Q_REG_AIN_ROUTE_SHIFT);
- REG_WRITE((MPP_REG_BASE + mpp_num * MPP_REG_RANGE + Q_REG_AIN_CTL), val);
+ /* AIN route to related AMUX */
+ amux_offset = mpp_num % 4;
+ val = (amux_offset << Q_REG_AIN_ROUTE_SHIFT);
+ REG_WRITE((MPP_REG_BASE + mpp_num * MPP_REG_RANGE + Q_REG_AIN_CTL),
+ val);
+}
+/*
+ * API: pm8950_enable_mpp_as_adc
+ * Configurate the MPP pin as the ADC feature.
+ * mpp_num starts from 0.
+ */
+void pm8950_enable_mpp_as_adc(uint16_t mpp_num)
+{
+ uint32_t val;
+ uint32_t amux_offset;
+ if(mpp_num > MPP_MAX_NUM)
+ {
+ dprintf(CRITICAL, "Error: The MPP pin number is unavailable\n");
+ return;
+ }
+ /* set the MPP mode as AIN */
+ val = (MPP_MODE_AIN << Q_REG_MODE_SEL_SHIFT) \
+ | (0x1 << Q_REG_OUT_INVERT_SHIFT) \
+ | (0x0 << Q_REG_SRC_SEL_SHIFT);
+ REG_WRITE((PM8950_SID * SID_REG_BASE + MPP_REG_BASE +
+ mpp_num * MPP_REG_RANGE + Q_REG_MODE_CTL), val);
+
+ /* Enable the MPP */
+ val = (MPP_MASTER_ENABLE << Q_REG_MASTER_EN_SHIFT);
+ REG_WRITE((PM8950_SID * SID_REG_BASE + MPP_REG_BASE +
+ mpp_num * MPP_REG_RANGE + Q_REG_EN_CTL), val);
+
+ /* AIN route to related AMUX */
+ amux_offset = mpp_num % 4;
+ val = (amux_offset << Q_REG_AIN_ROUTE_SHIFT);
+ REG_WRITE((PM8950_SID * SID_REG_BASE + MPP_REG_BASE +
+ mpp_num * MPP_REG_RANGE + Q_REG_AIN_CTL), val);
+}
+
+/*
+ * API: pmi8950_enable_mpp_as_adc
+ * Configurate the MPP pin as the ADC feature.
+ * mpp_num starts from 0.
+ * only MPP1 can be used as ADC IN.
+ */
+void pmi8950_enable_mpp_as_adc(uint16_t mpp_num)
+{
+ uint32_t val;
+ uint32_t amux_offset;
+ if(mpp_num > MPP_MAX_NUM)
+ {
+ dprintf(CRITICAL, "Error: The MPP pin number is unavailable\n");
+ return;
+ }
+ /* set the MPP mode as AIN */
+ val = (MPP_MODE_AIN << Q_REG_MODE_SEL_SHIFT) \
+ | (0x1 << Q_REG_OUT_INVERT_SHIFT) \
+ | (0x0 << Q_REG_SRC_SEL_SHIFT);
+ REG_WRITE((PMI8950_SID * SID_REG_BASE + MPP_REG_BASE +
+ mpp_num * MPP_REG_RANGE + Q_REG_MODE_CTL), val);
+
+ /* Enable the MPP */
+ val = (MPP_MASTER_ENABLE << Q_REG_MASTER_EN_SHIFT);
+ REG_WRITE((PMI8950_SID * SID_REG_BASE + MPP_REG_BASE +
+ mpp_num * MPP_REG_RANGE + Q_REG_EN_CTL), val);
+
+ /* AIN route to related AMUX */
+ amux_offset = mpp_num % 4;
+ val = (amux_offset << Q_REG_AIN_ROUTE_SHIFT);
+ REG_WRITE((PMI8950_SID * SID_REG_BASE + MPP_REG_BASE +
+ mpp_num * MPP_REG_RANGE + Q_REG_AIN_CTL), val);
}
diff --git a/dev/pmic/pmi8994/include/pm_app_smbchg.h b/dev/pmic/pmi8994/include/pm_app_smbchg.h
new file mode 100644
index 0000000..bfc12ca
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_app_smbchg.h
@@ -0,0 +1,205 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_APP_SMBCHG__H
+#define PM_APP_SMBCHG__H
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+
+#include "pm_err_flags.h"
+#include "pm_smbchg_bat_if.h"
+#include "pm_smbchg_misc.h"
+#include "pm_smbchg_usb_chgpth.h"
+#include "pm_resources_and_types.h"
+
+/*===========================================================================
+
+ GLOBAL DEFINES
+
+===========================================================================*/
+
+
+
+/*===========================================================================
+
+ GLOBAL TYPE DEFINITIONS
+
+===========================================================================*/
+typedef struct
+{
+ pm_smbchg_bat_if_low_bat_thresh_type vlowbatt_threshold;
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_vlowbatt_threshold_data_type;
+
+typedef struct
+{
+ pm_smbchg_chgpth_input_priority_type chgpth_input_priority; //0=DCIN; 1=USBIN
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_chgpth_input_priority_data_type;
+
+
+typedef struct
+{
+ pm_smbchg_bat_miss_detect_src_type bat_missing_detection_src;
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_bat_miss_detect_src_data_type ;
+
+
+typedef struct
+{
+ pm_smbchg_wdog_timeout_type wdog_timeout;
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_wdog_timeout_data_type;
+
+
+typedef struct
+{
+ boolean enable_wdog;
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_enable_wdog_data_type;
+
+
+typedef struct
+{
+ uint32 fast_chg_i_ma; //Valid values are 300 to 3000 mAmp
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_fast_chg_current_data_type;
+
+
+typedef struct
+{
+ uint32 pre_chg_i_ma; //Valid values are 100 to 550 mAmp
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_pre_chg_current_data_type;
+
+
+typedef struct
+{
+ uint32 pre_to_fast_chg_theshold_mv; //Valid range is 2400mV to 3000mV
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_pre_to_fast_chg_threshold_data_type;
+
+
+typedef struct
+{
+ uint32 float_volt_theshold_mv; //Valid range is 3600mV to 4500 mv
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_float_voltage_threshold_data_type;
+
+typedef struct
+{
+ uint32 usbin_input_current_limit; //Valid value is 300 to 3000mAmp
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_usbin_input_current_limit_data_type;
+
+
+typedef struct
+{
+ uint32 dcin_input_current_limit; //valid range is 300 to 2000 mAmp
+ pm_smbchg_param_config_enable_type enable_config;
+} pm_smbchg_dcin_input_current_limit_data_type;
+
+
+
+
+typedef struct
+{
+ pm_smbchg_vlowbatt_threshold_data_type dbc_bootup_volt_threshold;
+ pm_smbchg_chgpth_input_priority_data_type chgpth_input_priority;
+ pm_smbchg_bat_miss_detect_src_data_type bat_miss_detect_src;
+ pm_smbchg_wdog_timeout_data_type wdog_timeout;
+ pm_smbchg_enable_wdog_data_type enable_wdog;
+ pm_smbchg_fast_chg_current_data_type fast_chg_i;
+ pm_smbchg_pre_chg_current_data_type pre_chg_i;
+ pm_smbchg_pre_to_fast_chg_threshold_data_type pre_to_fast_chg_theshold_mv;
+ pm_smbchg_float_voltage_threshold_data_type float_volt_theshold_mv;
+ pm_smbchg_usbin_input_current_limit_data_type usbin_input_current_limit;
+ pm_smbchg_dcin_input_current_limit_data_type dcin_input_current_limit;
+ uint32 bootup_battery_theshold_mv;
+ uint32 wipwr_bootup_battery_theshold_mv;
+ boolean enable_jeita_hard_limit_check;
+} pm_smbchg_specific_data_type;
+
+
+
+/*===========================================================================
+
+ PROTOTYPES
+
+===========================================================================*/
+/**
+ * @name
+ * pm_sbl_chg_config_vbat_low_threshold
+ *
+ * @description
+ * This function configures battery charge status
+ *
+ * @param
+ * None
+ *
+ * @return
+ * pm_err_flag_type
+ *
+ * @dependency
+ * The following function must have been called:
+ * pm_target_information_init()
+ */
+pm_err_flag_type pm_appsbl_chg_config_vbat_low_threshold(uint32 device_index, pm_smbchg_specific_data_type *chg_param_ptr);
+
+
+
+/**
+ * @name
+ * pm_sbl_chg_check_weak_battery_status
+ *
+ * @description
+ * This function checks the battery charge status
+ *
+ * @param
+ * None
+ *
+ * @return
+ * pm_err_flag_type
+ *
+ * @dependency
+ * The following function must have been called:
+ * pm_driver_init()
+ */
+pm_err_flag_type pm_appsbl_chg_check_weak_battery_status(uint32 device_index);
+
+void *pm_target_information_get_specific_info();
+void *pm_target_chg_range_data();
+bool pm_appsbl_display_init_done();
+bool pm_appsbl_charging_in_progress();
+pm_err_flag_type pm_appsbl_set_dcin_suspend();
+#endif //PM_APP_SMBCHG__H
+
diff --git a/dev/pmic/pmi8994/include/pm_comm.h b/dev/pmic/pmi8994/include/pm_comm.h
new file mode 100644
index 0000000..6c7738d
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_comm.h
@@ -0,0 +1,131 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_COMM_H
+#define PM_COMM_H
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+
+#include "pm_resources_and_types.h"
+#include "pm_err_flags.h"
+
+/*===========================================================================
+
+ FUNCTION PROTOTYPES
+
+===========================================================================*/
+ typedef enum CommType
+{
+ FIRST_INVALID_COMM_INTERFACE = -1,
+ SPMI_1_0Type,
+ Transcomm_Type,
+ SSBI_2_0TypeLite = 0 ,
+ SSBI_2_0Type,
+ INVALID_COMM_INTERFACE
+}CommType;
+
+ /**
+ @struct pm_comm_info_type
+ @brief This struct is used to store the PMIC Comm
+ information.
+ */
+typedef struct
+{
+ uint32 slave_id;
+ uint32 pmic_index;
+ CommType mCommType;
+}pm_comm_info_type;
+
+
+
+/*! \brief This function initializes the comm info structure
+ * \param[in] None
+ *
+ * \return None.
+ *
+ * <b>Dependencies</b>
+ * \li DAL framework.
+ */
+void pm_comm_info_init(void);
+
+
+/*! \brief This function returns the comminfo struct(periph slave id, commtype)
+ * \param[in] pmic_chip_index - pmic index from the total num of pmics
+ *
+ *\param[in] slave_id_index - primary / secondary slave
+ *
+ * \return pm_comm_info_type.
+ *
+ */
+
+pm_comm_info_type* pm_comm_get_comm_info(uint32 pmic_chip_index, uint32 slave_id_index);
+
+
+pm_err_flag_type pm_comm_read_byte(uint32 slave_id ,
+ uint32 addr,
+ uint8* data,
+ uint8 priority);
+
+pm_err_flag_type pm_comm_read_byte_mask(uint32 slave_id ,
+ uint32 addr,
+ uint8 mask,
+ uint8* data,
+ uint8 priority);
+
+pm_err_flag_type pm_comm_write_byte(uint32 slave_id ,
+ uint32 addr,
+ uint8 data,
+ uint8 priority);
+
+pm_err_flag_type pm_comm_write_byte_mask(uint32 slave_id ,
+ uint32 addr,
+ uint8 mask,
+ uint8 value,
+ uint8 priority);
+
+#ifndef LK
+pm_err_flag_type pm_comm_write_byte_array(uint32 slave_id,
+ uint16 addr ,
+ uint32 num_bytes,
+ uint8* data,
+ uint8 priority) ;
+
+pm_err_flag_type pm_comm_read_byte_array ( uint32 slave_id ,
+ uint16 addr ,
+ uint32 num_bytes,
+ uint8* data,
+ uint8 priority) ;
+pm_err_flag_type pm_comm_channel_init_internal(void);
+#endif
+
+#endif /* PM_COMM_H */
+
diff --git a/dev/pmic/pmi8994/include/pm_err_flags.h b/dev/pmic/pmi8994/include/pm_err_flags.h
new file mode 100644
index 0000000..1dbb88c
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_err_flags.h
@@ -0,0 +1,370 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef _PM_ERR_FLAGS_H
+#define _PM_ERR_FLAGS_H
+
+/**
+ * These are all the error codes returned by PMIC APIs
+ *
+ * PMIC APIs most commonly return errors if the caller has tried
+ * to use parameters that are out of range or if the feature is
+ * not supported by the PMIC model detected at run-time.
+ */
+typedef enum
+{
+ /**
+ * The API completed successfully
+ */
+ PM_ERR_FLAG__SUCCESS,
+ /**
+ * The SBI operation Failed
+ * extra lines are to support += error codes
+ */
+ PM_ERR_FLAG__SBI_OPT_ERR,
+ PM_ERR_FLAG__SBI_OPT2_ERR,
+ PM_ERR_FLAG__SBI_OPT3_ERR,
+ PM_ERR_FLAG__SBI_OPT4_ERR,
+
+ PM_ERR_FLAG__I2C_OPT_ERR,
+ PM_ERR_FLAG__I2C_OPT2_ERR,
+ PM_ERR_FLAG__I2C_OPT3_ERR,
+ PM_ERR_FLAG__I2C_OPT4_ERR,
+
+ PM_ERR_FLAG__SPMI_OPT_ERR,
+ PM_ERR_FLAG__SPMI_OPT2_ERR,
+ PM_ERR_FLAG__SPMI_OPT3_ERR,
+ PM_ERR_FLAG__SPMI_OPT4_ERR,
+
+ PM_ERR_FLAG__SPMI_TRANSCOMM_ERR,
+
+
+ /**
+ * Input Parameter one is out of range
+ */
+ PM_ERR_FLAG__PAR1_OUT_OF_RANGE,
+ /**
+ * Input Parameter two is out of range
+ */
+ PM_ERR_FLAG__PAR2_OUT_OF_RANGE,
+ /**
+ * Input Parameter three is out of range
+ */
+ PM_ERR_FLAG__PAR3_OUT_OF_RANGE,
+ /**
+ * Input Parameter four is out of range
+ */
+ PM_ERR_FLAG__PAR4_OUT_OF_RANGE,
+ /**
+ * Input Parameter five is out of range
+ */
+ PM_ERR_FLAG__PAR5_OUT_OF_RANGE,
+ /**
+ * Input Parameter six is out of range
+ */
+ PM_ERR_FLAG__PAR6_OUT_OF_RANGE,
+ PM_ERR_FLAG__INVALID_PARAMETER,
+ PM_ERR_FLAG__VLEVEL_OUT_OF_RANGE,
+ PM_ERR_FLAG__VREG_ID_OUT_OF_RANGE,
+ /**
+ * This feature is not supported by this PMIC
+ */
+ PM_ERR_FLAG__FEATURE_NOT_SUPPORTED,
+ PM_ERR_FLAG__INVALID_PMIC_MODEL,
+ PM_ERR_FLAG__SECURITY_ERR,
+ PM_ERR_FLAG__IRQ_LIST_ERR,
+ PM_ERR_FLAG__DEV_MISMATCH,
+ PM_ERR_FLAG__ADC_INVALID_RES,
+ PM_ERR_FLAG__ADC_NOT_READY,
+ PM_ERR_FLAG__ADC_SIG_NOT_SUPPORTED,
+ PM_ERR_FLAG__ADC_VBATT_READ_ERR,
+ /**
+ * The RTC displayed mode read from the PMIC is invalid
+ */
+ PM_ERR_FLAG__RTC_BAD_DIS_MODE,
+ /**
+ * Failed to read the time from the PMIC RTC
+ */
+ PM_ERR_FLAG__RTC_READ_FAILED,
+ /**
+ * Failed to write the time to the PMIC RTC
+ */
+ PM_ERR_FLAG__RTC_WRITE_FAILED,
+ /**
+ * RTC not running
+ */
+ PM_ERR_FLAG__RTC_HALTED,
+ /**
+ * The DBUS is already in use by another MPP.
+ */
+ PM_ERR_FLAG__DBUS_IS_BUSY_MODE,
+ /**
+ * The ABUS is already in use by another MPP.
+ */
+ PM_ERR_FLAG__ABUS_IS_BUSY_MODE,
+ /**
+ * The error occurs illegal value that isn't in the
+ * macro_type enum is used
+ */
+ PM_ERR_FLAG__MACRO_NOT_RECOGNIZED,
+ /**
+ * This error occurs if the data read from a register does
+ * not match the setting data
+ */
+ PM_ERR_FLAG__DATA_VERIFY_FAILURE,
+ /**
+ * The error occurs illegal value that isn't in the
+ * pm_register_type enum is used
+ */
+ PM_ERR_FLAG__SETTING_TYPE_NOT_RECOGNIZED,
+ /**
+ * The error occurs illegal value that isn't in the
+ * pm_mode_group enum is used
+ */
+ PM_ERR_FLAG__MODE_NOT_DEFINED_FOR_MODE_GROUP,
+ /**
+ * The error occurs illegal value that isn't in the pm_mode
+ * enum is used
+ */
+ PM_ERR_FLAG__MODE_GROUP_NOT_DEFINED,
+ /**
+ * This error occurs if the PRESTUB function returns a false
+ */
+ PM_ERR_FLAG__PRESTUB_FAILURE,
+ /**
+ * This error occurs if the POSTSTUB function returns a
+ * false
+ */
+ PM_ERR_FLAG__POSTSTUB_FAILURE,
+ /**
+ * When modes are set for a modegroup, they are recorded and
+ * checked for success
+ */
+ PM_ERR_FLAG__MODE_NOT_RECORDED_CORRECTLY,
+ /**
+ * Unable to find the mode group in the mode group recording
+ * structure. Fatal memory problem
+ */
+ PM_ERR_FLAG__MODE_GROUP_STATE_NOT_FOUND,
+ /**
+ * This error occurs if the SUPERSTUB function return a
+ * false
+ */
+ PM_ERR_FLAG__SUPERSTUB_FAILURE,
+ /* Processor does not have access to this resource */
+ PM_ERR_FLAG__TARGET_PROCESSOR_CAN_NOT_ACCESS_RESOURCE,
+ /* Resource is invalid. Resource index was pass
+ * into router that is not defined in the build
+ */
+ PM_ERR_FLAG__INVALID_RESOURCE_ACCESS_ATTEMPTED,
+
+ /*! Non-Zero means unsuccessful call. Here it means registration failed
+ because driver has ran out of memory.MAX_CLIENTS_ALLOWED needs to be
+ increased and the code needs to be recompiled */
+ PM_ERR_FLAG__VBATT_CLIENT_TABLE_FULL,
+ /*! One of the parameters to the function call was invalid. */
+ PM_ERR_FLAG__VBATT_REG_PARAMS_WRONG,
+ /*! Client could not be deregistered because perhaps it does not exist */
+ PM_ERR_FLAG__VBATT_DEREGISTRATION_FAILED,
+ /*! Client could not be modified because perhaps it does not exist */
+ PM_ERR_FLAG__VBATT_MODIFICATION_FAILED,
+ /*!< Client could not be queried because perhaps it does not exist */
+ PM_ERR_FLAG__VBATT_INTERROGATION_FAILED,
+ /*!< Client's filetr could not be set because perhaps it does not exist */
+ PM_ERR_FLAG__VBATT_SET_FILTER_FAILED,
+ /*! Keeps the count of all errors. Any error code equal to or greater
+ than this one means an unknown error. VBATT_LAST_ERROR should be
+ the last error code always with the highest value */
+ PM_ERR_FLAG__VBATT_LAST_ERROR,
+ PM_ERR_FLAG__PMIC_NOT_SUPPORTED,
+
+ /* Non Vibrator Module is being indexed */
+ PM_ERR_FLAG__INVALID_VIBRATOR_INDEXED ,
+
+ /* Non PWM generator is being indexed */
+ PM_ERR_FLAG__INVALID_PWM_GENERATOR_INDEXED ,
+
+ /* Non Chg Module is being indexed */
+ PM_ERR_FLAG__INVALID_CHG_INDEXED ,
+
+ PM_ERR_FLAG__INVALID_CHG_PATH,
+
+ PM_ERR_FLAG__INVALID_CLK_INDEXED,
+
+ PM_ERR_FLAG__INVALID_XO_INDEXED,
+
+ PM_ERR_FLAG__INVALID_XOADC_INDEXED,
+
+ PM_ERR_FLAG__INVALID_TCXO_INDEXED,
+
+ PM_ERR_FLAG__INVALID_RTC_INDEXED,
+
+ PM_ERR_FLAG__INVALID_SMBC_INDEXED,
+
+ PM_ERR_FLAG__INVALID_BMS_INDEXED,
+
+ PM_ERR_FLAG__API_NOT_IMPLEMENTED,
+
+ PM_ERR_FLAG__INVALID_PAONCNTRL_INDEXED,
+
+ /* Non Coincell Module is being indexed */
+ PM_ERR_FLAG__INVALID_COINCELL_INDEXED ,
+
+ /* Non Flash Module is being indexed */
+ PM_ERR_FLAG__INVALID_FLASH_INDEXED ,
+
+ /* Non OVP Module is being indexed */
+ PM_ERR_FLAG__INVALID_OVP_INDEXED ,
+
+ /* Non KEYPAD Module is being indexed */
+ PM_ERR_FLAG__INVALID_KEYPAD_INDEXED ,
+
+ /* Non LVS Module is being indexed */
+ PM_ERR_FLAG__INVALID_LVS_INDEXED ,
+
+ /* Non HSED Module is being indexed */
+ PM_ERR_FLAG__INVALID_HSED_INDEXED ,
+
+ /* Non TALM Module is being indexed */
+ PM_ERR_FLAG__INVALID_TALM_INDEXED ,
+
+ /* Non NCP Module is being indexed */
+ PM_ERR_FLAG__INVALID_NCP_INDEXED ,
+
+ /* Non NFC Module is being indexed */
+ PM_ERR_FLAG__INVALID_NFC_INDEXED ,
+
+ /* Non MVS Module is being indexed */
+ PM_ERR_FLAG__INVALID_MVS_INDEXED,
+
+ /* Non HDMI Module is being indexed */
+ PM_ERR_FLAG__INVALID_HDMI_INDEXED,
+
+ /* Non VS Module is being indexed */
+ PM_ERR_FLAG__INVALID_VS_INDEXED,
+
+ /* Non UVLO Module is being indexed */
+ PM_ERR_FLAG__INVALID_UVLO_INDEXED,
+
+ /* Non AMUX Module is being indexed */
+ PM_ERR_FLAG__INVALID_AMUX_INDEXED,
+
+ PM_ERR_FLAG__INVALID_KEYPAD_EVENT_COUNTER,
+
+ /* Non MPP Module is being indexed */
+ PM_ERR_FLAG__INVALID_MPP_INDEXED,
+
+ PM_ERR_FLAG__INVALID_BATTERY_CELL_NUMBER,
+
+ PM_ERR_FLAG__INVALID_PWRON_INDEXED,
+
+ PM_ERR_FLAG__INVALID_VBATT_INDEXED,
+
+ PM_ERR_FLAG__INVALID_HSDKYPD_APP_INDEXED,
+
+ PM_ERR_FLAG__INVALID_PWRKEY_APP_INDEXED,
+
+ PM_ERR_FLAG__INVALID_EVENT_CALLBACK,
+
+ PM_ERR_FLAG__SHADOW_REGISTER_INIT_FAILED ,
+
+ /* PSDTE Error Functionality */
+ PM_ERR_FLAG__PSDTE_ENV_FAILURE,
+
+ PM_ERR_FLAG__PSDTE_PMIC_POWERUP_FAILED,
+
+ PM_ERR_FLAG__PSDTE_PMIC_POWERDOWN_FAILED,
+
+ PM_ERR_FLAG__FTS_CALCULATION_ERROR ,
+
+ PM_ERR_FLAG__API_DEPRICATED_ERROR,
+
+ PM_ERR_FLAG__RPC_PROCESSOR_NOT_RECOGNIZED_ERROR,
+
+ /* VREG Errors */
+ PM_ERR_FLAG__VREG_VOTE_DEREGISTER_ERROR,
+
+ PM_ERR_FLAG__VREG_VOTE_REGISTER_ERROR,
+
+ /* VS Errors */
+ PM_ERR_FLAG__INVALID_VS_STATUS,
+
+ PM_ERR_FLAG__DAL_SERVICE_REGISTRATION_FAILED,
+
+ PM_ERR_FLAG__DAL_SERVICE_FAILED,
+
+ PM_ERR__MUTEX_CREATION_FAILED ,
+
+ PM_ERR__MUTEX_RELEASE_FAILED ,
+
+ PM_ERR__MUTEX_DELETION_FAILED ,
+
+ PM_ERR__MUTEX_UNAVAILBLE ,
+ // Returned if the Create Comm Channel fails to find the correct commType
+ PM_ERR_FLAG__COMM_TYPE_NOT_RECOGNIZED,
+
+ PM_ERR_FLAG__IRQ_GPIO_SET_FAILED,
+ /*! Event information table has run out of client entries */
+ PM_ERR_FLAG__PMAPP_EVENT_CLIENT_TABLE_FULL,
+ /*! Client could not be deregistered because perhaps it does not exist */
+ PM_ERR_FLAG__PMAPP_EVENT_DEREGISTRATION_FAILED,
+ /*! Client is attempting to use a client index that is incorrect or has been previously deregisterd */
+ PM_ERR_FLAG__PMAPP_EVENT_CLIENT_INDEX_FAILURE,
+
+ PM_ERR_FLAG__INVALID_MISC_INDEXED,
+
+ PM_ERR_FLAG__INVALID_MISC_TBD,
+
+ PM_ERR_FLAG__INVALID_VREG_INDEXED,
+
+ PM_ERR_FLAG__INVALID_POINTER,
+
+ PM_ERR_FLAG__FUNCTION_NOT_SUPPORTED_AT_THIS_LEVEL,
+
+ PM_ERR_FLAG__INVALID_LPG_INDEXED,
+
+ PM_ERR_FLAG__INVALID_DISPBACKLIGHT_APP_INDEXED,
+ PM_ERR_FLAG__INVALID_RGB_INDEXED,
+ PM_ERR_FLAG__INVALID_SMBB_INDEXED,
+ PM_ERR_FLAG__FG_SRAM_DEVICE_ACCESS,
+
+ PM_ERR_FLAG__SBL_CONFIG_REG_OPERATION_NOT_SUPPORTED,
+
+ PM_ERR_FLAG__INVALID
+
+} pm_err_flag_type;
+
+/**
+ * This macro is used to return the greater of PM_ERR_FLAG__SUCCESS
+ * or whatever error an API may have found.
+ */
+#define PM_ERR_MAX(a,b) ((a > b) ? (a) : (b))
+
+
+#endif
+
diff --git a/dev/pmic/pmi8994/include/pm_fg_adc_usr.h b/dev/pmic/pmi8994/include/pm_fg_adc_usr.h
new file mode 100644
index 0000000..ebe249c
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_fg_adc_usr.h
@@ -0,0 +1,549 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef __PM_FG_ADC_USR_H__
+#define __PM_FG_ADC_USR_H__
+
+#include "pm_err_flags.h"
+#include "pm_resources_and_types.h"
+
+/*===========================================================================
+ TYPE DEFINITIONS
+===========================================================================*/
+
+typedef enum{
+ /*IRQ indicating that IBAT is greater than threshold defined in IBAT_INT__THR register
+ 0x0 : INT_RT_STATUS_LOW
+ 0x1 : INT_RT_STATUS_HIGH */
+ PM_FG_ADC_USR_IBAT_GT_THR_RT_STS =0,
+ /*IRQ indicating that VBAT is less than threshold defined in VBAT_INT__THR register
+ 0x0 : INT_RT_STATUS_LOW
+ 0x1 : INT_RT_STATUS_HIGH */
+ PM_FG_ADC_USR_VBAT_LT_THR_INT_RT_STS,
+ PM_FG_ADC_USR_IRQ_INVALID
+} pm_fg_adc_usr_irq_type;
+
+
+typedef enum{
+ /*STS
+ 00 = lpm - low power mode
+ 01 = hpm - high power mode
+ 10 = mpm - medium (normal) power mode
+ 11 = not used
+ 0x0 : BCL_IS_LPM
+ 0x1 : BCL_IS_HPM
+ 0x2 : BCL_IS_MPM
+ 0x3 : BCL_IS_INVALID_MODE */
+ PM_FG_ADC_USR_BCL_MODE_STS_LPM =0,
+ PM_FG_ADC_USR_BCL_MODE_STS_HPM,
+ PM_FG_ADC_USR_BCL_MODE_STS_MPM,
+ PM_FG_ADC_USR_BCL_MODE_STS_INVAID
+} pm_fg_adc_usr_bcl_mode_sts;
+
+
+/*===========================================================================
+ EXTERNAL FUNCTION DEFINITIONS
+===========================================================================*/
+ /**
+ * @brief This function enables irq
+ *
+ * @details
+ * This function enables irq
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] pm_fg_adc_usr_irq_type irq type
+ * @param[in] boolean enable/disable value
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+ pm_err_flag_type pm_fg_adc_usr_irq_enable(uint32 device_index, pm_fg_adc_usr_irq_type irq, boolean enable);
+
+
+ /**
+ * @brief This function clears irq
+ *
+ * @details
+ * This function clears irq
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] pm_fg_adc_usr_irq_type irq type
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+ pm_err_flag_type pm_fg_adc_usr_irq_clear(uint32 device_index, pm_fg_adc_usr_irq_type irq);
+
+ /**
+ * @brief This function sets interrupt triggers
+ *
+ * @details
+ * This function sets interrupt triggers
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] pm_fg_adc_usr_irq_type irq type
+ * @param[in] pm_irq_trigger_type trigger
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+ pm_err_flag_type pm_fg_adc_usr_irq_set_trigger(uint32 device_index, pm_fg_adc_usr_irq_type irq, pm_irq_trigger_type trigger);
+
+
+ /**
+ * @brief This function returns irq status
+ *
+ * @details
+ * This function returns irq status
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] pm_fg_adc_usr_irq_type irq type
+ * @param[in] pm_irq_status_type irq status type
+ * @param[in] boolean irq TRUE/FALSE status
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+ pm_err_flag_type pm_fg_adc_usr_irq_status(uint32 device_index, pm_fg_adc_usr_irq_type irq, pm_irq_status_type type, boolean *status);
+
+/**
+* @brief This function enable/disables BMS Fule Gauge Algorithm BCL (battery current limiting s/w use) *
+* @details
+* This function enable/disables BMS Fule Gauge Algorithm BCL (battery current limiting s/w use)
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_enable_bcl_monitoring(uint32 device_index, boolean enable);
+
+/**
+* @brief This function returns BMS Fule Gauge BCL (battery current limiting s/w use) *
+* @details
+* This function returns BMS Fule Gauge BCL (battery current limiting s/w use)
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_monitoring_sts(uint32 device_index, boolean *enable);
+
+
+/**
+* @brief This function returns of status of battery parameter update request *
+* @details
+* This function returns of status of battery parameter update request (VBAT, IBAT, VBAT_CP, IBAT_CP, IBAT_MAX, IBAT_MAX_CP, VBAT_MIN, VBAT_MIN_CP)
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_access_bat_req_sts(uint32 device_index, boolean *enable);
+
+
+/**
+* @brief This function enable/disables the updates of VBAT, IBAT, VBAT_CP, IBAT_CP, IBAT_MAX, IBAT_MAX_CP, VBAT_MIN, VBAT_MIN_CP *
+* @details
+* This function enable/disables the updates of VBAT, IBAT, VBAT_CP, IBAT_CP, IBAT_MAX, IBAT_MAX_CP, VBAT_MIN, VBAT_MIN_CP
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_set_access_bat_req(uint32 device_index, boolean enable);
+
+
+/**
+* @brief This function returns the grant status of battery parameter update request *
+* @details
+* This function returns of status of battery parameter update request (VBAT, IBAT, VBAT_CP, IBAT_CP, IBAT_MAX, IBAT_MAX_CP, VBAT_MIN, VBAT_MIN_CP)
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_access_bat_grnt_sts(uint32 device_index, boolean *enable);
+
+
+
+/**
+* @brief This function returns status RDY bit after battery parameter update request is serviced *
+* @details
+* After the first readings from ADC are obtained, this bit is set to 1; At reset and shutdown, this bit gets automatically cleared
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_values(uint32 device_index, boolean *enable);
+
+
+/**
+* @brief This function returns battery ADC Voltage *
+* @details
+* 8 bit signed partial ADC value, MSB = 0 is positive voltage (positive number), only positive voltages are captured, 1 LSB = 39 mV
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]vbat_adc Battery Voltage
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_vbat(uint32 device_index, uint32 *vbat_adc);
+
+
+/**
+* @brief This function returns battery ADC Current *
+* @details
+* 8 bit signed partial ADC value, MSB = 0 is discharging current (positive number), only discharging currents are captured, 1 LSB = 39 mA
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]ibat_adc Battery Current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_ibat(uint32 device_index, int32 *ibat_adc);
+
+
+/**
+* @brief This function returns minimum battery Voltage *
+* @details
+* Running Vbat Min stored and then cleared by SW
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]vbat_min Battery Minimum Voltage
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_vbat_min(uint32 device_index, uint8 *vbat_min);
+
+/**
+* @brief This function returns max battery current *
+* @details
+* Running Ibat Min stored and then cleared by SW
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]ibat_max Battery Maximum Current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_ibat_max(uint32 device_index, uint8 *ibat_max);
+
+
+/**
+* @brief This function returns copy of minimum battery Voltage *
+* @details
+* Running Vbat Min stored and then cleared by SW
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]vbat_min Battery Minimum Voltage
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_vbat_min_cp(uint32 device_index, uint8 *vbat_min_cp);
+
+/**
+* @brief This function returns copy of max battery current *
+* @details
+* Running Ibat Min stored and then cleared by SW
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]ibat_max Battery Maximum Current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_ibat_max_cp(uint32 device_index, uint8 *ibat_max_cp);
+
+
+/**
+* @brief This function returns Battery Resitance in HALF encoding *
+* @details
+* HALF-FLOATING point encoding, 15:11 exp, bit 10 sign, 9:0 mantissa, 1=1 ohm, refer to MDOS for encoding info
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]batt_resistance Battery Resistance
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_half_point_encoding(uint32 device_index, uint16 *batt_resistance);
+
+
+/**
+* @brief This function returns BCL mode status *
+* @details
+* This function returns BCL mode status
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] bcl_mode BCL mode
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_mode(uint32 device_index, pm_fg_adc_usr_bcl_mode_sts *bcl_mode);
+
+
+/**
+* @brief This function returns votlage gain correction value for battery voltage *
+* @details
+* This function returns gain correction value for battery
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] gainCorrection for battery volatge
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_v_gain_batt(uint32 device_index, int32 *v_gain_correction);
+
+/**
+* @brief This function returns current Rsense gain correction value for Battery Current *
+* @details
+* This function returns current Rsense gain correction value for Battery Current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] gainCorrection for battery volatge
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_gain_rsense(uint32 device_index, int32 *i_gain_rsense);
+
+
+/**
+* @brief This function returns current Rsense offset value for Battery Current *
+* @details
+* This function returns current Rsense offset value for Battery Current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] ioffset_rsense Offset Gain Correction battery current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_offset_rsense(uint32 device_index, int32 *i_offset_rsense);
+
+
+/**
+* @brief This function returns current gain in BATFET for Battery Current *
+* @details
+* This function returns current gain in BATFET for Battery Current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] igain_offset_correction Gain Correction for battery current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_gain_batfet(uint32 device_index, int32 *i_gain_batfet);
+
+
+/**
+* @brief This function returns current offset in BATFET for Battery Current *
+* @details
+* This function returns current gain in BATFET for Battery Current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] ioffset_batfet_correction offset Gain Correction for BATFET
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_offset_batfet(uint32 device_index, int32 *i_offset_batfet);
+
+
+/**
+* @brief This function returns source used for current sense *
+* @details
+* This function returns source used for current sense
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] isense_source source used for current sense
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_sense_source(uint32 device_index, boolean *i_sense_source);
+
+
+/**
+* @brief This function cleras stored VBAT minimum *
+* @details
+* This function cleras stored VBAT minimum
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable for clearing stored vbat minimum
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_clear_vbat_min(uint32 device_index, boolean enable);
+
+/**
+* @brief This function clears stored IBAT Max *
+* @details
+* This function cleras stored IBAT Max
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable for clearing stored vbat minimum
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_clear_ibat_max(uint32 device_index, boolean enable);
+
+/**
+* @brief This function returns battery charge current after gain and offset calibration*
+* @details
+* calibrated_value = ((raw_data + offset) * (1 + gain))
+*
+* @param[in] pmic_device_index Primary: 0 Secondary: 1
+* @param[out]calibrated_vbat Calibrated Battery Voltage
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_calibrated_ibat(uint32 pmic_device, int32 *calibrated_ibat);
+
+/**
+* @brief This function returns battery ADC Voltage after gain calibration*
+* @details
+* calibrated_value = raw_data * (1 + gain)
+*
+* @param[in] pmic_device_index Primary: 0 Secondary: 1
+* @param[out]calibrated_vbat Calibrated Battery Voltage
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_calibrated_vbat(uint32 pmic_device, uint32 *calibrated_vbat);
+
+
+#endif /* __PM_FG_ADC_USR_H__ */
diff --git a/dev/pmic/pmi8994/include/pm_fg_driver.h b/dev/pmic/pmi8994/include/pm_fg_driver.h
new file mode 100644
index 0000000..85685e6
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_fg_driver.h
@@ -0,0 +1,292 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef __PM_FG_DRIVER_H__
+#define __PM_FG_DRIVER_H__
+
+/*===========================================================================
+ INCLUDE FILES
+===========================================================================*/
+
+#include "pm_err_flags.h"
+#include "pm_resources_and_types.h"
+#include "pm_comm.h"
+
+/*===========================================================================
+ TYPE DEFINES AND ENUMS
+===========================================================================*/
+
+/* FG SOC register */
+typedef struct fg_soc_register_ds
+{
+ pm_register_address_type base_address;
+ pm_register_address_type peripheral_offset;
+
+ pm_register_address_type fg_soc_alg_sts; //0x006
+ pm_register_address_type fg_soc_alg_aux_sts0; //0x007
+ pm_register_address_type fg_soc_sleep_shutdown_sts;//0x008
+ pm_register_address_type fg_soc_monotonic_soc; //0x009
+ pm_register_address_type fg_soc_monotonic_soc_cp; //0x00A
+
+ pm_register_address_type int_rt_sts; //0x010
+ pm_register_address_type int_set_type; //0x011
+ pm_register_address_type int_polarity_high; //0x012
+ pm_register_address_type int_polarity_low; //0x013
+ pm_register_address_type int_latched_clr; //0x014
+ pm_register_address_type int_en_set; //0x015
+ pm_register_address_type int_en_clr; //0x016
+ pm_register_address_type int_latched_sts; //0x018
+ pm_register_address_type int_pending_sts; //0x019
+ pm_register_address_type int_mid_sel; //0x01A
+ pm_register_address_type int_priority; //0x01B
+
+ pm_register_address_type fg_soc_boot_mode; //0x050
+ pm_register_address_type fg_soc_restart; //0x051
+ pm_register_address_type fg_soc_wdog_exp; //0x052
+ pm_register_address_type fg_soc_sts_clr; //0x053
+
+ pm_register_address_type fg_soc_sec_access; //0x0D0
+
+ pm_register_address_type fg_soc_vadc_data0; //0x0E8
+ pm_register_address_type fg_soc_bcl_tst0; //0x0E9
+
+ pm_register_address_type fg_soc_alg_sts_cmp; //0x0EB
+
+ pm_register_address_type fg_soc_trim_num; //0x0F0
+
+ pm_register_address_type fg_soc_fg_pbs_trig; //0x0F1
+ pm_register_address_type fg_soc_fg_pbs_trig_mux; //0x0F2
+ pm_register_address_type fg_soc_fg_reset; //0x0F3
+ pm_register_address_type fg_soc_fg_cya_cfg; //0x0F4
+ pm_register_address_type fg_soc_low_power_cfg; //0x0F5
+ pm_register_address_type fg_soc_bcl_v_gain_batt_trim;//0x0F6
+ pm_register_address_type fg_soc_bcl_i_gain_rsense_trim;//0x0F7
+ pm_register_address_type fg_soc_bcl_i_offset_rsense_trim;//0x0F8
+ pm_register_address_type fg_soc_bcl_i_gain_batfet_trim;//0x0F9
+ pm_register_address_type fg_soc_bcl_i_offset_batfet_trim;//0x0FA
+
+}fg_soc_register_ds;
+
+/* FG Battery register */
+typedef struct fg_batt_register_ds
+{
+ pm_register_address_type base_address;
+ pm_register_address_type peripheral_offset;
+
+ //Read Battery ID currently in use by the alogorithm
+ pm_register_address_type fg_batt_battery; //0x006
+ //FG System Battery Status
+ pm_register_address_type fg_batt_sys_batt; //0x007
+ //Battery detection
+ pm_register_address_type fg_batt_det; //0x008
+ //Battery status information on JEITA
+ pm_register_address_type fg_batt_info_sts; //0x009
+
+ pm_register_address_type fg_batt_recovery_sts; //0x00A
+
+ pm_register_address_type int_rt_sts; //0x010
+ pm_register_address_type int_set_type; //0x011
+ pm_register_address_type int_polarity_high; //0x012
+ pm_register_address_type int_polarity_low; //0x013
+ pm_register_address_type int_latched_clr; //0x014
+ pm_register_address_type int_en_set; //0x015
+ pm_register_address_type int_en_clr; //0x016
+ pm_register_address_type int_latched_sts; //0x018
+ pm_register_address_type int_pending_sts; //0x019
+ pm_register_address_type int_mid_sel; //0x01A
+ pm_register_address_type int_priority; //0x01B
+
+ //Force Battery ID during first SOC re detection
+ pm_register_address_type fg_batt_sw_batt_id; //0x050
+ //Battery Profile ID
+ pm_register_address_type fg_batt_profile_id; //0x051
+ pm_register_address_type fg_batt_removed_latched; //0x052
+ //Set by sw after FG provides recovery information
+ pm_register_address_type fg_batt_batt_recovery; //0x053
+ // Battery secured access
+ pm_register_address_type fg_batt_sec_access; //0x0D0
+
+ pm_register_address_type fg_batt_esr_change_bound; //0x0E2
+
+ pm_register_address_type fg_batt_peek_mux1; //0x0EB
+ pm_register_address_type fg_batt_peek_mux2; //0x0EC
+ pm_register_address_type fg_batt_peek_mux3; //0x0ED
+ pm_register_address_type fg_batt_peek_mux4; //0x0EE
+
+ //Number of Trim register in pheripheral
+ pm_register_address_type fg_batt_trim_num; //0x0F0
+ //Battery Misc configuration ..recovery and thermistor cfg
+ pm_register_address_type fg_batt_misc_cfg; //0x0F1
+
+ //Battery ID trum values
+ pm_register_address_type fg_batt_batt_id_curr0; //0x0F2
+ pm_register_address_type fg_batt_batt_id_curr1; //0x0F3
+ pm_register_address_type fg_batt_esr_cur; //0x0F4
+ //Enable/Disbale ESR mesurement
+ pm_register_address_type fg_batt_esr_meas_en; //0x0F5
+ pm_register_address_type fg_batt_rbias_div_sel; //0x0F6
+
+}fg_batt_register_ds;
+
+
+/* FG Memory Intergace register */
+typedef struct fg_memif_register_ds
+{
+ pm_register_address_type base_address;
+ pm_register_address_type peripheral_offset;
+
+ pm_register_address_type fg_memif_revision1; //0x000
+ pm_register_address_type fg_memif_revision2; //0x001
+ pm_register_address_type fg_memif_revision3; //0x002
+ pm_register_address_type fg_memif_revision4; //0x003
+
+ pm_register_address_type int_rt_sts; //0x010
+ pm_register_address_type int_set_type; //0x011
+ pm_register_address_type int_polarity_high; //0x012
+ pm_register_address_type int_polarity_low; //0x013
+ pm_register_address_type int_latched_clr; //0x014
+ pm_register_address_type int_en_set; //0x015
+ pm_register_address_type int_en_clr; //0x016
+ pm_register_address_type int_latched_sts; //0x018
+ pm_register_address_type int_pending_sts; //0x019
+ pm_register_address_type int_mid_sel; //0x01A
+ pm_register_address_type int_priority; //0x01B
+
+ //Memory Interface configuration
+ pm_register_address_type fg_memif_mem_intf_cfg; //0x040
+ //Memory Interface Control
+ pm_register_address_type fg_memif_mem_intf_ctl; //0x041
+ pm_register_address_type fg_memif_mem_intf_addr_lsb;//0x042
+ pm_register_address_type fg_memif_mem_intf_addr_msb;//0x043
+
+ pm_register_address_type fg_memif_mem_intf_wr_data0;//0x048
+ pm_register_address_type fg_memif_mem_intf_wr_data1;//0x049
+ pm_register_address_type fg_memif_mem_intf_wr_data2;//0x04A
+ pm_register_address_type fg_memif_mem_intf_wr_data3;//0x04B
+
+ pm_register_address_type fg_memif_mem_intf_rd_data0;//0x04C
+ pm_register_address_type fg_memif_mem_intf_rd_data1;//0x04D
+ pm_register_address_type fg_memif_mem_intf_rd_data2;//0x04E
+ pm_register_address_type fg_memif_mem_intf_rd_data3;//0x04F
+
+ //PMIC Secured Access
+ pm_register_address_type fg_memif_sec_access; //0x0D0
+ //OTP Configuration
+ pm_register_address_type fg_memif_otp_cfg1; //0x0E2
+ pm_register_address_type fg_memif_otp_cfg2; //0x0E3
+
+}fg_memif_register_ds;
+
+
+/* FG ADC User register */
+typedef struct fg_adc_usr_register_ds
+{
+ pm_register_address_type base_address;
+ pm_register_address_type peripheral_offset;
+
+ pm_register_address_type int_rt_sts; //0x010
+ pm_register_address_type int_set_type; //0x011
+ pm_register_address_type int_polarity_high; //0x012
+ pm_register_address_type int_polarity_low; //0x013
+ pm_register_address_type int_latched_clr; //0x014
+ pm_register_address_type int_en_set; //0x015
+ pm_register_address_type int_en_clr; //0x016
+ pm_register_address_type int_latched_sts; //0x018
+ pm_register_address_type int_pending_sts; //0x019
+ pm_register_address_type int_mid_sel; //0x01A
+ pm_register_address_type int_priority; //0x01B
+
+ //Enable FG ADC Modgule for BCL
+ pm_register_address_type fg_adc_usr_en_ctl; //0x046
+ //Pause the updates ofr battery registers
+ pm_register_address_type fg_adc_usr_access_bat_req;//0x050
+ pm_register_address_type fg_adc_usr_access_bat_grnt;//0x051
+ // bcl values after first reading from ADC are obtained
+ pm_register_address_type fg_adc_usr_bcl_values; //0x053
+ // ADC user secured access
+ pm_register_address_type fg_adc_usr_sec_access; //0x0D0
+ // VBAT, IBAT
+ pm_register_address_type fg_adc_usr_vbat; //0x054
+ pm_register_address_type fg_adc_usr_ibat; //0x055
+ pm_register_address_type fg_adc_usr_vbat_cp; //0x056
+ pm_register_address_type fg_adc_usr_ibat_cp; //0x057
+ //Min max values
+ pm_register_address_type fg_adc_usr_vbat_min; //0x058
+ pm_register_address_type fg_adc_usr_ibat_max; //0x059
+ pm_register_address_type fg_adc_usr_vbat_min_cp; //0x05A
+ pm_register_address_type fg_adc_usr_ibat_max_cp; //0x05B
+ //HALF battery resistance value
+ pm_register_address_type fg_adc_usr_bat_res_7_0; //0x05C
+ pm_register_address_type fg_adc_usr_bat_res_15_8; //0x05D
+ //BCL Modes
+ pm_register_address_type fg_adc_usr_bcl_mode; //0x05E
+ //Gain Correction
+ pm_register_address_type fg_adc_usr_bcl_v_gain_batt;//0x060
+ pm_register_address_type fg_adc_usr_bcl_i_gain_rsense;//0x061
+ pm_register_address_type fg_adc_usr_bcl_i_offset_rsense;//0x062
+ pm_register_address_type fg_adc_usr_bcl_i_gain_batfet;//0x063
+ pm_register_address_type fg_adc_usr_bcl_i_offset_batfet;//0x064
+ pm_register_address_type fg_adc_usr_bcl_i_sense_source;//0x065
+ //vbat ibatmax clear
+ pm_register_address_type fg_adc_usr_vbat_min_clr; //0x066
+ pm_register_address_type fg_adc_usr_ibat_max_clr; //0x067
+ //threshold interrrupt
+ pm_register_address_type fg_adc_usr_vbat_int; //0x068
+ pm_register_address_type fg_adc_usr_ibat_int; //0x069
+
+}fg_adc_usr_register_ds;
+
+typedef struct fg_register_ds
+{
+ fg_soc_register_ds *soc_register;
+ fg_batt_register_ds *batt_register;
+ fg_memif_register_ds *memif_register;
+ fg_adc_usr_register_ds *adc_usr_register;
+
+}fg_register_ds;
+
+typedef struct
+{
+ pm_comm_info_type *comm_ptr;
+ fg_register_ds *fg_register;
+ uint8 num_of_peripherals;
+}pm_fg_data_type;
+
+
+/*===========================================================================
+
+ FUNCTION DECLARATION
+
+===========================================================================*/
+
+/* driver init */
+void pm_fg_driver_init(uint32 pmic_index);
+
+pm_fg_data_type* pm_fg_get_data(uint32 pmic_index);
+
+#endif // __PM_FG_DRIVER_H__
diff --git a/dev/pmic/pmi8994/include/pm_resources_and_types.h b/dev/pmic/pmi8994/include/pm_resources_and_types.h
new file mode 100644
index 0000000..339d5f4
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_resources_and_types.h
@@ -0,0 +1,262 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_RESOURCES_AND_TYPES__H
+#define PM_RESOURCES_AND_TYPES__H
+
+/*===========================================================================
+
+ HEADER FILES
+
+===========================================================================*/
+#include <stdint.h>
+#include <sys/types.h>
+#include <smem.h>
+
+/*===========================================================================
+
+ TYPE DEFINITIONS
+
+===========================================================================*/
+typedef uint8_t pm_register_data_type;
+typedef uint16_t pm_register_address_type;
+
+
+#define PM_MAX_NUM_PMICS SMEM_MAX_PMIC_DEVICES
+
+/*! \enum chargers
+ * \brief This enum contains definitions of all chargers in the target
+ */
+
+enum
+{
+ PM_CHG_1,
+ PM_CHG_INVALID
+};
+
+/*!
+ * PMIC power module voltage level
+ */
+typedef uint32 pm_volt_level_type;
+
+typedef enum
+{
+ PM_OFF,
+ PM_ON,
+ PM_INVALID
+}pm_on_off_type;
+
+
+typedef enum
+{
+ PM_DISABLE_CONFIG = 0,
+ PM_ENABLE_CONFIG = 1,
+ PM_CONFIG_INVALID
+} pm_smbchg_param_config_enable_type;
+
+
+typedef enum
+{
+ PM_SW_MODE_LPM = 0, // Low power mode
+ PM_SW_MODE_BYPASS = 1, // Bypass mode bit 5
+ PM_SW_MODE_AUTO = 2, // Auto mode bit 6
+ PM_SW_MODE_NPM = 4, // Normal power mode bit 7
+ PM_SW_MODE_INVALID
+}pm_sw_mode_type;
+
+/*!
+ * The number of phases that the autonomous phase controller(APC) can use.
+ */
+typedef enum
+{
+ PM_PHASE_CNT__1,
+ PM_PHASE_CNT__2,
+ PM_PHASE_CNT__3,
+ PM_PHASE_CNT__4,
+ PM_PHASE_CNT__INVALID
+}pm_phase_cnt_type;
+
+/**
+ @struct peripheral_info_type
+ @brief Contains Peripheral Information such as Type, Subtype,
+ Analog and Digital Major Versions.
+ */
+typedef struct
+{
+ uint16 base_address;
+ uint8 peripheral_type;
+ uint8 peripheral_subtype;
+ uint8 analog_major_version;
+ uint8 analog_minor_version;
+ uint8 digital_major_version;
+ uint8 digital_minor_version;
+}peripheral_info_type;
+
+// /*!
+// * Generic enable,
+// */
+//typedef enum
+//{
+// PM_NPA_GENERIC_DISABLE, // default
+// PM_NPA_GENERIC_ENABLE,
+// PM_NPA_GENERIC_INVALID
+//}pm_npa_generic_enable_type;
+//
+///*!
+// * Bypass Allowed
+// */
+//typedef enum
+//{
+// PM_NPA_BYPASS_ALLOWED, // default
+// PM_NPA_BYPASS_DISALLOWED,
+// PM_NPA_BYPASS_INVALID
+//}pm_npa_bypass_allowed_type;
+//
+///*!
+// * LDO Software Mode
+// */
+//typedef enum
+//{
+// PM_NPA_SW_MODE_LDO__IPEAK, // default
+// PM_NPA_SW_MODE_LDO__NPM,
+// PM_NPA_SW_MODE_LDO__INVALID
+//}pm_npa_sw_mode_ldo_type;
+///*!
+// * SMPS Software Mode
+// */
+//typedef enum
+//{
+// PM_NPA_SW_MODE_SMPS__AUTO, // default
+// PM_NPA_SW_MODE_SMPS__IPEAK,
+// PM_NPA_SW_MODE_SMPS__NPM,
+// PM_NPA_SW_MODE_SMPS__INVALID
+//}pm_npa_sw_mode_smps_type;
+//
+///*!
+// * Pin Control Enable
+// */
+//typedef enum
+//{
+// PM_NPA_PIN_CONTROL_ENABLE__NONE = 0, // default
+// PM_NPA_PIN_CONTROL_ENABLE__EN1 = 1,
+// PM_NPA_PIN_CONTROL_ENABLE__EN2 = 2,
+// PM_NPA_PIN_CONTROL_ENABLE__EN3 = 4,
+// PM_NPA_PIN_CONTROL_ENABLE__EN4 = 8,
+// PM_NPA_PIN_CONTROL_ENABLE__INVALID
+//}pm_npa_pin_control_enable_type;
+//
+///*!
+// * Pin Control Power Mode
+// */
+//typedef enum
+//{
+// PM_NPA_PIN_CONTROL_POWER_MODE__NONE = 0, // default
+// PM_NPA_PIN_CONTROL_POWER_MODE__EN1 = 1,
+// PM_NPA_PIN_CONTROL_POWER_MODE__EN2 = 2,
+// PM_NPA_PIN_CONTROL_POWER_MODE__EN3 = 4,
+// PM_NPA_PIN_CONTROL_POWER_MODE__EN4 = 8,
+// PM_NPA_PIN_CONTROL_POWER_MODE__SLEEPB = 16,
+// PM_NPA_PIN_CONTROL_POWER_MODE__INVALID
+//}pm_npa_pin_control_power_mode_type;
+//
+//
+///*!
+// * Pin Control Power Mode
+// */
+//typedef enum
+//{
+// PM_NPA_CORNER_MODE__NONE = 0, // default
+// PM_NPA_CORNER_MODE__1 = 1,
+// PM_NPA_CORNER_MODE__2 = 2,
+// PM_NPA_CORNER_MODE__3 = 3,
+// PM_NPA_CORNER_MODE__4 = 4,
+// PM_NPA_CORNER_MODE__5 = 5,
+// PM_NPA_CORNER_MODE__6 = 6,
+// PM_NPA_CORNER_MODE__INVALID
+//}pm_npa_corner_mode_type;
+//
+///*!
+// * Pin Control Enable
+// */
+//typedef enum
+//{
+// PM_NPA_CLK_BUFFER_PIN_CONTROL_ENABLE__NONE = 0, // default
+// PM_NPA_CLK_BUFFER_PIN_CONTROL_ENABLE__EN1 = 1,
+// PM_NPA_CLK_BUFFER_PIN_CONTROL_ENABLE__INVALID
+//}pm_npa_clk_buff_pin_control_enable_type;
+//
+typedef enum
+{
+ PM_CLK_BUFF_OUT_DRV__1X,
+ PM_CLK_BUFF_OUT_DRV__2X,
+ PM_CLK_BUFF_OUT_DRV__3X,
+ PM_CLK_BUFF_OUT_DRV__4X,
+} pm_clk_buff_output_drive_strength_type;
+
+/*! \enum pm_irq_trigger_type
+ * \brief Type definition for different IRQ triggers
+ */
+typedef enum
+{
+ PM_IRQ_TRIGGER_ACTIVE_LOW,
+ PM_IRQ_TRIGGER_ACTIVE_HIGH,
+ PM_IRQ_TRIGGER_RISING_EDGE,
+ PM_IRQ_TRIGGER_FALLING_EDGE,
+ PM_IRQ_TRIGGER_DUAL_EDGE,
+ PM_IRQ_TRIGGER_INVALID
+} pm_irq_trigger_type;
+
+/*! \enum pm_irq_status_type
+ * \brief Type definition for different IRQ STATUS
+ */
+typedef enum
+{
+ PM_IRQ_STATUS_RT,
+ PM_IRQ_STATUS_LATCHED,
+ PM_IRQ_STATUS_PENDING,
+ PM_IRQ_STATUS_ENABLE,
+ PM_IRQ_STATUS_INVALID
+} pm_irq_status_type;
+
+///*! \enum pm_npa_mode_id_core_rail_type
+// * \brief To do CPR voltage settling in the SBL.
+// */
+//typedef enum
+//{
+// PMIC_NPA_MODE_ID_CORE_RAIL_OFF = 0,
+// PMIC_NPA_MODE_ID_CORE_RAIL_RETENTION = 1,
+// PMIC_NPA_MODE_ID_CORE_RAIL_LOW_MINUS = 2,
+// PMIC_NPA_MODE_ID_CORE_RAIL_LOW = 3,
+// PMIC_NPA_MODE_ID_CORE_RAIL_NOMINAL = 4,
+// PMIC_NPA_MODE_ID_CORE_RAIL_NOMINAL_PLUS = 5,
+// PMIC_NPA_MODE_ID_CORE_RAIL_TURBO = 6,
+// PMIC_NPA_MODE_ID_CORE_RAIL_MAX = 7,
+//}pm_npa_mode_id_core_rail_type;
+//
+#endif /* PM_RESOURCES_AND_TYPES__H */
+
diff --git a/dev/pmic/pmi8994/include/pm_smbchg_bat_if.h b/dev/pmic/pmi8994/include/pm_smbchg_bat_if.h
new file mode 100644
index 0000000..7d3a8f6
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_smbchg_bat_if.h
@@ -0,0 +1,540 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_SMBCHG_BAT_IF_H
+#define PM_SMBCHG_BAT_IF_H
+
+#include "pm_err_flags.h"
+#include "pm_resources_and_types.h"
+
+/*===========================================================================
+
+ TYPE DEFINITIONS
+
+===========================================================================*/
+
+
+/*! \struct pm_smbchg_bat_if_cmd_chg_type
+ \brief Struct for writing to battery interface command control
+ */
+typedef enum pm_smbchg_bat_if_cmd_chg_type
+{
+ PM_SMBCHG_BAT_IF_CMD__OTG_EN, /** <OTG Enable, 0 = Disable, 1 = Enable >*/
+ PM_SMBCHG_BAT_IF_CMD__EN_BAT_CHG, /** <Enable Battery Charging >*/
+ PM_SMBCHG_BAT_IF_CMD__FC_COM, /** <Fast Charge Command, FALSE = Force pre-charge current, TRUE = Allow Fast Charge >*/
+ PM_SMBCHG_BAT_IF_CMD__STAT_OUTPUT, /** <0 = STAT output enabled (still allow IRQs) 1 = Turn off STAT pin (still allow IRQs) >*/
+ PM_SMBCHG_BAT_IF_CMD__THERM_NTC_I_OVERRIDE, /** <0 = Thermistor Monitor per config setting 1 = Force thermistor monitor disable (override config)>*/
+ PM_SMBCHG_BAT_IF_CMD__WIRELESS_CHG_DIS, /** <Wireless charging 0 = enabled, 1 = disabled >*/
+ PM_SMBCHG_BAT_IF_CMD__INVALID /** <INVALID >*/
+}pm_smbchg_bat_if_cmd_chg_type;
+
+
+/*! \enum pm_smbchg_bat_if_low_bat_thresh_type
+ \brief enum for different level of low battery threshold
+ */
+typedef enum pm_smbchg_bat_if_low_bat_thresh_type
+{
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_DISABLED,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_2P5,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_2P6,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_2P7,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_2P8,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_2P9,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P0,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P1,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P7,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_2P88,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P00,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P10,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P25,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P35,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P46,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P58,
+ PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_INVALID
+}pm_smbchg_bat_if_low_bat_thresh_type;
+
+
+/*! \struct pm_smbchg_bat_if_cmd_chg_type
+ \brief Struct for configuring battery missing configuration
+ */
+typedef struct pm_smbchg_bat_if_batt_missing_cfg_type
+{
+ uint32 batt_removal_det_time_usec; /** <Battery removal detection time: 80,160,320,640 usec > */
+ boolean batt_bat_get_override_en; /** <Battery FET Configuration 0 = Normal operation 1 = override (turn off FET) 0x0 : BATT_FET_NORMAL 0x1 : BATT_FET_OVERRIDE > */
+ boolean batt_missing_input_plugin_en; /** <Battery Missing on Input Plug-In 0 = Disabled 1 = Enabled 0x0 : BMA_PLUG_IN_DIS 0x1 : BMA_PLUG_IN_EN > */
+ boolean batt_missing_2p6s_poller_en; /** <Battery Missing 2.6s Poller 0 = Disabled 1 = Enabled 0x0 : BMA_POLLER_DIS 0x1 : BMA_POLLER_EN > */
+ boolean batt_missing_algo_en; /** <Battery Missing Algorithm 0 = Disabled 1 = Enabled 0x0 : BMA_DIS 0x1 : BMA_EN > */
+ boolean use_bmd_pin_for_batt_missing_src;
+ boolean use_therm_pin_for_batt_missing_src;
+}pm_smbchg_bat_if_batt_missing_cfg_type;
+
+/*! \enum pm_smbchg_bat_miss_detect_src_type
+ \brief enum for battery missing detection sources
+ */
+typedef enum pm_smbchg_bat_miss_detect_src_type
+{
+ PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_THERM_PIN,
+ PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_BMD_PIN,
+ PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_THERM_BMD_PIN,
+ PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_NONE,
+ PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_INVALID,
+}pm_smbchg_bat_miss_detect_src_type;
+
+
+/*! \enum pm_smbchg_bat_if_dcin_icl_type
+ \brief enum for configuring dcin input current limit mode
+ */
+typedef enum pm_smbchg_bat_if_dcin_icl_type
+{
+ PM_SMBCHG_BAT_IF_DCIN_PASS_THROUGH_MODE, /** < pass through mode and ~9.8v >*/
+ PM_SMBCHG_BAT_IF_DCIN_LOW_VOLT_MODE, /** <low volt mode, DCIN less than 6.5v, DIV2_EN =1 >*/
+ PM_SMBCHG_BAT_IF_DCIN_HIGH_VOLT_MODE, /** <high volt mode DCIN >= 6.5v and max 9v, , DIV2_EN =1 >*/
+ PM_SMBCHG_BAT_IF_DCIN_INVALID_MODE, /** <INVALID mode >*/
+}pm_smbchg_bat_if_dcin_icl_type;
+
+
+/*! \enum pm_smbchg_irq_bit_field_type
+ \brief different types of irq bit fields of by smbch_bat_if irq module
+ */
+typedef enum {
+ PM_SMBCHG_BAT_IF_HOT_BAT_HARD_LIM,
+ PM_SMBCHG_BAT_IF_HOT_BAT_SOFT_LIM,
+ PM_SMBCHG_BAT_IF_COLD_BAT_HARD_LIM,
+ PM_SMBCHG_BAT_IF_COLD_BAT_SOFT_LIM,
+ PM_SMBCHG_BAT_IF_BAT_OV,
+ PM_SMBCHG_BAT_IF_BAT_LOW,
+ PM_SMBCHG_BAT_IF_BAT_MISSING,
+ PM_SMBCHG_BAT_IF_BAT_TERM_MISSING,
+ PM_SMBCHG_BAT_IF_IRQ_INVALID
+}pm_smbchg_bat_if_irq_type;
+
+/*===========================================================================
+
+ SMBCHG BAT_IF DRIVER FUNCTION PROTOTYPES
+
+===========================================================================*/
+
+
+/*Returns battery presence status*/
+/**
+ * @brief This function returns battery presence status.
+ *
+ * @details
+ * This function returns battery presence status..
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out]bat_present. TRUE: Present, FALSE: not present
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_get_bat_pres_status(uint32 device_index, boolean *bat_present);
+
+
+/*This API clears the dead battery timer*/
+/**
+ * @brief This function clears the dead battery timer
+ *
+ * @details
+ * This function clears the dead battery timer.
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_clear_dead_bat_timer(uint32 device_index);
+
+
+
+/**
+ * @brief This function writes to battery interface command control to enable/disable wireless charging,
+ * thermal current override, stat output, fast charge, battery charging, OTG .
+ *
+ * @details
+ * This function writes to battery interface command control to enable/disable wireless charging,
+ * thermal current override, stat output, fast charge, battery charging, OTG .
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in]cmd_chg_cfg. Refer pm_smbchg_bat_if_cmd_chg_type
+ * for more info
+ * @param[in]boolean TRUE: enable, FALSE: disable
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_config_chg_cmd(uint32 device_index, pm_smbchg_bat_if_cmd_chg_type cmd_chg_cfg, boolean enable);
+
+
+
+ /**
+ * @brief This function reads to battery interface command control to enable/disable wireless charging,
+ * thermal current override, stat output, fast charge, battery charging, OTG .
+ *
+ * @details
+ * This function reads to battery interface command control to
+ * enable/disable wireless charging, thermal current override,
+ * stat output, fast charge, battery charging, OTG .
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in]cmd_chg_cfg. Refer pm_smbchg_bat_if_cmd_chg_type
+ * for more info
+ * @param[out]boolean TRUE: enable, FALSE: disable
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_get_chg_cmd(uint32 device_index, pm_smbchg_bat_if_cmd_chg_type cmd_chg_cfg, boolean *enable);
+
+/*Sets low battery voltag threshold*/
+/**
+ * @brief This function sets low battery voltag threshold.
+ *
+ * @details
+ * Sets low battery voltag threshold .
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in]low_bat_threshold. Refer pm_smbchg_bat_if_low_bat_thresh_type
+ * for more info
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_set_low_batt_volt_threshold(uint32 device_index, pm_smbchg_bat_if_low_bat_thresh_type low_bat_threshold);
+
+
+/**
+ * @brief This function reads low battery voltag threshold.
+ *
+ * @details
+ * Gets low battery voltag threshold .
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out]low_bat_threshold. Refer pm_smbchg_bat_if_low_bat_thresh_type
+ * for more info
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_get_low_bat_volt_threshold(uint32 device_index, pm_smbchg_bat_if_low_bat_thresh_type *low_bat_threshold);
+
+
+
+/**
+ * @brief This function configures battery missing parameters
+ *
+ * @details
+ * This API sets battery missing detection configuration like select if the
+ * battery missing monitoring should only happen at the beginning of a charge cycle
+ * or every 3 seconds
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] batt_missing_cfg. Refer pm_smbchg_bat_if_batt_missing_cfg_type
+ * for more info
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_set_bat_missing_cfg(uint32 device_index, pm_smbchg_bat_if_batt_missing_cfg_type *batt_missing_cfg);
+
+
+/**
+ * @brief This function reads battery missing config
+ *
+ * @details
+ * This API reads battery missing detection configuration like
+ * select if the battery missing monitoring should only happen
+ * at the beginning of a charge cycle or every 3 seconds
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] batt_missing_cfg. Refer
+ * pm_smbchg_bat_if_batt_missing_cfg_type
+ * for more info
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_get_bat_missing_cfg(uint32 device_index, pm_smbchg_bat_if_batt_missing_cfg_type *batt_missing_cfg);
+
+
+/**
+ * @brief This function sets battery missing detection source
+ *
+ * @details
+ * This API sets battery missing detection source
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] batt_missing_cfg. Refer
+ * pm_smbchg_bat_miss_detect_src_type
+ * for more info
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_set_bat_missing_detection_src(uint32 device_index, pm_smbchg_bat_miss_detect_src_type batt_missing_det_src);
+
+/**
+ * @brief This function sets the minimum system voltage
+ *
+ * @details
+ * This API sets the minimum system voltage. And below this
+ * voltage system and battery are not connected
+ * together.Valid values are 3150, 3450 and 3600 milli volt
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] min_sys_millivolt Valid value is 3150 mv to
+ * 3600mV
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_set_min_sys_volt(uint32 device_index, uint32 min_sys_millivolt);
+
+
+/**
+ * @brief This function reads the minimum system voltage
+ *
+ * @details
+ * This API reads the minimum system voltage. And below this
+ * voltage system and battery are not connected together.Valid
+ * values are 3150, 3450 and 3600 milli volt
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] min_sys_millivolt Valid value is 3150 mv to
+ * 3600mV
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_get_min_sys_volt(uint32 device_index, uint32 *min_sys_millivolt);
+
+
+
+/**
+ * @brief This function configures the current limit for pass
+ * through mode, low volt mode and high volt mode
+ *
+ * @details
+ * This API configures the DCIN input current limit for pass
+ * through mode, low volt mode and high volt mode in milliamp
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] dcin_icl_type refer enum pm_smbchg_bat_if_dcin_icl_type
+ * for more info
+ *
+ * @param[in] current_ma valid value 300 to 2000 mAmp
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_set_dcin_input_current_limit(uint32 device_index, pm_smbchg_bat_if_dcin_icl_type dcin_icl_type, uint32 current_ma);
+
+/*This API reads the configured current limit for pass through mode, low volt mode and high volt mode in milliamp*/
+/**
+ * @brief This function returns the current limit for pass
+ * through mode, low volt mode and high volt mode
+ *
+ * @details
+ * This API returns the DCIN input current limit for pass
+ * through mode, low volt mode and high volt mode in milliamp
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] dcin_icl_type refer enum pm_smbchg_bat_if_dcin_icl_type
+ * for more info
+ *
+ * @param[out]current_ma valid value 300 to 2000 mAmp
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_bat_if_get_dcin_input_current_limit(uint32 device_index, pm_smbchg_bat_if_dcin_icl_type dcin_icl_type, uint32 *current_ma);
+
+
+
+/**
+* @brief This function configures WI PWR timer.
+*
+* @details
+* This API configures WI PWR timer. div2 falling edge values:
+* 0, 150, 250, 500 usec. wipwr_irq_tmr_us values 1000,
+* 1500,2000,2500,3000,4000,4500 usec*
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] div2_falling_edge_time_us valid values are 0, 150, 250, 500usec
+* @param[in] wipwr_irq_tmr_us values 1000, 1500,2000,2500,3000,4000,4500 usec
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_bat_if_set_wi_pwr_tmr(uint32 device_index, uint32 div2_falling_edge_time_us, uint32 wipwr_irq_tmr_us);
+
+/**
+* @brief This function configures WI PWR timer.
+*
+* @details
+* This API configures WI PWR timer. div2 falling edge values:
+* 0, 150, 250, 500 usec. wipwr_irq_tmr_us values 1000,
+* 1500,2000,2500,3000,4000,4500 usec*
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] div2_falling_edge_time_us valid values are 0, 150, 250, 500usec
+* @param[in] wipwr_irq_tmr_us values 1000, 1500,2000,2500,3000,4000,4500 usec
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_bat_if_get_wi_pwr_tmr(uint32 device_index, uint32 *div2_falling_edge_time_us, uint32 *wipwr_irq_tmr_us);
+
+
+/**
+* @brief This function enables IRQ
+*
+* @details
+* This function enables IRQ
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_bat_if_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_bat_if_irq_enable(uint32 device_index, pm_smbchg_bat_if_irq_type irq, boolean enable);
+
+
+/**
+* @brief This function clears the SMBCHG irq
+*
+* @details
+* This function clears the SMBCHG irq
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_bat_if_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_bat_if_irq_clear(uint32 device_index, pm_smbchg_bat_if_irq_type irq);
+
+/**
+* @brief This function configures the SMBCHG irq trigger
+*
+* @details
+* This function configures the SMBCHG irq trigger
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_bat_if_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_bat_if_irq_set_trigger(uint32 device_index, pm_smbchg_bat_if_irq_type irq, pm_irq_trigger_type trigger);
+
+
+/**
+* @brief This function configures the SMBCHG for irq
+*
+* @details
+* This function configures the SMBCHG for irq
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_bat_if_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_bat_if_irq_status(uint32 device_index, pm_smbchg_bat_if_irq_type irq, pm_irq_status_type type, boolean *status);
+
+
+
+#endif /* PM_SMBCHG_BAT_IF_H*/
+
diff --git a/dev/pmic/pmi8994/include/pm_smbchg_chgr.h b/dev/pmic/pmi8994/include/pm_smbchg_chgr.h
new file mode 100644
index 0000000..d063e32
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_smbchg_chgr.h
@@ -0,0 +1,734 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_SMBCHG_CHGR_H
+#define PM_SMBCHG_CHGR_H
+
+#include "pm_err_flags.h"
+#include "pm_resources_and_types.h"
+
+/*===========================================================================
+
+ TYPE DEFINITIONS
+
+===========================================================================*/
+
+/*! \enum pm_smbchg_chgr_irq_bit_field_type
+ \brief different types of irq bit fields of by smbb irq module
+ */
+typedef enum {
+ PM_SMBCHG_CHGR_CHGR_ERROR,
+ PM_SMBCHG_CHGR_GR_INHIBIT,
+ PM_SMBCHG_CHGR_CHGR_PRECHG_SFT,
+ PM_SMBCHG_CHGR_CHGR_COMPLETE_CHG_SFT,
+ PM_SMBCHG_CHGR_BAT_FT_P2F_CHG_THRESHOLD,
+ PM_SMBCHG_CHGR_BAT_LT_RECHG_THRESHOLD,
+ PM_SMBCHG_CHGR_BAT_TAPER_MODE_CHARGING,
+ PM_SMBCHG_CHGR_BAT_TCC_REACHED,
+ PM_SMBCHG_CHGR_IRQ_INVALID
+}pm_smbchg_chgr_irq_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_CHGR_NO_CHARGING,
+ PM_SMBCHG_CHGR_PRE_CHARGING,
+ PM_SMBCHG_CHGR_FAST_CHARGING,
+ PM_SMBCHG_CHGR_TAPER_CHARGING,
+ PM_SMBCHG_CHGR_CHARGING_INVALID
+}pm_smbchg_chgr_charging_type;
+
+typedef struct
+{
+ boolean is_net_i_discharg;
+ /* is_net_discharg_i: FALSE = Net charging current, TRUE = Net dis-charging current*/
+ boolean is_auto_fv_comp_active;
+ /*automatic float voltage compensation status. FALSE=Inactive, TRUE=Active*/
+ boolean is_chgr_done_once;
+ /*Done Status, FALSE = No charging cycles have terminated since Charging first enabled,
+ TRUE = At least 1 charging cycle has terminated since Charging first enabled */
+ boolean is_batt_lt_2v;
+ /*battery voltage less than 2v*/
+ boolean is_chgr_in_hold_off;
+ /*charging hold off status. FALSE: charger not in hold off; TRUE: charger in hold off*/
+ pm_smbchg_chgr_charging_type charging_type;
+ /*type of charging happening*/
+ boolean charger_enable;
+ /*FALSE= charging command/pin is not asserted. TRUE = charging command/pin asserted*/
+}pm_smbchg_chgr_chgr_status_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_CHGR_CCMPN__COLD_SL_CHG_I_COMP, /** <Cold SL Charge Current Compensation >*/
+ PM_SMBCHG_CHGR_CCMPN__HOT_SL_CHG_I_COMP, /** <Hot SL Charge Current Compensation >*/
+ PM_SMBCHG_CHGR_CCMPN__COLD_SL_FV_COMP, /** <Cold SL Float Voltage Compensation >*/
+ PM_SMBCHG_CHGR_CCMPN__HOT_SL_FV_COMP, /** <Hot SL Float Voltage Compensation >*/
+ PM_SMBCHG_CHGR_CCMPN__LOAD_BAT, /** <Load Battery during Float Voltage Compensation >*/
+ PM_SMBCHG_CHGR_CCMPN__JEITA_TEMP_HARD_LIMIT, /** <Jeita Temperature Hard Limit disable >*/
+ PM_SMBCHG_CHGR_CCMPN__TEMP_MONITOR_ENABLE, /** <Temperature Monitor Enabled when input is present>*/
+ PM_SMBCHG_CHGR_CCMPN__INVALID /** < Invalid >*/
+}pm_smbchg_chgr_ccmpn_type;
+
+
+//output that can be used as an input or a systerm O.k. indicator
+typedef enum
+{ //INOK output is asserted to indicate valid input adapter presence
+ PM_SMBCHG_CHGR_SYSOK_OPT__INOK_OPT_1, //The INOK is asserted only per the input voltage level and as soon as the glitch filter timer has expired
+ PM_SMBCHG_CHGR_SYSOK_OPT__INOK_OPT_2, //The INOK is asserted only when the input FET is on and the charger buck soft-start has completed and only after the APSD algorithm has completed (if enabled)
+ PM_SMBCHG_CHGR_SYSOK_OPT__SYSOK_OPT_A_1, //the SYSOK goes active LOW when no valid input power is present and the battery voltage is lower than the programmable low-battery/SYSOK voltage threshold (VLOWBATT) or the battery is missing
+ PM_SMBCHG_CHGR_SYSOK_OPT__SYSOK_OPT_A_2, //the SYSOK goes active LOW when the battery voltage is lower than the programmable low-battery / SYSOK voltage threshold (VLOWBATT) or the battery is missing, regardless of the input being present
+ PM_SMBCHG_CHGR_SYSOK_OPT__SYSOK_OPT_BC_1,
+ PM_SMBCHG_CHGR_SYSOK_OPT__SYSOK_OPT_BC_2,
+ PM_SMBCHG_CHGR_SYSOK_OPT__CHG_DET_OPT_1,
+ PM_SMBCHG_CHGR_SYSOK_OPT__CHG_DET_OPT_2,
+ PM_SMBCHG_CHGR_SYSOK_OPT__INVALID
+} pm_smbchg_chgr_sysok_opt_type;
+
+typedef struct
+{
+ boolean cont_without_fg_ready; //do not holdoff charging and continue without FG Ready
+ boolean is_rchg_threshold_src_fg; //Recharge Threshold Source: TRUE:Fuel GaugeADC; FALSE:Analog sensor
+ boolean is_term_current_src_fg; //TRUE: Early current termination source fuel gauge ADC; FALSE: Analog sensor
+ boolean en_early_current_termination; //Early Current Termination
+ pm_smbchg_chgr_sysok_opt_type sysok_opt;
+ boolean en_sysok_pol_table_n; //TRUE: Inverse of Table in DOS; FALSE:Table in DOS
+ boolean en_charger_inhibit;
+ boolean is_holdoff_tmr_350ms; // TRUE: 350ms and FALSE: 700us
+ boolean auto_rchg_dis; //TRUE: disable automatic recharge; FALSE: enable automatic discharge
+ boolean current_termination_dis; //TRUE: current termination disabled, FALSE: current termination enabled
+ boolean batt_ov_ends_cycle_en; //battery over voltage ends charge cycle
+ boolean p2f_chg_tran_require_cmd; //TRUE: pre to fast charge transition requires command; FALSE: automatic transation
+}pm_chgr_chgr_cfg_type;
+
+
+typedef enum pm_smbchg_chgr_sfty_timer_type
+{
+ PM_SMBCHG_CHGR_SFTY_TIMER__PC_EN_TC_EN, //Pre-Charge and Total Charge Safety Timers Enabled
+ PM_SMBCHG_CHGR_SFTY_TIMER__PC_DIS_TC_EN, // Pre-Charge Safety Timer Disabled, Total Charge Safety Timer Enabled
+ PM_SMBCHG_CHGR_SFTY_TIMER__PC_DIS_TC_DIS, //Pre-Charge and Total Charge Safety Timers Disabled
+ PM_SMBCHG_CHGR_SFTY_TIMER__INVAID_TYPE
+} pm_smbchg_chgr_sfty_timer_type;
+
+/*===========================================================================
+
+ SMBCHG DRIVER FUNCTION PROTOTYPES
+
+===========================================================================*/
+
+/**
+* @brief This function returns if battery is above VBAt_WEAK or
+* not
+*
+* @details
+* This API returns if battery is above VBAT_WEAK threshold or
+* not
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] is_above_vbat_weak if above then TRUE else FLASE
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_vbat_sts(uint32 device_index, boolean *is_above_vbat_weak);
+
+
+/**
+* @brief This function returns the float vlotage status
+*
+* @details
+* This API returns the float vlotage status
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] aicl_in_hard_limit TRUE if AICL is hard limit else FALSE
+* @param[out] fv_mv Float voltage value; 3600mv to 4500mv
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_float_volt_sts(uint32 device_index, boolean *aicl_in_hard_limit, uint32 *fv_mv);
+
+
+/**
+* @brief This function returns the pre charger and fast charger current status in milliam
+*
+* @details
+* This API returns the pre charger and fast charger current status in milliamp
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] pre_charge_current_ma Pre-charge current value in milli amp.
+* @param[in] fast_charge_current_ma Fast charge current value in milli amp
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_chg_i_sts(uint32 device_index, uint32 *pre_charge_current_ma, uint32 *fast_charge_current_ma);
+
+
+/**
+* @brief This function returns charger status
+*
+* @details
+* This function returns status for charging/discharging, active/inactive AFV compensation, charging
+* done at least once, battery voltage less than 2v, charge hold off, current charging state, charging
+* enable/disable status
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] pm_smbchg_chgr_chgr_status_type Refer enum pm_smbchg_chgr_chgr_status_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_chgr_sts(uint32 device_index, pm_smbchg_chgr_chgr_status_type *chgr_sts);
+
+
+/**
+* @brief This function configures the pre-charger current value in milliamp. Valid values are 100 to 550 mAmp
+*
+* @details
+* This API configures the pre-charger current value in milliamp. Valid values are 100 to 550 mAmp
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] pre_chg_i_ma Pre charge current in milliamp. Values are 100 to 550mAmp
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_set_pre_chg_i(uint32 device_index, uint32 pre_chg_i_ma);
+
+
+/**
+* @brief This function configures the fast-charger current value in milliamp. Valid values are 300 to 3000 mAmp
+*
+* @details
+* This API configures the fast-charger current value in milliamp. Valid values are 300 to 3000 mAmp
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] fast_chg_i_ma fast-charger current value in milliamp. Valid values are 300 to 3000 mAmp
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_set_fast_chg_i(uint32 device_index, uint32 fast_chg_i_ma);
+
+
+/**
+* @brief This function configures the fast-charger current compensation value in milliamp
+*
+* @details
+* This API configures the fast-charger current compensation value in milliamp.
+* Valid values are 300 to 1200 mAmp
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] fast_chg_i_cmp_ma fast-charger current compensation value in milliamp.
+* Valid values are 300 to 1200 mAmp
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_set_fast_chg_i_cmpn(uint32 device_index, uint32 fast_chg_i_cmp_ma);
+
+
+/**
+* @brief This function This API configures the floating voltage
+*
+* @details
+* This API configures the floating voltage. Valid range is 3600mV to 4500 mv
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] float_volt_mv Valid range is 3600mV to 4500 mv
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_set_float_volt(uint32 device_index, uint32 float_volt_mv);
+
+/**
+* @brief This function returns configured floating voltage
+*
+* @details
+* This function returns set floating voltage
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] float_volt_mv set float voltage
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_float_volt_cfg(uint32 device_index, uint32 *float_volt_mv);
+
+
+/**
+* @brief This function sets floating voltage conpmensation code
+*
+* @details
+* This api sets floating voltage conpmensation code. Valid
+* value is from 0 to 63
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] float_volt_cmpn Valid value is from 0 to 63
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_set_float_volt_cmpn(uint32 device_index, uint32 float_volt_cmpn);
+
+
+/**
+* @brief This function reads floating voltage conpmensation code
+*
+* @details
+* This api reads floating voltage conpmensation code. Valid
+* value is from 0 to 6300mV
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] float_volt_cmpn Valid value is from 0 to 6300 mV
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_float_volt_cmpn(uint32 device_index, uint32 *float_volt_cmpn);
+
+
+/**
+* @brief This function enables/disables Charger Auto Float
+* Voltage Compensation
+*
+* @details
+* This api enables/disables Charger Auto Float Voltage Compensation
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] enable TRUE enables and FALSE disables
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_en_afvc(uint32 device_index, boolean enable);
+
+
+/**
+* @brief This function sets charge inhibit level
+*
+* @details
+* This API sets charge inhibit level
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] inhibit_lvl_mv valid range is 50 to 300mv
+*
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_set_inhibi_threshold(uint32 device_index, uint32 inhibit_lvl_mv);
+
+
+/**
+* @brief This function returns charge inhibit level
+*
+* @details
+* This API returns charge inhibit level
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] inhibit_lvl_mv valid range is 50 to 300mv
+*
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_inhibi_threshold(uint32 device_index, uint32 *inhibit_lvl_mv);
+
+
+/**
+* @brief This function sets the pre-charge to full charger
+* threshold
+*
+* @details
+* This API sets the pre-charge to full charger threshold. Valid range is 2400mV to 3000mV
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] milli_volt Valid range is 2400mV to 3000mV
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_set_p2f_threshold(uint32 device_index, uint32 milli_volt);
+
+
+/**
+ * @brief This function returns the pre-charge to full charger
+ * threshold
+ *
+ * @details
+ * This API returns the pre-charge to full charger threshold.
+ * Valid range is 2400mV to 3000mV
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] milli_volt Valid range is 2400mV to
+ * 3000mV
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_chgr_get_p2f_threshold(uint32 device_index, uint32 *milli_volt);
+
+
+/**
+* @brief This function sets the charge termination current
+*
+* @details
+* This API sets the charge termination current in milliamp
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] current_ma Termination current. Value range is 50 to 600 milliAmp
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_set_charge_termination_current(uint32 device_index, uint32 current_ma);
+
+
+/**
+* @brief This function returns the charge termination current
+*
+* @details
+* This API returns the charge termination current in milliamp
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] current_ma Termination current. Value range is 50 to 600 milliAmp
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_charge_termination_current(uint32 device_index, uint32 *current_ma);
+
+
+/**
+* @brief This function configures charger temperature compensation
+*
+* @details
+* This function configures charger temperature compensation
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] ccmpn_type Refer pm_smbchg_ccmpn_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_config_chgr_temp_cmpn(uint32 device_index, pm_smbchg_chgr_ccmpn_type ccmpn_type, boolean enable);
+
+
+/**
+* @brief This function returns configured charge temperature compensation
+*
+* @details
+* This function returns configured charge temperature compensation
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] ccmpn_type Refer pm_smbchg_ccmpn_type for more info
+* @param[in] enable TRUE : set, FALSE: clear
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_chgr_temp_cmpn_config(uint32 device_index, pm_smbchg_chgr_ccmpn_type ccmpn_type, boolean *enable);
+
+
+/**
+* @brief This function configures charger related paramters.
+*
+* @details
+* This function configures charger related paramters.
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] chgr_cfg_type Refer struct pm_chgr_chgr_cfg_type for more info
+* @param[out] enable TRUE : set, FALSE: clear
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_config_chgr(uint32 device_index, pm_chgr_chgr_cfg_type *chgr_cfg_type);
+
+
+/**
+* @brief This function returns configured charger related
+* paramters.
+*
+* @details
+* This function returns configured charger related paramters.
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] chgr_cfg_type Refer struct pm_chgr_chgr_cfg_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_chgr_config(uint32 device_index, pm_chgr_chgr_cfg_type *chgr_cfg_type);
+
+/**
+* @brief This function configures safety timer
+*
+* @details
+* This function configures safety timer
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] pre_chg_sfty_min Total pre-charge safety timer timeout. Valid values is 24 to 192 minutes
+* @param[in] total_chg_sfty_min Total charge safety timer timeout. Valid values is 192 to 1536 minutes
+* @param[in] sfty_timer_type refer pm_smbchg_chgr_sfty_timer_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_config_sfty_timer(uint32 device_index, uint32 pre_chg_sfty_min, uint32 total_chg_sfty_min, pm_smbchg_chgr_sfty_timer_type sfty_timer_type);
+
+
+/**
+* @brief This function returns configured safety timer
+*
+* @details
+* This function returns configured safety timer
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] pre_chg_sfty_min Total pre-charge safety timer timeout. Valid values is 24 to 192 minutes
+* @param[out] total_chg_sfty_min Total charge safety timer timeout. Valid values is 192 to 1536 minutes
+* @param[out] sfty_timer_type refer pm_smbchg_chgr_sfty_timer_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_get_sfty_timer_config(uint32 device_index, uint32 *pre_chg_sfty_min, uint32 *total_chg_sfty_min, pm_smbchg_chgr_sfty_timer_type *sfty_timer_type);
+
+
+/**
+* @brief This function enables irq
+*
+* @details
+* This function enables irq
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_chgr_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_irq_enable(uint32 device_index, pm_smbchg_chgr_irq_type irq, boolean enable);
+
+
+/**
+* @brief This function clears the SMBCHG irq
+*
+* @details
+* This function clears the SMBCHG irq
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_chgr_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_irq_clear(uint32 device_index, pm_smbchg_chgr_irq_type irq);
+
+
+/**
+* @brief This function configures the SMBCHG irq trigger
+*
+* @details
+* This function configures the SMBCHG irq trigger
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_chgr_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_irq_set_trigger(uint32 device_index, pm_smbchg_chgr_irq_type irq, pm_irq_trigger_type trigger);
+
+
+/**
+* @brief This function configures the SMBCHG for irq
+*
+* @details
+* This function configures the SMBCHG for irq
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_chgr_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgr_irq_status(uint32 device_index, pm_smbchg_chgr_irq_type irq, pm_irq_status_type type, boolean *status);
+
+/**
+ * @brief This function enables source as command or pin
+ * controlled.
+ *
+ * @details
+ * This function enables source as command or pin controlled.
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] chg_en_src TRUE: Enables Pin
+ * FALSE: Command Register
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_chgr_enable_src(uint32 device_index, boolean chg_en_src);
+
+/**
+ * @brief This function sets the command/pin polarity
+ *
+ * @details
+ * This function sets the command/pin polarity .
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] chg_pol_low TRUE: sets polarity low
+ * FASLE: sets polarity high
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_chgr_set_chg_polarity_low(uint32 device_index, boolean chg_pol_low);
+
+#endif /* PM_SMBCHG_CHGR_H */
+
diff --git a/dev/pmic/pmi8994/include/pm_smbchg_dc_chgpth.h b/dev/pmic/pmi8994/include/pm_smbchg_dc_chgpth.h
new file mode 100644
index 0000000..96cec14
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_smbchg_dc_chgpth.h
@@ -0,0 +1,329 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_SMBCHG_DC_CHGPTH_H
+#define PM_SMBCHG_DC_CHGPTH_H
+
+#include "pm_err_flags.h"
+#include "pm_resources_and_types.h"
+
+/*===========================================================================
+
+ TYPE DEFINITIONS
+
+===========================================================================*/
+typedef enum pm_smbchg_dcin_adptr_allowance
+{
+ PM_SMBCHG_DCIN_ADPTR_ALLOWANCE_5V,
+ PM_SMBCHG_DCIN_ADPTR_ALLOWANCE_5V_OR_9V,
+ PM_SMBCHG_DCIN_ADPTR_ALLOWANCE_5V_TO_9V,
+ PM_SMBCHG_DCIN_ADPTR_ALLOWANCE_9V,
+ PM_SMBCHG_DCIN_ADPTR_ALLOWANCE_5V_UNREG,
+ PM_SMBCHG_DCIN_ADPTR_ALLOWANCE_5V_9V_UNREG,
+ PM_SMBCHG_DCIN_ADPTR_ALLOWANCE_INVALID
+}pm_smbchg_dcin_adptr_allowance;
+
+
+typedef enum pm_smbchg_dc_aicl_cfg_type
+{
+ /*AICL_CFG1*/
+ PM_SMBCHG_AICL__DEB_LV_ADAPTER = 0, /*DCIN Input Collapse Option for LV adapter*/
+ PM_SMBCHG_AICL__DEB_HV_ADAPTER = 1, /*DCIN Input Collapse Option for HV adapter*/
+ PM_SMBCHG_AICL__AICL_EN = 2, /*AICL enable/disable for DC CHGPTH*/
+ PM_SMBCHG_AICL__DEB_5V_ADAPTER_SEL = 3, /*DCIN Input Collapse Glitch Filter for 5V Select, Unregulated or 5V - 9V Adapter*/
+ PM_SMBCHG_AICL__DEB_9V_ADAPTER_SEL = 4, /*DCIN Input Collapse Glitch Filter for 9V Adapter Select*/
+ PM_SMBCHG_AICL__DEB_9V_ADAPTER_EN = 5, /*DCIN Input Collapse Glitch Filter for 9V Adapter Enable*/
+ PM_SMBCHG_AICL__OV_OPTION = 6, /*FALSE = OV on USBIN will block DCIN current path; TRUE = OV on USBIN will not block DCIN current path*/
+ /*AICL_CFG2*/
+ PM_SMBCHG_AICL__AICL_THRESHOLD_5V = 8, /*DCIN 5V AICL Threshold*/
+ PM_SMBCHG_AICL__AICL_THRESHOLD_5V_TO_9V = 9, /*AICL 5v to 9v threshold. FLASE : DC_AICL_6P25_OR_4P25, TRUE : DC_AICL_6P75_OR_4P40*/
+ PM_SMBCHG_AICL__DEB_UV = 10, /* FALSE = 20ms DCIN falling, 20ms DCIN rising, TRUE= 10us DCIN falling, 10ms DCIN rising */
+ PM_SMBCHG_AICL__INVALID_CFG /*INVALID*/
+}pm_smbchg_dc_aicl_cfg_type;
+
+/*AICL restart timer*/
+typedef enum pm_smbchg_dc_chgpth_aicl_rstrt_tmr
+{
+ PM_SMBCHG_AICL_WL_RSTRT_TMR_45s,
+ PM_SMBCHG_AICL_WL_RSTRT_TMR_1p5m,
+ PM_SMBCHG_AICL_WL_RSTRT_TMR_3m,
+ PM_SMBCHG_AICL_WL_RSTRT_TMR_6m,
+ PM_SMBCHG_AICL_WL_RSTRT_TMR_INVALID
+}pm_smbchg_dc_chgpth_aicl_rstrt_tmr;
+
+/*! \enum pm_smbchg_usb_chgpth_irq_bit_field_type
+ \brief different types of irq bit fields of by smbb irq module
+ */
+typedef enum {
+ PM_SMBCHG_DC_CHGPTH_DCBIN_UV,
+ PM_SMBCHG_DC_CHGPTH_DCBIN_OV,
+ PM_SMBCHG_DC_CHGPTH_IRQ_INVALID
+}pm_smbchg_dc_chgpth_irq_type;
+
+
+
+
+/*===========================================================================
+
+ SMBCHG DRIVER FUNCTION PROTOTYPES
+
+===========================================================================*/
+
+
+ /**
+ * @brief This function configures ADCIN adapter allowance
+ *
+ * @details
+ * This API configures ADCIN adapter allowance
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] adptr_allowance Refer pm_smbchg_dcin_adptr_allowance for more information
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_set_dcin_adptr_allowance(uint32 device_index, pm_smbchg_dcin_adptr_allowance adptr_allowance);
+
+
+ /**
+ * @brief This function returns configured ADCIN adapter allowance
+ *
+ * @details
+ * This API returns configured ADCIN adapter allowance
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] adptr_allowance Refer pm_smbchg_dcin_adptr_allowance for more information
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_get_dcin_adptr_allowance(uint32 device_index, pm_smbchg_dcin_adptr_allowance *adptr_allowance);
+
+
+ /**
+ * @brief This function sets the DCIN numput current limit
+ *
+ * @details
+ * This function sets the DCIN numput current limit
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] current_ma valid range is 300 to 2000 milliAmp
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_set_dcin_current_limit(uint32 device_index, uint32 current_ma);
+
+
+ /**
+ * @brief This function reads the DCIN numput current limit
+ *
+ * @details
+ * This function reads the DCIN numput current limit
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] current_ma valid range is 300 to 2000 milliAmp
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_get_dcin_current_limit(uint32 device_index, uint32 *current_milli_amp);
+
+
+ /**
+ * @brief This function configures various AICL parameters. Refer struct pm_smbchg_dc_aicl_cfg for more info.
+ *
+ * @details
+ * This function configures various AICL parameters. Refer struct pm_smbchg_dc_aicl_cfg for more info.
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] dc_aicl_cfg Refer struct pm_smbchg_dc_aicl_cfg for more info.
+ * @param[in] enable TRUE sets, FALSE clears
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_config_aicl(uint32 device_index, pm_smbchg_dc_aicl_cfg_type dc_aicl_cfg, boolean enable);
+
+
+ /**
+ * @brief This function returns configured AICL parameters. Refer struct pm_smbchg_dc_aicl_cfg for more info.
+ *
+ * @details
+ * This function returns configured AICL parameters. Refer struct pm_smbchg_dc_aicl_cfg for more info.
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] dc_aicl_cfg Refer struct pm_smbchg_dc_aicl_cfg for more info.
+ * @param[out]enable TRUE sets, FALSE clears
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_get_aicl_config(uint32 device_index, pm_smbchg_dc_aicl_cfg_type dc_aicl_cfg, boolean *enable);
+
+
+ /**
+ * @brief This function sets the AICL restart timer
+ *
+ * @details
+ * This function sets the AICL restart timer
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] timer_type Refer enum pm_smbchg_dc_chgpth_aicl_rstrt_tmr
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_set_aicl_restart_tmr(uint32 device_index, pm_smbchg_dc_chgpth_aicl_rstrt_tmr timer_type);
+
+
+ /**
+ * @brief This function returns the AICL restart timer value
+ *
+ * @details
+ * brief This function returns the AICL restart timer value
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] timer_type Refer enum pm_smbchg_dc_chgpth_aicl_rstrt_tmr
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_get_aicl_restart_tmr(uint32 device_index, pm_smbchg_dc_chgpth_aicl_rstrt_tmr *timer_type);
+
+
+/**
+ * @brief This function enables irq
+ *
+ * @details
+ * This function enables irq
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] irq pm_smbchg_dc_chgpth_irq_type
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_irq_enable(uint32 device_index, pm_smbchg_dc_chgpth_irq_type irq, boolean enable);
+
+
+/**
+ * @brief This function clears the SMBCHG irq
+ *
+ * @param[in] device_index. Primary: 0. Secondary: 1
+ * @param[in] irq:
+ * SMBCHG irq type. Refer enum pm_smbchg_dc_chgpth_irq_type.
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_irq_clear(uint32 device_index, pm_smbchg_dc_chgpth_irq_type irq);
+
+
+/**
+ * @brief This function configures the SMBCHG irq trigger
+ *
+ * @param[in] device_index. Primary: 0. Secondary: 1
+ * @param[in] irq:
+ * SMBCHG irq type. Refer enum pm_smbchg_dc_chgpth_irq_type.
+ * @param[in] trigger:
+ * One of different irq triggers. Refer enum pm_irq_trigger_type
+ * from pm_uefi_irq.h for more details
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_irq_set_trigger(uint32 device_index, pm_smbchg_dc_chgpth_irq_type irq, pm_irq_trigger_type trigger);
+
+
+/**
+ * @brief This function configures the SMBCHG for irq
+ *
+ * @param[in] device_index. Primary: 0. Secondary: 1
+ * @param[in] irq:
+ * SMBCHG irq type. Refer enum pm_Smbb_irq_type.
+ * @param[in] type:
+ * Type of IRQ status to read. Refer enum pm_irq_status_type
+ * from pm_uefi_irq.h for more details
+ * @param[out] status:
+ * IRQ status.
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_dc_chgpth_irq_status(uint32 device_index, pm_smbchg_dc_chgpth_irq_type irq, pm_irq_status_type type, boolean *status);
+
+
+#endif /* PM_SMBCHG_DC_CHGPTH_H */
+
diff --git a/dev/pmic/pmi8994/include/pm_smbchg_driver.h b/dev/pmic/pmi8994/include/pm_smbchg_driver.h
new file mode 100644
index 0000000..0c0f0ab
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_smbchg_driver.h
@@ -0,0 +1,355 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_SMBCHG_DRIVER__H
+#define PM_SMBCHG_DRIVER__H
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+#include "pm_resources_and_types.h"
+#include "pm_comm.h"
+
+/*===========================================================================
+
+ STRUCTURE TYPE AND ENUM
+
+===========================================================================*/
+
+
+/************************************************************************/
+/* register definitions */
+/************************************************************************/
+typedef struct
+{
+ uint32 base_address; //0x1200
+
+ pm_register_address_type perph_subtype; // 0x1205
+ pm_register_address_type bat_pres_status; // 0x1208
+ pm_register_address_type int_rt_sts; // 0x1210
+ pm_register_address_type int_set_type; // 0x1211
+ pm_register_address_type int_polarity_high; // 0x1212
+ pm_register_address_type int_polarity_low; // 0x1213
+ pm_register_address_type int_latched_clr; // 0x1214
+ pm_register_address_type int_en_set; // 0x1215
+ pm_register_address_type int_en_clr; // 0x1216
+ pm_register_address_type int_latched_sts; // 0x1218
+ pm_register_address_type int_pending_sts; // 0x1219
+ pm_register_address_type int_mid_sel; // 0x121a
+ pm_register_address_type int_priority; // 0x121b
+ pm_register_address_type ship_mode; // 0x1240
+ pm_register_address_type clr_dead_bat_timer; // 0x1241
+ pm_register_address_type cmd_chg; // 0x1242
+ pm_register_address_type sec_access; // 0x12d0
+ pm_register_address_type spare; // 0x12df
+ pm_register_address_type int_test1; // 0x12e0
+ pm_register_address_type int_test_val; // 0x12e1
+ pm_register_address_type trim_num; // 0x12f0
+ pm_register_address_type vbl_cfg; // 0x12f1
+ pm_register_address_type vbl_sel_cfg; // 0x12f2
+ pm_register_address_type bm_cfg; // 0x12f3
+ pm_register_address_type cfg_sysmin; // 0x12f4
+ pm_register_address_type cfg_systh; // 0x12f5
+ pm_register_address_type ss_cfg; // 0x12f6
+ pm_register_address_type cfg_bb_clmp_sel; // 0x12f8
+ pm_register_address_type trim9; // 0x12f9
+ pm_register_address_type isense_cfg1; // 0x12fa
+ pm_register_address_type isense_cfg2; // 0x12fb
+ pm_register_address_type zin_icl_pt; // 0x12fc
+ pm_register_address_type zin_icl_lv; // 0x12fd
+ pm_register_address_type zin_icl_hv; // 0x12fe
+ pm_register_address_type wi_pwr_tmr; // 0x12ff
+}smbchg_bat_if_register_ds;
+
+typedef struct smbchg_otg_register_ds
+{
+ pm_register_address_type base_address; //0x1100
+
+ pm_register_address_type perph_subtype; // 0x1105
+ pm_register_address_type sec_access; // 0x11d0
+ pm_register_address_type spare; // 0x11df
+ pm_register_address_type otg_cfg; // 0x11f1
+ pm_register_address_type cfg_battuv; // 0x11f2
+ pm_register_address_type otg_icfg; // 0x11f3
+ pm_register_address_type tr_isotg; // 0x11f4
+ pm_register_address_type tr_otg_sns; // 0x11f5
+ pm_register_address_type trim6; // 0x11f6
+ pm_register_address_type tr_istr; // 0x11f7
+ pm_register_address_type cfg_tloop; // 0x11f8
+ pm_register_address_type chg_pbs_trig_control; // 0x11f9
+ pm_register_address_type tr_pwr_tr; // 0x11fa
+ pm_register_address_type tr_pwr_trb_a; // 0x11fb
+ pm_register_address_type tr_pwr_trb_b; // 0x11fc
+ pm_register_address_type tr_pwr_trs; // 0x11fd
+ pm_register_address_type tr_pwr_tr_bgtr; // 0x11fe
+ pm_register_address_type low_pwr_options; // 0x11ff
+}smbchg_otg_register_ds;
+
+typedef struct
+{
+ uint32 base_address; //0x1000
+
+ pm_register_address_type perph_subtype; //0x1005
+ pm_register_address_type chg_option; //0x1008
+ pm_register_address_type vbat_status; //0x100B
+ pm_register_address_type fv_sts; //0x100C
+ pm_register_address_type ichg_sts; //0x100D
+ pm_register_address_type chgr_sts; //0x100E
+ pm_register_address_type int_rt_sts; //0x1010
+ pm_register_address_type int_set_type; //0x1011
+ pm_register_address_type int_polarity_high; //0x1012
+ pm_register_address_type int_polarity_low; //0x1013
+ pm_register_address_type int_latched_clr; //0x1014
+ pm_register_address_type int_en_set; //0x1015
+ pm_register_address_type int_en_clr; //0x1016
+ pm_register_address_type int_latched_sts; //0x1018
+ pm_register_address_type int_pending_sts; //0x1019
+ pm_register_address_type int_mid_sel; //0x101A
+ pm_register_address_type int_priority; //0x101B
+ pm_register_address_type sec_access; //0x10D0
+ pm_register_address_type spare; //0x10DF
+ pm_register_address_type pcc_cfg; //0x10F1
+ pm_register_address_type fcc_cfg; //0x10F2
+ pm_register_address_type fcc_cmp_cfg; //0x10F3
+ pm_register_address_type fv_cfg; //0x10F4
+ pm_register_address_type fv_cmp_cfg; //0x10F5
+ pm_register_address_type cfg_afvc; //0x10F6
+ pm_register_address_type cfg_chg_inhib; //0x10F7
+ pm_register_address_type cfg_p2f; //0x10F8
+ pm_register_address_type cfg_tcc; //0x10F9
+ pm_register_address_type ccmp_cfg; //0x10FA
+ pm_register_address_type chgr_cfg1; //0x10FB
+ pm_register_address_type chgr_cfg2; //0x10FC
+ pm_register_address_type sft_cfg; //0x10FD
+ pm_register_address_type stat_cfg; //0x10FE
+ pm_register_address_type cfg; //0x10FF
+}smbchg_chgr_register_ds;
+
+typedef struct
+{
+ uint32 base_address; //0x1400
+
+ pm_register_address_type perph_subtype; //0x1405
+ pm_register_address_type int_rt_sts; //0x1410
+ pm_register_address_type int_set_type; //0x1411
+ pm_register_address_type int_polarity_high; //0x1412
+ pm_register_address_type int_polarity_low; //0x1413
+ pm_register_address_type int_latched_clr; //0x1414
+ pm_register_address_type int_en_set; //0x1415
+ pm_register_address_type int_en_clr; //0x1416
+ pm_register_address_type int_latched_sts; //0x1418
+ pm_register_address_type int_pending_sts; //0x1419
+ pm_register_address_type int_mid_sel; //0x141a
+ pm_register_address_type int_priority; //0x141b
+ pm_register_address_type sec_access; //0x14d0
+ pm_register_address_type spare; //0x14df
+ pm_register_address_type int_test1; //0x14e0
+ pm_register_address_type int_test_val; //0x14e1
+ pm_register_address_type tm_en_atest_dcin; //0x14e2
+ pm_register_address_type trim_num; //0x14f0
+ pm_register_address_type dcin_chgr_cfg; //0x14f1
+ pm_register_address_type dcin_il_cfg; //0x14f2
+ pm_register_address_type dc_aicl_cfg1; //0x14f3
+ pm_register_address_type dc_aicl_cfg2; //0x14f4
+ pm_register_address_type aicl_wl_sel_cfg; //0x14f5
+ pm_register_address_type temp_comp_cfg; //0x14f6
+ pm_register_address_type tr_temp; //0x14fa
+}smbchg_dc_chgpth_register_ds;
+
+
+typedef struct
+{
+ uint32 base_address; // 0x1600
+
+ pm_register_address_type revision1; // 0x1600
+ pm_register_address_type revision2; // 0x1601
+ pm_register_address_type revision3; // 0x1602
+ pm_register_address_type revision4; // 0x1603
+ pm_register_address_type perph_type; // 0x1604
+ pm_register_address_type perph_subtype; // 0x1605
+ pm_register_address_type idev_sts; // 0x1608
+ pm_register_address_type int_rt_sts; // 0x1610
+ pm_register_address_type int_set_type; // 0x1611
+ pm_register_address_type int_polarity_high; // 0x1612
+ pm_register_address_type int_polarity_low; // 0x1613
+ pm_register_address_type int_latched_clr; // 0x1614
+ pm_register_address_type int_en_set; // 0x1615
+ pm_register_address_type int_en_clr; // 0x1616
+ pm_register_address_type int_latched_sts; // 0x1618
+ pm_register_address_type int_pending_sts; // 0x1619
+ pm_register_address_type int_mid_sel; // 0x161a
+ pm_register_address_type int_priority; // 0x161b
+ pm_register_address_type wdog_rst; // 0x1640
+ pm_register_address_type afp_mode; // 0x1641
+ pm_register_address_type gsm_pa_on_adj_en; // 0x1642
+ pm_register_address_type sec_access; // 0x16d0
+ pm_register_address_type spare; // 0x16df
+ pm_register_address_type wd_cfg; // 0x16f1
+ pm_register_address_type misc_cfg; // 0x16f2
+ pm_register_address_type cfg_ntc_vout; // 0x16f3
+ pm_register_address_type chgr_trim_options_16; // 0x16f4
+ pm_register_address_type chgr_trim_options_15_8;// 0x16f5
+ pm_register_address_type chgr_trim_options_7_0; // 0x16f6
+ pm_register_address_type tr_ipwr1; // 0x16f7
+ pm_register_address_type tr_ipwr2; // 0x16f8
+ pm_register_address_type cfg_temp_sel; // 0x16ff
+}smbchg_misc_register_ds;
+
+
+typedef struct
+{
+ uint32 base_address; //0x1300
+
+ pm_register_address_type perph_subtype; //0x1305
+ pm_register_address_type icl_sts_1; //0x1307
+ pm_register_address_type pwr_pth_sts; //0x1308
+ pm_register_address_type icl_sts_2; //0x1309
+ pm_register_address_type apsd_dg_sts; //0x130A
+ pm_register_address_type rid_sts; //0x130B
+ pm_register_address_type hvdcp_sts; //0x130C
+ pm_register_address_type input_sts; //0x130D
+ pm_register_address_type usbid_valid_id_11_8; //0x130E
+ pm_register_address_type usbid_valid_id_7_0; //0x130F
+ pm_register_address_type int_rt_sts; //0x1310
+ pm_register_address_type int_set_type; //0x1311
+ pm_register_address_type int_polarity_high; //0x1312
+ pm_register_address_type int_polarity_low; //0x1313
+ pm_register_address_type int_latched_clr; //0x1314
+ pm_register_address_type int_en_set; //0x1315
+ pm_register_address_type int_en_clr; //0x1316
+ pm_register_address_type int_latched_sts; //0x1318
+ pm_register_address_type int_pending_sts; //0x1319
+ pm_register_address_type int_mid_sel; //0x131A
+ pm_register_address_type int_priority; //0x131B
+ pm_register_address_type cmd_il; //0x1340
+ pm_register_address_type iusb_max; //0x1344
+ pm_register_address_type enum_timer_stop; //0x134E
+ pm_register_address_type sec_access; //0x13D0
+ pm_register_address_type usbin_chgr_cfg; //0x13F1
+ pm_register_address_type usbin_il_cfg; //0x13F2
+ pm_register_address_type usb_aicl_cfg; //0x13F3
+ pm_register_address_type cfg; //0x13F4
+ pm_register_address_type apsd_cfg; //0x13F5
+ pm_register_address_type wi_pwr_options; //0x13FF
+}smbchg_usb_chgpth_register_ds;
+
+typedef struct
+{
+ uint32 base_address; //0x1b00
+
+ pm_register_address_type perph_subtype; //0x1b05
+ pm_register_address_type bsi_sts; //0x1b08
+ pm_register_address_type mipi_bif_fsm_sts; //0x1b09
+ pm_register_address_type rx_fifo_sts; //0x1b0a
+ pm_register_address_type bsi_bat_sts; //0x1b0d
+ pm_register_address_type int_rt_sts; //0x1b10
+ pm_register_address_type int_set_type; //0x1b11
+ pm_register_address_type int_polarity_high; //0x1b12
+ pm_register_address_type int_polarity_low; //0x1b13
+ pm_register_address_type int_latched_clr; //0x1b14
+ pm_register_address_type int_en_set; //0x1b15
+ pm_register_address_type int_en_clr; //0x1b16
+ pm_register_address_type int_latched_sts; //0x1b18
+ pm_register_address_type int_pending_sts; //0x1b19
+ pm_register_address_type int_mid_sel; //0x1b1a
+ pm_register_address_type int_priority; //0x1b1b
+ pm_register_address_type bsi_en; //0x1b46
+ pm_register_address_type mipi_bif_err_clear; //0x1b4f
+ pm_register_address_type mipi_bif_fsm_reset; //0x1b50
+ pm_register_address_type mipi_bif_force_bcl_low; //0x1b51
+ pm_register_address_type mipi_bif_tau_cfg; //0x1b52
+ pm_register_address_type mipi_bif_mode; //0x1b53
+ pm_register_address_type mipi_bif_en; //0x1b54
+ pm_register_address_type mipi_bif_cfg; //0x1b55
+ pm_register_address_type mipi_bif_rx_cfg; //0x1b56
+ pm_register_address_type mipi_bif_tx_dly; //0x1b59
+ pm_register_address_type mipi_bif_data_tx_0; //0x1b5a
+ pm_register_address_type mipi_bif_data_tx_1; //0x1b5b
+ pm_register_address_type mipi_bif_data_tx_2; //0x1b5c
+ pm_register_address_type mipi_bif_tx_ctl; //0x1b5d
+ pm_register_address_type mipi_bif_data_rx_0; //0x1b60
+ pm_register_address_type mipi_bif_data_rx_1; //0x1b61
+ pm_register_address_type mipi_bif_data_rx_2; //0x1b62
+ pm_register_address_type rx_fifo_word1_0; //0x1b63
+ pm_register_address_type rx_fifo_word1_1; //0x1b64
+ pm_register_address_type rx_fifo_word2_0; //0x1b65
+ pm_register_address_type rx_fifo_word2_1; //0x1b66
+ pm_register_address_type rx_fifo_word3_0; //0x1b67
+ pm_register_address_type rx_fifo_word3_1; //0x1b68
+ pm_register_address_type rx_fifo_word4_0; //0x1b69
+ pm_register_address_type rx_fifo_word4_1; //0x1b6a
+ pm_register_address_type mipi_bif_bcl_raw; //0x1b6d
+ pm_register_address_type mipi_bif_error; //0x1b70
+ pm_register_address_type bat_gone_cfg; //0x1ba7
+ pm_register_address_type bat_rmv_deb_timer; //0x1ba8
+ pm_register_address_type bat_pres_deb_timer; //0x1ba9
+}smbchg_bsi_register_ds;
+
+typedef struct
+{
+ smbchg_bsi_register_ds *bsi_register;
+ smbchg_chgr_register_ds *chgr_register;
+ smbchg_otg_register_ds *otg_register;
+ smbchg_bat_if_register_ds *bat_if_register;
+ smbchg_usb_chgpth_register_ds *usb_chgpth_register;
+ smbchg_dc_chgpth_register_ds *dc_chgpth_register;
+ smbchg_misc_register_ds *misc_register;
+}smbchg_register_ds;
+
+#define BATT_MISSING_SIZE 4
+#define DCIN_SIZE 26
+#define USBIN_SIZE 32
+
+typedef struct
+{
+ uint32 batt_missing_detect_time[BATT_MISSING_SIZE];
+ uint32 dcin_current_limits[DCIN_SIZE];
+ uint32 usbin_current_limits[USBIN_SIZE];
+}chg_range_data_type;
+
+typedef struct
+{
+ pm_comm_info_type *comm_ptr;
+ smbchg_register_ds *smbchg_register;
+ uint8 num_of_peripherals;
+ chg_range_data_type *chg_range_data;
+}pm_smbchg_data_type;
+
+
+/*===========================================================================
+
+ FUNCTION DECLARATION
+
+===========================================================================*/
+void pm_smbchg_driver_init(uint32 pmic_index);
+
+pm_smbchg_data_type* pm_smbchg_get_data(uint32 pmic_index);
+
+#endif // PM_SMBCHG_DRIVER__H
diff --git a/dev/pmic/pmi8994/include/pm_smbchg_misc.h b/dev/pmic/pmi8994/include/pm_smbchg_misc.h
new file mode 100644
index 0000000..c429d81
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_smbchg_misc.h
@@ -0,0 +1,363 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_SMBCHG_MISC_H
+#define PM_SMBCHG_MISC_H
+
+#include "pm_err_flags.h"
+#include "pm_resources_and_types.h"
+
+/*===========================================================================
+
+ TYPE DEFINITIONS
+
+===========================================================================*/
+
+typedef enum pm_smbchg_misc_src_detect_type
+{
+ PM_SMBCHG_MISC_SRC_DETECT_CDP,
+ PM_SMBCHG_MISC_SRC_DETECT_DCP,
+ PM_SMBCHG_MISC_SRC_DETECT_OTHER_CHARGING_PORT,
+ PM_SMBCHG_MISC_SRC_DETECT_SDP,
+ PM_SMBCHG_MISC_SRC_DETECT_FMB_UART_ON,
+ PM_SMBCHG_MISC_SRC_DETECT_FMB_UART_OFF,
+ PM_SMBCHG_MISC_SRC_DETECT_FMB_USB_ON,
+ PM_SMBCHG_MISC_SRC_DETECT_FMB_USB_OFF,
+ PM_SMBCHG_MISC_SRC_DETECT_INVALID
+}pm_smbchg_misc_src_detect_type;
+
+
+typedef enum {
+ PM_SMBCHG_MISC_POWER_OK,
+ PM_SMBCHG_MISC_TEMP_SHUTDOWN,
+ PM_SMBCHG_MISC_WDOG_TIMER,
+ PM_SMBCHG_MISC_FLASH_FAIL,
+ PM_SMBCHG_MISC_OTS2,
+ PM_SMBCHG_MISC_OTS3,
+ PM_SMBCHG_MISC_IRQ_INVALID
+}pm_smbchg_misc_irq_type;
+
+
+typedef enum pm_smbchg_misc_sfty_after_wdog_irq_type
+{
+ PM_SMBCHG_MISC_SFTY_TIMER_AFTER_WDOG_12MIN,
+ PM_SMBCHG_MISC_SFTY_TIMER_AFTER_WDOG_24MIN,
+ PM_SMBCHG_MISC_SFTY_TIMER_AFTER_WDOG_48MIN,
+ PM_SMBCHG_MISC_SFTY_TIMER_AFTER_WDOG_96MIN,
+ PM_SMBCHG_MISC_SFTY_TIMER_AFTER_WDOG_INVALID
+}pm_smbchg_misc_sfty_after_wdog_irq_type;
+
+typedef enum pm_smbchg_wdog_timeout_type
+{
+ PM_SMBCHG_MISC_WD_TMOUT_18S,
+ PM_SMBCHG_MISC_WD_TMOUT_36S,
+ PM_SMBCHG_MISC_WD_TMOUT_72S,
+ PM_SMBCHG_MISC_WD_TMOUT_INVALID
+}pm_smbchg_wdog_timeout_type;
+
+typedef struct pm_smbchg_misc_wdog_cfg_type
+{
+ boolean wdog_timer_en;
+ boolean wdog_option_run_always;
+ boolean wdog_irq_sfty_en;
+ pm_smbchg_misc_sfty_after_wdog_irq_type sfty_timer;
+ pm_smbchg_wdog_timeout_type wdog_timeout;
+ boolean afp_wdog_en;
+}pm_smbchg_misc_wdog_cfg_type;
+
+
+typedef enum pm_smbchg_misc_misc_fn_cfg_type
+{
+ PM_SMBCHG_MISC_FN__VCHG_PA_ON_SEL, /**< VCHG Function>*/
+ PM_SMBCHG_MISC_FN__GSM_PA_ON_ADJ_SEL, /**< PA_ON Function>*/
+ PM_SMBCHG_MISC_FN__STANDBY_VCHG, /**< Standby VCHG Function>*/
+ PM_SMBCHG_MISC_FN__CHG_OK, /**< Charge OK Function>*/
+ PM_SMBCHG_MISC_FN__PHY_ON, /**< PHY_ON Function>*/
+ PM_SMBCHG_MISC_FN__CFG_NTCVOUT, /**< Reserved>*/
+ PM_SMBCHG_MISC_FN__FETDRV, /**< Reserved>*/
+ PM_SMBCHG_MISC_FN__SYSOK_LDO, /**< SYSOK LDO Function>*/
+ PM_SMBCHG_MISC_FN__INVALID /**< INVALID>*/
+}pm_smbchg_misc_misc_fn_cfg_type;
+
+
+
+/*===========================================================================
+
+ SMBCHG OTG DRIVER FUNCTION PROTOTYPES
+
+===========================================================================*/
+
+
+ /**
+ * @brief This function detects the type of chgarging port device is connected to
+ *
+ * @details
+ * This API detects the type of chgarging port device is connected to
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] src_detected Refer pm_smbchg_misc_src_detect_type for more info
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_chgr_port_detected(uint32 pmic_device, pm_smbchg_misc_src_detect_type *src_detected);
+
+
+ /**
+ * @brief This function restarts the charger watchdog
+ *
+ * @details
+ * This API restarts charger watchdog
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_wdog_rst(uint32 pmic_device);
+
+
+ /**
+ * @brief This function enables automatic fault protection
+ *
+ * @details
+ * This API enables automatic fault protection
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_en_afp(uint32 pmic_device);
+
+
+ /**
+ * @brief This function configures the charger watchdog
+ *
+ * @details
+ * This API configures the charger watchdog
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] wd_cfg Refer struct pm_smbchg_misc_wdog_cfg_type for more info
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_config_wdog(uint32 pmic_device, pm_smbchg_misc_wdog_cfg_type *wd_cfg);
+
+
+ /**
+ * @brief This function reads the charger watchdog configuration
+ *
+ * @details
+ * This API reads the charger watchdog configuration
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[out] wd_cfg Refer struct pm_smbchg_misc_wdog_cfg_type for more info
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_get_wdog_config(uint32 pmic_device, pm_smbchg_misc_wdog_cfg_type *wd_cfg);
+
+
+ /**
+ * @brief This function enable/disable charger watchdog
+ *
+ * @details
+ * This API enable/disable charger watchdog
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] enable_smbchg_wdog: TRUE=Enable; FALSE=Disable charger watchdog
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_enable_wdog(uint32 pmic_device, boolean enable_smbchg_wdog);
+
+
+ /**
+ * @brief This function sets charger watchdog timeout
+ *
+ * @details
+ * This API sets charger watchdog timeout
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] wdog_timeout : Refer struct pm_smbchg_wdog_timeout_type for more info
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_set_wdog_timeout(uint32 pmic_device, pm_smbchg_wdog_timeout_type wdog_timeout);
+
+
+ /**
+ * @brief This function clear/sets MISC funtions like VCHG, PA_ON, standby VCHG, CHGR_OK, PHY_ON, SYSOK_LDO
+ *
+ * @details
+ * This function clear/sets MISC funtions like VCHG, PA_ON, standby VCHG, CHGR_OK, PHY_ON, SYSOK_LDO
+ * VCHG output proportional to the charger/discharge current.
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] misc_cfg Refer pm_smbchg_misc_misc_fn_cfg_type for more info
+ * @param[in]enable TRUE sets and FALSE clears
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_config_misc_fn(uint32 pmic_device, pm_smbchg_misc_misc_fn_cfg_type misc_cfg, boolean enable);
+
+
+ /**
+ * @brief This function reads MISC funtions status like VCHG, PA_ON, standby VCHG, CHGR_OK, PHY_ON, SYSOK_LDO
+ *
+ * @details
+ * This function reads MISC funtions status like VCHG, PA_ON, standby VCHG, CHGR_OK, PHY_ON, SYSOK_LDO
+ * VCHG output proportional to the charger/discharge current.
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] misc_cfg Refer pm_smbchg_misc_misc_fn_cfg_type for more info
+ * @param[out]enable TRUE sets and FALSE clears
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_get_misc_fn_config(uint32 pmic_device, pm_smbchg_misc_misc_fn_cfg_type misc_cfg, boolean* enable);
+
+ /**
+ * @brief This function enables the SMBCHG irq
+ *
+ * @details
+ * This function enables the SMBCHG irq
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] irq refer pm_smbchg_misc_irq_type
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_irq_enable(uint32 pmic_device, pm_smbchg_misc_irq_type irq, boolean enable);
+
+ /**
+ * @brief This function clears the SMBCHG irq
+ *
+ * @details
+ * This function clears the SMBCHG irq
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] irq refer pm_smbchg_misc_irq_type
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_irq_clear(uint32 pmic_device, pm_smbchg_misc_irq_type irq);
+
+ /**
+ * @brief This function configures the SMBCHG irq trigger
+ *
+ * @details
+ * This function configures the SMBCHG irq trigger
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] irq refer pm_smbchg_misc_irq_type
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_irq_set_trigger(uint32 pmic_device, pm_smbchg_misc_irq_type irq, pm_irq_trigger_type trigger);
+
+ /**
+ * @brief This function configures the SMBCHG for irq
+ *
+ * @details
+ * This function configures the SMBCHG for irq
+ *
+ * @param[in] pmic_device_index. Primary: 0 Secondary: 1
+ * @param[in] irq refer pm_smbchg_misc_irq_type
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_misc_irq_status(uint32 pmic_device, pm_smbchg_misc_irq_type irq, pm_irq_status_type type, boolean *status);
+
+
+
+
+
+#endif /* PM_SMBCHG_MISC_H*/
+
diff --git a/dev/pmic/pmi8994/include/pm_smbchg_usb_chgpth.h b/dev/pmic/pmi8994/include/pm_smbchg_usb_chgpth.h
new file mode 100644
index 0000000..20d39ac
--- /dev/null
+++ b/dev/pmic/pmi8994/include/pm_smbchg_usb_chgpth.h
@@ -0,0 +1,726 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PM_SMBCHG_USB_CHGPTH_H
+#define PM_SMBCHG_USB_CHGPTH_H
+
+#include "pm_err_flags.h"
+#include "pm_resources_and_types.h"
+
+/*===========================================================================
+
+ TYPE DEFINITIONS
+
+===========================================================================*/
+
+
+typedef enum input_current_limit_mode
+{
+ PM_SMBCHG_USB_CHGPTH_ICL_MODE_HIGH_CURRENT,
+ PM_SMBCHG_USB_CHGPTH_ICL_MODE_100mA,
+ PM_SMBCHG_USB_CHGPTH_ICL_MODE_500mA,
+ PM_SMBCHG_USB_CHGPTH_ICL_MODE_INVALID
+}input_current_limit_mode;
+
+typedef struct input_current_limit_sts
+{
+ boolean is_aicl_complete;
+ uint32 input_current_limit;
+ input_current_limit_mode icl_mode;
+ boolean is_usbin_suspended;
+ boolean is_dcin_suspended;
+ boolean is_usbin_active_pwr_src;
+ boolean is_dcin_active_pwr_src;
+}input_current_limit_sts;
+
+typedef enum pm_smbchg_usb_chgpth_pwr_pth_type
+{
+ PM_SMBCHG_USB_CHGPTH_PWR_PATH__NONE,
+ PM_SMBCHG_USB_CHGPTH_PWR_PATH__BATTERY,
+ PM_SMBCHG_USB_CHGPTH_PWR_PATH__USB_CHARGER,
+ PM_SMBCHG_USB_CHGPTH_PWR_PATH__DC_CHARGER,
+ PM_SMBCHG_USB_CHGPTH_PWR_PATH__INVALID
+}pm_smbchg_usb_chgpth_pwr_pth_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_USB_CHGPTH_DG_STS__RID_ABC_DG, /**< RID-A/B/C Data Connect Detect Deglitch status >*/
+ PM_SMBCHG_USB_CHGPTH_DG_STS__OCD_GOOD_DG, /**< Other Charger Device Data Connect Deglitch status >*/
+ PM_SMBCHG_USB_CHGPTH_DG_STS__DCD_GOOD_DG, /**< Data Connect Device Deglitch status >*/
+ PM_SMBCHG_USB_CHGPTH_DG_STS__DCD_TIMEOUT, /**< DCD Timeout status >*/
+ PM_SMBCHG_USB_CHGPTH_DG_STS__INVALID /**< INVALID>*/
+}pm_apsd_dg_sts_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_USB_CHGPTH_RID__GND,
+ PM_SMBCHG_USB_CHGPTH_RID__FLOAT,
+ PM_SMBCHG_USB_CHGPTH_RID__A,
+ PM_SMBCHG_USB_CHGPTH_RID__B,
+ PM_SMBCHG_USB_CHGPTH_RID__C,
+ PM_SMBCHG_USB_CHGPTH_RID__INVALID
+}pm_smbchg_usb_chgpth_rid_sts_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_USB_CHGPTH__HVDCP_SEL_5V, /**< 5V High Voltage DCP Enabled >*/
+ PM_SMBCHG_USB_CHGPTH__HVDCP_SEL_9V, /**< 9V High Voltage DCP Enabled >*/
+ PM_SMBCHG_USB_CHGPTH__HVDCP_SEL_12V, /**< 12V High Voltage DCP Enabled>*/
+ PM_SMBCHG_USB_CHGPTH__HVDCP_SEL_20V, /**< 20V High Voltage DCP Enabled>*/
+ PM_SMBCHG_USB_CHGPTH__IDEV_HVDCP_SEL_A, /**< High Voltage DCP detected >*/
+ PM_SMBCHG_USB_CHGPTH__HVDCP_STS_INVALID /**< INVALID >*/
+}pm_smbchg_usb_chgpth_hvdcp_sts_type;
+
+typedef enum
+{
+ PM_SMBCHG_CHAR_TYPE_USB,
+ PM_SMBCHG_CHAR_TYPE_DC,
+ PM_SMBCHG_CHAR_TYPE_INVALID
+}pm_smbchg_usb_chgpth_chgr_type;
+
+typedef enum
+{
+ PM_SMBCHG_NO_CHGR_DETECTED,
+ PM_SMBCHG_5V_9V_CHGR_DETECTED,
+ PM_SMBCHG_UNREGULATED_CHGR_DETECTED,
+ PM_SMBCHG_9V_CHGR_DETECTED,
+ PM_SMBCHG_INVALID_DETECTED
+}pm_smbchg_usb_chgpth_input_sts_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_USBCHGPTH_CMD_IL__USBIN_MODE_CHG, /**< USBIN Mode Charge >*/
+ PM_SMBCHG_USBCHGPTH_CMD_IL__USB51_MODE, /**< USB5/1 Mode >*/
+ PM_SMBCHG_USBCHGPTH_CMD_IL__ICL_OVERRIDE, /**< ICL Override >*/
+ PM_SMBCHG_USBCHGPTH_CMD_IL__DCIN_SUSPEND, /**< DCIN Suspend >*/
+ PM_SMBCHG_USBCHGPTH_CMD_IL__USBIN_SUSPEND, /**< USBIN Suspend >*/
+ PM_SMBCHG_USBCHGPTH_CMD_IL__BAT_2_SYS_FET_DIS, /**< Battery-to-System FET Disable >*/
+ PM_SMBCHG_USBCHGPTH_CMD_IL__SHDN_N_CLEAR_CMD, /**< shdn_n_clear command >*/
+ PM_SMBCHG_USBCHGPTH_CMD_IL__INVALID /**< INVALID >*/
+}pm_smbchg_usb_chgpth_cmd_il_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_USB_CHGPTH_AICL_CFG__DEB_LV_ADAPTER, /**< USBIN Input Collapse Option for LV adapter>*/
+ PM_SMBCHG_USB_CHGPTH_AICL_CFG__DEB_HV_ADAPTER, /**< USBIN Input Collapse Option for HV adapter>*/
+ PM_SMBCHG_USB_CHGPTH_AICL_CFG__AICL_EN, /**< TRUE:enabled, FALSE: disabled>*/
+ PM_SMBCHG_USB_CHGPTH_AICL_CFG__DEB_5V_ADAPTER_SEL, /**< USBIN Input Collapse Glitch Filter for 5V Select, Unregulated or 5V - 9V Adapter >*/
+ PM_SMBCHG_USB_CHGPTH_AICL_CFG__DEB_9V_ADAPTER_SEL, /**< USBIN Input Collapse Glitch Filter for 9V Adapter Select. >*/
+ PM_SMBCHG_USB_CHGPTH_AICL_CFG__DEB_9V_ADAPTER_EN, /**< USBIN Input Collapse Glitch Filter for 9V Adapter Enable >*/
+ PM_SMBCHG_USB_CHGPTH_AICL_CFG__OV_OPTION, /**< FALSE = OV on USBIN will block DCIN current path; TRUE = OV on USBIN will not block DCIN current path>*/
+ PM_SMBCHG_USB_CHGPTH_AICL_CFG__INVALID /**< INVALID >*/
+}pm_smbchg_usb_chgpth_aicl_cfg_type;
+
+typedef enum pm_smbchg_usbin_adptr_allowance
+{
+ PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_5V,
+ PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_5V_OR_9V,
+ PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_5V_TO_9V,
+ PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_9V,
+ PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_5V_UNREG,
+ PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_5V_9V_UNREG,
+ PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_INVALID
+}pm_smbchg_usbin_adptr_allowance;
+
+/*! \enum pm_smbchg_usb_chgpth_irq_bit_field_type
+ \brief different types of irq bit fields of by smbb irq module
+ */
+typedef enum
+{
+ PM_SMBCHG_USB_CHGPTH_USBIN_UV,
+ PM_SMBCHG_USB_CHGPTH_USBIN_OV,
+ PM_SMBCHG_USB_CHGPTH_USBIN_SRC_DET,
+ PM_SMBCHG_USB_CHGPTH_OTG_FAIL,
+ PM_SMBCHG_USB_CHGPTH_OTG_OVERCURRENT,
+ PM_SMBCHG_USB_CHGPTH_AICL_DONE,
+ PM_SMBCHG_USB_CHGPTH_USBID_CHANGE_INTR,
+ PM_SMBCHG_USB_CHGPTH_IRQ_INVALID
+}pm_smbchg_usb_chgpth_irq_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_USB_CHGPTH_USB51AC_CTRL__CMD, /**< USB51AC Command Register Controlled. >*/
+ PM_SMBCHG_USB_CHGPTH_USB51AC_CTRL__PIN, /**< USB51AC Pin Controlled. >*/
+ PM_SMBCHG_USB_CHGPTH_USB51AC_CTRL__INVALID /**< INVALID >*/
+}pm_smbchg_usb_chgpth_usb51ac_ctrl_type;
+
+typedef enum
+{
+ PM_SMBCHG_USB_CHGPTH_USB51_CMD_POL__CMD1_500, /**< USB51AC Tri-state input. >*/
+ PM_SMBCHG_USB_CHGPTH_USB51_CMD_POL__CMD1_100, /**< USB51AC Dual-state input. >*/
+ PM_SMBCHG_USB_CHGPTH_USB51_CMD_POL__INVALID /**< INVALID >*/
+}pm_smbchg_usb_chgpth_usb51_cmd_pol_type;
+
+typedef struct
+{
+ pm_smbchg_usb_chgpth_usb51ac_ctrl_type usb51ac_ctrl_type; /**< See pm_smbchg_usb_chgpth_usb51ac_ctrl_type for details */
+ pm_smbchg_usb_chgpth_usb51_cmd_pol_type usb51_cmd_pol_type; /**< See pm_smbchg_usb_chgpth_usb51ac_ctrl_type for details */
+}pm_usb_chgpth_usb_cfg_type;
+
+
+typedef struct pm_smbchg_usb_chgpth_apsd_cfg_type
+{
+ boolean en_auto_src_detect; /*autopower source detect enable/disable*/
+ boolean en_dcd_tmout_only; /*0 = DCD Option - Deglitchers and Timeout 1 = DCD Option - Timeout only*/
+ boolean set_rid_clk_2khz; /*0 = 1kHz; 1 = 2kHz*/
+ boolean force_icl_500ma_vbat_low_sdp; /*0X = VBATT_LOW during SDP has no effect; 1X = VBATT_LOW during SDP forces 500ma ICL*/
+ boolean sdp_suspend; /*0 = Normal SDP operation 1 = SDP enters suspend*/
+ boolean is_ocd_isel_hc; /*0 = ICL 500mA, 1 = ICL HC*/
+ boolean usb_fail_pok_hv; /*0 = Normal 1 = Use Power-OK thresholds for HV adapter*/
+ boolean is_input_prority_usbin; /*0 = DCIN has priority, 1 = USBIN has priority*/
+}pm_smbchg_usb_chgpth_apsd_cfg_type;
+
+
+typedef enum
+{
+ PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_DCIN,
+ PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_USBIN,
+ PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_INVALID
+}pm_smbchg_chgpth_input_priority_type;
+
+/*===========================================================================
+
+ SMBCHG DRIVER FUNCTION PROTOTYPES
+
+===========================================================================*/
+
+/**
+* @brief This API returns input current limit status for usb chgpth
+*
+* @details
+* This API returns input current limit status for usb chgpth
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] icl_sts Refer input_current_limit_sts for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_icl_sts(uint32 device_index, input_current_limit_sts* icl_sts);
+
+/**
+* @brief This function returns power path for device
+*
+* @details
+* This function returns power path for device
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] pwr_path Refer enum pm_pwr_pth_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_pwr_pth(uint32 device_index, pm_smbchg_usb_chgpth_pwr_pth_type *pwr_path);
+
+
+/**
+* @brief This function returns auto power source detection degitched status
+*
+* @details
+* his function returns auto power source detection degitched status
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] apsd_dg_sts Refer enum pm_apsd_dg_sts_type for more info
+* @param[in] status Returns set or clear
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_apsd_dg_sts(uint32 device_index, pm_apsd_dg_sts_type apsd_dg_sts_type, boolean *status);
+
+/**
+* @brief This function returns RID state machine detected status
+*
+* @details
+* This function returns RID state machine detected status
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] rid_sts For more info please refer pm_rid_sts_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_rid_sts(uint32 device_index, pm_smbchg_usb_chgpth_rid_sts_type *rid_sts);
+
+
+/**
+* @brief This function returns high voltage DCP detection and enable status
+*
+* @details
+* This function returns high voltage DCP detection and enable status
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] hvdcp_sts Refer pm_hvdcp_sts for more info
+* @param[out]status TRUE set, FALSE clear
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_hvdcp_sts(uint32 device_index, pm_smbchg_usb_chgpth_hvdcp_sts_type hvdcp_sts, boolean *status);
+
+
+/**
+* @brief This function returns USBIN and DCIN input status
+*
+* @details
+* This function returns USBIN and DCIN input status
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] chgr Refer pm_smbchg_usb_chgpth_chgr_type for more info
+* @param[in] input_sts_type Refer pm_smbchg_usb_chgpth_input_sts_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_input_sts(uint32 device_index, pm_smbchg_usb_chgpth_chgr_type chgr, pm_smbchg_usb_chgpth_input_sts_type *input_sts_type);
+
+
+/**
+* @brief This function returns the valid usbid
+*
+* @details
+* This function returns the valid usbid
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] valid_id Valid USBID read
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_valid_usbid(uint32 device_index, uint16 *valid_id);
+
+/**
+* @brief This function sets the command for current limit
+*
+* @details
+* This function sets the command for current limit
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] chgpth_cmd_il Please refer pm_chgpth_cmd_il for more info
+* @param[in] enable TRUE to set and FALSE to clear
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_set_cmd_il(uint32 device_index, pm_smbchg_usb_chgpth_cmd_il_type chgpth_cmd_il, boolean enable);
+
+/**
+* @brief This function reads the command for current limit
+*
+* @details
+* This function reads the command for current limit
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] chgpth_cmd_il Please refer pm_chgpth_cmd_il for more info
+* @param[out] enable TRUE to set and FALSE to clear
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_cmd_il(uint32 device_index, pm_smbchg_usb_chgpth_cmd_il_type chgpth_cmd_il, boolean *enable);
+
+/**
+* @brief This function sets the maximum USB current
+*
+* @details
+* This function sets the maximum USB current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] i_milli_amp Current from 100 mA to 2500 mA
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_set_iusb_max(uint32 device_index, uint32 i_milli_amp);
+
+/**
+* @brief This function reads the set maximum USB current
+*
+* @details
+* This function reads the set maximum USB current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] i_milli_amp Current from 100 mA to 2500 mA
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_iusb_max(uint32 device_index, uint32 *i_milli_amp);
+
+/**
+* @brief This function sets the STOP bit of enum timer
+*
+* @details
+* This function sets the STOP bit of enum timer stop. To stop the ENUM_TIMER,
+* SW has to set this STOP bit and increase IUSB_MAX above 100mA
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_set_enum_timer_stop(uint32 device_index);
+
+/**
+* @brief This function sets the USBIN adapter allowance
+*
+* @details
+* This function sets the USBIN adapter allowance
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] adptr_allowance Refer pm_smbchg_usbin_adptr_allowance for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_set_usbin_adptr_allowance(uint32 device_index, pm_smbchg_usbin_adptr_allowance adptr_allowance);
+
+/**
+* @brief This function reads the USBIN adapter allowance
+*
+* @details
+* This function reads the USBIN adapter allowance
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] adptr_allowance Refer pm_smbchg_usbin_adptr_allowance for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_usbin_adptr_allowance(uint32 device_index, pm_smbchg_usbin_adptr_allowance *adptr_allowance);
+
+/**
+* @brief This function sets the USBIN input current limit
+*
+* @details
+* This function sets the USBIN input current limit
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] current_ma Valid value is 300 to 3000mAmp
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_set_usbin_current_limit(uint32 device_index, uint32 current_ma);
+
+/**
+* @brief This function reads the USBIN input current limit
+*
+* @details
+* This function reads the USBIN input current limit
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]current_ma Valid value is 300 to 3000mAmp
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_usbin_current_limit(uint32 device_index, uint32 *current_ma);
+
+
+/**
+* @brief This function configures the AICL for USB CHGPTH
+*
+* @details
+* This function configures the AICL for USB CHGPTH
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] usb_aicl_cfg Refer pm_smbchg_usb_aicl_cfg for more info
+* @param[in] enable TRUE: enabled, FALSE: disabled
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_config_aicl(uint32 device_index, pm_smbchg_usb_chgpth_aicl_cfg_type usb_aicl_cfg, boolean enable);
+
+
+/**
+* @brief This function reads the configured the AICL for USB CHGPTH
+*
+* @details
+* This function reads the configured the AICL for USB CHGPTH
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] usb_aicl_cfg Refer pm_smbchg_usb_aicl_cfg for more info
+* @param[in] enable TRUE: enabled, FALSE: disabled
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_aicl_config(uint32 device_index, pm_smbchg_usb_chgpth_aicl_cfg_type usb_aicl_cfg, boolean *enable);
+
+
+/**
+* @brief This function configures the USB charge path
+*
+* @details
+* This function configures the USB charge path
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] usb_cfg_type Refer usb_cfg_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_config_usb_chgpth(uint32 device_index, pm_usb_chgpth_usb_cfg_type *usb_cfg_type);
+
+
+/**
+* @brief This function gets configuration for the USB charge path
+*
+* @details
+* This function gets configuration for the USB charge path
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] usb_cfg_type Refer usb_cfg_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_usb_chgpth_config(uint32 device_index, pm_usb_chgpth_usb_cfg_type *usb_cfg_type);
+
+
+/**
+* @brief This function configures USB charge path for auto power source detection
+*
+* @details
+* This function configures USB charge path for auto power source detection
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] apsd_cfg Refer pm_smbchg_usb_chgpth_apsd_cfg_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_config_apsd(uint32 device_index, pm_smbchg_usb_chgpth_apsd_cfg_type *apsd_cfg);
+
+
+/**
+* @brief This function reads configuration for USB charge path auto power source detection
+*
+* @details
+* This function reads configuration for USB charge path auto power source detection
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] apsd_cfg Refer pm_smbchg_usb_chgpth_apsd_cfg_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_get_apsd_config(uint32 device_index, pm_smbchg_usb_chgpth_apsd_cfg_type *apsd_cfg);
+
+
+/**
+* @brief This function sets chgpath input priority
+*
+* @details
+* This function sets chgpath input priority
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] chgpth_priority: Refer pm_smbchg_chgpth_input_priority_type for more info
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_chgpth_set_input_priority(uint32 device_index, pm_smbchg_chgpth_input_priority_type chgpth_priority);
+
+/**
+* @brief This function enables irq
+*
+* @details
+* This function enables irq
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] irq pm_smbchg_usb_chgpth_irq_type
+*
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_smbchg_usb_chgpth_irq_enable(uint32 device_index, pm_smbchg_usb_chgpth_irq_type irq, boolean enable);
+
+
+/**
+ * @brief This function clears the SMBCHG irq
+ *
+ * @param[in] device_index. Primary: 0. Secondary: 1
+ * @param[in] irq:
+ * SMBCHG irq type. Refer enum pm_smbchg_usb_chgpth_irq_type.
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_usb_chgpth_irq_clear(uint32 device_index, pm_smbchg_usb_chgpth_irq_type irq);
+
+
+
+/**
+ * @brief This function configures the SMBCHG irq trigger
+ *
+ * @param[in] device_index. Primary: 0. Secondary: 1
+ * @param[in] irq:
+ * SMBCHG irq type. Refer enum pm_smbchg_usb_chgpth_irq_type.
+ * @param[in] trigger:
+ * One of different irq triggers. Refer enum pm_irq_trigger_type
+ * from pm_uefi_irq.h for more details
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_usb_chgpth_irq_set_trigger(uint32 device_index, pm_smbchg_usb_chgpth_irq_type irq, pm_irq_trigger_type trigger);
+
+
+/**
+ * @brief This function configures the SMBCHG for irq
+ *
+ * @param[in] device_index. Primary: 0. Secondary: 1
+ * @param[in] irq:
+ * SMBCHG irq type. Refer enum pm_Smbb_irq_type.
+ * @param[in] type:
+ * Type of IRQ status to read. Refer enum pm_irq_status_type
+ * from pm_uefi_irq.h for more details
+ * @param[out] status:
+ * IRQ status.
+ *
+ *
+ * @return pm_err_flag_type
+ * PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+ * version of the PMIC.
+ * PM_ERR_FLAG__SUCCESS = SUCCESS.
+ *
+ */
+pm_err_flag_type pm_smbchg_usb_chgpth_irq_status(uint32 device_index, pm_smbchg_usb_chgpth_irq_type irq, pm_irq_status_type type, boolean *status);
+
+
+#endif /* PM_SMBCHG_USB_CHGPTH_H */
+
diff --git a/dev/pmic/pmi8994/pm_app_smbchg.c b/dev/pmic/pmi8994/pm_app_smbchg.c
new file mode 100644
index 0000000..4d8a2db
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_app_smbchg.c
@@ -0,0 +1,586 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+#include "pm_app_smbchg.h"
+#include "pm_smbchg_chgr.h"
+#include "pm_smbchg_bat_if.h"
+#include "pm_app_smbchg.h"
+#include "pm_fg_adc_usr.h"
+#include "pm_fg_driver.h"
+#include "pm_smbchg_driver.h"
+#include "pm_comm.h"
+#include "pm_smbchg_dc_chgpth.h"
+#include <debug.h>
+#include <platform/timer.h>
+#include <sys/types.h>
+#include <target.h>
+
+
+/*===========================================================================
+
+ PROTOTYPES
+
+===========================================================================*/
+
+
+/*===========================================================================
+
+ GLOBAL TYPE DEFINITIONS
+
+===========================================================================*/
+#define PM_REG_CONFIG_SETTLE_DELAY 175 * 1000 //175ms ; Delay required for battery voltage de-glitch time
+#define PM_WEAK_BATTERY_CHARGING_DELAY 500 * 1000 //500ms
+#define PM_WIPOWER_START_CHARGING_DELAY 3500 * 1000 //3.5sec
+#define PM_MIN_ADC_READY_DELAY 1 * 1000 //1ms
+#define PM_MAX_ADC_READY_DELAY 2000 //2s
+#define SBL_PACKED_SRAM_CONFIG_SIZE 3
+
+#define boot_log_message(...) dprintf(CRITICAL, __VA_ARGS__)
+
+static pm_smbchg_bat_if_low_bat_thresh_type pm_dbc_bootup_volt_threshold;
+static bool display_initialized;
+static bool charge_in_progress;
+char panel_name[256];
+
+pm_err_flag_type pm_smbchg_get_charger_path(uint32 device_index, pm_smbchg_usb_chgpth_pwr_pth_type* charger_path);
+pm_err_flag_type pm_appsbl_chg_config_vbat_low_threshold(uint32 device_index, pm_smbchg_specific_data_type *chg_param_ptr);
+
+/*===========================================================================
+
+ FUNCTION IMPLEMENTATION
+
+===========================================================================*/
+pm_err_flag_type pm_appsbl_chg_check_weak_battery_status(uint32 device_index)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_specific_data_type *chg_param_ptr = NULL;
+ pm_smbchg_chgr_chgr_status_type vbatt_chging_status;
+ boolean hot_bat_hard_lim_rt_sts = FALSE;
+ boolean cold_bat_hard_lim_rt_sts = FALSE;
+ boolean vbatt_weak_status = TRUE;
+ boolean adc_reading_ready = FALSE;
+ boolean bat_present = TRUE;
+ uint32 vbat_adc = 0;
+ uint16 wait_index = 0;
+ boolean vbatt_status = FALSE;
+ pm_smbchg_misc_src_detect_type chgr_src_detected;
+ boolean configure_icl_flag = FALSE;
+ boolean chg_prog_message_flag = FALSE;
+ pm_smbchg_usb_chgpth_pwr_pth_type charger_path = PM_SMBCHG_USB_CHGPTH_PWR_PATH__INVALID;; uint32 bootup_threshold;
+
+ pm_smbchg_driver_init(device_index);
+ pm_fg_driver_init(device_index);
+
+ chg_param_ptr = (pm_smbchg_specific_data_type*)pm_target_information_get_specific_info();
+ ASSERT(chg_param_ptr);
+ bootup_threshold = chg_param_ptr->bootup_battery_theshold_mv;
+
+ if(chg_param_ptr->dbc_bootup_volt_threshold.enable_config == PM_ENABLE_CONFIG)
+ {
+ //Configure Vlowbatt threshold: Used by PMI on next bootup
+ err_flag |= pm_appsbl_chg_config_vbat_low_threshold(device_index, chg_param_ptr);
+ }
+
+ //Check Battery presence
+ err_flag |= pm_smbchg_bat_if_get_bat_pres_status(device_index, &bat_present);
+ if( bat_present == FALSE )
+ {
+ dprintf(CRITICAL, "Booting up to HLOS: Charger is Connected and NO battery\n");
+ return err_flag;
+ }
+
+
+ //Detect the typpe of charger used
+ //err_flag |= pm_smbchg_usb_chgpth_get_pwr_pth(device_index, &
+ err_flag |= pm_smbchg_get_charger_path(device_index, &charger_path);
+ if (charger_path == PM_SMBCHG_USB_CHGPTH_PWR_PATH__DC_CHARGER)
+ {
+
+ bootup_threshold = chg_param_ptr->wipwr_bootup_battery_theshold_mv;
+ }
+ else if (charger_path == PM_SMBCHG_USB_CHGPTH_PWR_PATH__USB_CHARGER)
+ {
+ bootup_threshold = chg_param_ptr->bootup_battery_theshold_mv;
+ }
+
+ //Enable BMS FG Algorithm BCL
+ err_flag |= pm_fg_adc_usr_enable_bcl_monitoring(device_index, TRUE);
+ if ( err_flag != PM_ERR_FLAG__SUCCESS )
+ {
+ return err_flag;
+ }
+
+
+ while( vbatt_weak_status == TRUE ) //While battery is in weak state
+ {
+ //Check Vbatt ADC level
+ err_flag |= pm_fg_adc_usr_get_bcl_values(device_index, &adc_reading_ready); //Check if Vbatt ADC is ready
+
+ //Check if Vbatt ADC is Ready
+ for (wait_index = 0; wait_index < PM_MAX_ADC_READY_DELAY; wait_index++)
+ {
+ if(adc_reading_ready == FALSE)
+ {
+ udelay(PM_MIN_ADC_READY_DELAY);
+ err_flag |= pm_fg_adc_usr_get_bcl_values(device_index,&adc_reading_ready);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if ( err_flag != PM_ERR_FLAG__SUCCESS ) { break;}
+
+ if ( adc_reading_ready)
+ {
+ err_flag |= pm_fg_adc_usr_get_calibrated_vbat(device_index, &vbat_adc); //Read calibrated vbatt ADC
+ if ( err_flag != PM_ERR_FLAG__SUCCESS ) { break;}
+
+ //Check if ADC reading is within limit
+ if ( vbat_adc >= bootup_threshold) //Compaire it with SW bootup threshold
+ {
+ vbatt_weak_status = FALSE;
+ break; //bootup
+ }
+ }
+ else
+ {
+ boot_log_message("ERROR: ADC Reading is NOT Ready\n");
+ err_flag |= PM_ERR_FLAG__ADC_NOT_READY;
+ break;
+ }
+
+ //Check if USB charger is SDP
+ err_flag |= pm_smbchg_misc_chgr_port_detected(device_index, &chgr_src_detected);
+ if (chgr_src_detected == PM_SMBCHG_MISC_SRC_DETECT_SDP)
+ {
+ if (configure_icl_flag == FALSE)
+ {
+ //Check Vlow_batt status
+ err_flag |= pm_smbchg_chgr_vbat_sts(device_index, &vbatt_status);
+ if (vbatt_status)
+ {
+ //set ICL to 500mA
+ err_flag |= pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__USB51_MODE, TRUE);
+ err_flag |= pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__USBIN_MODE_CHG, FALSE);
+ configure_icl_flag = TRUE;
+ }
+ }
+ }
+
+ if (chg_prog_message_flag == FALSE)
+ {
+ //Ensure that Charging is enabled
+ err_flag |= pm_smbchg_chgr_enable_src(device_index, FALSE);
+ err_flag |= pm_smbchg_chgr_set_chg_polarity_low(device_index, FALSE);
+ err_flag |= pm_smbchg_bat_if_config_chg_cmd(device_index, PM_SMBCHG_BAT_IF_CMD__EN_BAT_CHG, TRUE);
+ udelay(PM_WEAK_BATTERY_CHARGING_DELAY);
+ }
+
+ //Check if JEITA check is enabled
+ if (chg_param_ptr->enable_jeita_hard_limit_check == TRUE)
+ {
+ //Read JEITA condition
+ err_flag |= pm_smbchg_bat_if_irq_status(device_index, PM_SMBCHG_BAT_IF_HOT_BAT_HARD_LIM, PM_IRQ_STATUS_RT, &hot_bat_hard_lim_rt_sts );
+ err_flag |= pm_smbchg_bat_if_irq_status(device_index, PM_SMBCHG_BAT_IF_COLD_BAT_HARD_LIM, PM_IRQ_STATUS_RT, &cold_bat_hard_lim_rt_sts);
+ if ( err_flag != PM_ERR_FLAG__SUCCESS ) { break;}
+
+ if ( ( hot_bat_hard_lim_rt_sts == TRUE ) || (cold_bat_hard_lim_rt_sts == TRUE) )
+ {
+ continue; // Stay in this loop as long as JEITA Hard Hot/Cold limit is exceeded
+ }
+ }
+
+ if (!charge_in_progress)
+ dprintf(INFO,"APPSBL Weak Battery charging: Start\n");
+
+ charge_in_progress = true;
+#if DISPLAY_SPLASH_SCREEN
+ if (!display_initialized)
+ target_display_init(panel_name);
+ display_initialized = true;
+#endif
+ /* Wait for 500 msecs before looking for vbat */
+ udelay(PM_WEAK_BATTERY_CHARGING_DELAY); //500ms
+
+
+ //Check if Charging in progress
+ err_flag |= pm_smbchg_chgr_get_chgr_sts(device_index, &vbatt_chging_status);
+ if ( err_flag != PM_ERR_FLAG__SUCCESS ) { break;}
+
+ if ( vbatt_chging_status.charging_type == PM_SMBCHG_CHGR_NO_CHARGING )
+ {
+ if (charger_path == PM_SMBCHG_USB_CHGPTH_PWR_PATH__DC_CHARGER)
+ {
+ //Delay for 3.5sec for charging to begin, and check charging status again prior to shutting down.
+ udelay(PM_WIPOWER_START_CHARGING_DELAY); //3500ms
+
+ err_flag |= pm_smbchg_chgr_get_chgr_sts(device_index, &vbatt_chging_status);
+ if ( err_flag != PM_ERR_FLAG__SUCCESS ) { break;}
+
+ if ( vbatt_chging_status.charging_type == PM_SMBCHG_CHGR_NO_CHARGING )
+ {
+ boot_log_message("ERROR: Charging is NOT in progress: Shutting Down\n");
+ shutdown_device();
+ }
+ }
+ else
+ {
+ boot_log_message("ERROR: Charging is NOT in progress: Shutting Down\n");
+ shutdown_device();
+ }
+ }
+ else
+ {
+#ifdef DEBUG_CHARGER
+ dprintf(INFO, "APPSBL Charging in Progress....\n");
+#endif
+ chg_prog_message_flag = TRUE;
+ }
+ }//while
+
+
+ if (charger_path == PM_SMBCHG_USB_CHGPTH_PWR_PATH__DC_CHARGER)
+ {
+ //If battery is good, Toggle SHDN_N_CLEAR_CMD Reg: Set 0x1340[6] to 1 and then 0
+ err_flag = pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__SHDN_N_CLEAR_CMD, TRUE);
+ err_flag = pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__SHDN_N_CLEAR_CMD, FALSE);
+ }
+
+ if (charge_in_progress)
+ dprintf(INFO, "APPSBL Weak Battery Charging: Done \n");
+
+ charge_in_progress = false;
+ return err_flag;
+}
+
+
+
+pm_err_flag_type pm_smbchg_get_charger_path(uint32 device_index, pm_smbchg_usb_chgpth_pwr_pth_type* charger_path)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ boolean usbin_uv_status = TRUE;
+ boolean usbin_ov_status = TRUE;
+ boolean dcbin_uv_status = TRUE;
+ boolean dcbin_ov_status = TRUE;
+
+ //DC charger present, if DCIN_UV_RT_STS and DCIN_UV_RT_STS status is 0 (INT_RT_STS : 0x1410[1] and [0] == 0)
+ err_flag |= pm_smbchg_dc_chgpth_irq_status(device_index, PM_SMBCHG_DC_CHGPTH_DCBIN_UV, PM_IRQ_STATUS_RT, &dcbin_uv_status);
+ err_flag |= pm_smbchg_dc_chgpth_irq_status(device_index, PM_SMBCHG_DC_CHGPTH_DCBIN_OV, PM_IRQ_STATUS_RT, &dcbin_ov_status);
+ //USB charger present, if USBIN_UV_RT_STS and USBIN_OV_RT_STS status is 0 ( INT_RT_STS : 0x1310[1] and [0] == 0)
+ err_flag |= pm_smbchg_usb_chgpth_irq_status(device_index, PM_SMBCHG_USB_CHGPTH_USBIN_UV, PM_IRQ_STATUS_RT, &usbin_uv_status);
+ err_flag |= pm_smbchg_usb_chgpth_irq_status(device_index, PM_SMBCHG_USB_CHGPTH_USBIN_OV, PM_IRQ_STATUS_RT, &usbin_ov_status);
+
+ if((dcbin_uv_status == FALSE) && (dcbin_ov_status == FALSE))
+ {
+ *charger_path = PM_SMBCHG_USB_CHGPTH_PWR_PATH__DC_CHARGER;
+ }
+ else if((usbin_uv_status == FALSE) && (usbin_ov_status == FALSE))
+ {
+ *charger_path = PM_SMBCHG_USB_CHGPTH_PWR_PATH__USB_CHARGER;
+ }
+ else
+ {
+ *charger_path = PM_SMBCHG_USB_CHGPTH_PWR_PATH__INVALID;
+ }
+
+ return err_flag;
+}
+
+
+
+pm_err_flag_type pm_appsbl_chg_config_vbat_low_threshold(uint32 device_index, pm_smbchg_specific_data_type *chg_param_ptr)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ pm_dbc_bootup_volt_threshold = chg_param_ptr->dbc_bootup_volt_threshold.vlowbatt_threshold;
+
+ if (chg_param_ptr->dbc_bootup_volt_threshold.enable_config == PM_ENABLE_CONFIG)
+ {
+ if (pm_dbc_bootup_volt_threshold >= PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__INVALID_VBATT_INDEXED;
+ return err_flag;
+ }
+
+ err_flag = pm_smbchg_bat_if_set_low_batt_volt_threshold(device_index, pm_dbc_bootup_volt_threshold);
+#ifdef DEBUG_CHARGER
+ dprintf(INFO,"Configure Vlowbatt threshold");
+#endif
+ }
+
+ return err_flag;
+}
+
+#ifndef LK
+pm_err_flag_type pm_sbl_config_fg_sram(uint32 device_index)
+ {
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ FgSramAddrDataEx_type *sram_data_ptr = NULL;
+ FgSramAddrDataEx_type pm_sbl_sram_data[SBL_PACKED_SRAM_CONFIG_SIZE];
+ pm_model_type pmic_model = PMIC_IS_INVALID;
+ boolean sram_enable_config_flag = FALSE;
+
+ //Check if any SRAM configuration is needed
+ sram_data_ptr = (FgSramAddrDataEx_type*)pm_target_information_get_specific_info(PM_PROP_FG_SPECIFIC_DATA);
+ CORE_VERIFY_PTR(sram_data_ptr);
+ for (int i=0; i< SBL_SRAM_CONFIG_SIZE; i++)
+ {
+ sram_enable_config_flag |= sram_data_ptr[i].EnableConfig;
+ }
+
+
+ if (sram_enable_config_flag == TRUE )
+ {
+ pmic_model = pm_get_pmic_model(device_index); //Check if PMIC exists
+ if ( (pmic_model != PMIC_IS_INVALID) || (pmic_model != PMIC_IS_UNKNOWN) )
+ {
+ //boot_log_message("BEGIN: Configure FG SRAM");
+
+ //Pre-process JEITA data
+ pm_sbl_sram_data[0].SramAddr = sram_data_ptr[0].SramAddr;
+ pm_sbl_sram_data[0].SramData = (sram_data_ptr[3].SramData << 24)|
+ (sram_data_ptr[2].SramData << 16)|
+ (sram_data_ptr[1].SramData << 8)|
+ sram_data_ptr[0].SramData;
+ pm_sbl_sram_data[0].DataOffset = sram_data_ptr[0].DataOffset;
+ pm_sbl_sram_data[0].DataSize = 4;
+ //Set JEITA threshould configuration flag
+ pm_sbl_sram_data[0].EnableConfig = sram_data_ptr[0].EnableConfig | sram_data_ptr[1].EnableConfig |
+ sram_data_ptr[2].EnableConfig | sram_data_ptr[3].EnableConfig;
+
+ //Pre-process Thermistor Beta Data
+ //thremistor_c1_coeff
+ pm_sbl_sram_data[1] = sram_data_ptr[4];
+
+ //thremistor_c2_coeff and thremistor_c3_coeff
+ pm_sbl_sram_data[2].SramAddr = sram_data_ptr[5].SramAddr;
+ pm_sbl_sram_data[2].SramData = (sram_data_ptr[6].SramData << 16) | sram_data_ptr[5].SramData;
+ pm_sbl_sram_data[2].DataOffset = sram_data_ptr[5].DataOffset;
+ pm_sbl_sram_data[2].DataSize = 4;
+ pm_sbl_sram_data[2].EnableConfig = sram_data_ptr[5].EnableConfig;
+
+ //Configure SRAM Data
+ err_flag |= PmicFgSram_ProgBurstAccessEx(device_index, pm_sbl_sram_data, SBL_PACKED_SRAM_CONFIG_SIZE);
+
+ //Test: Read Back
+ //err_flag |= PmicFgSram_Dump(device_index, 0x0454, 0x0454);
+ //err_flag |= PmicFgSram_Dump(device_index, 0x0444, 0x0448);
+ //err_flag |= PmicFgSram_Dump(device_index, 0x0448, 0x0452);
+
+ //boot_log_message("END: Configure FG SRAM");
+ }
+ }
+
+ return err_flag;
+}
+
+
+
+
+pm_err_flag_type pm_sbl_config_chg_parameters(uint32 device_index)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ static pm_smbchg_specific_data_type *chg_param_ptr;
+
+ if(chg_param_ptr == NULL)
+ {
+ chg_param_ptr = (pm_smbchg_specific_data_type*)pm_target_information_get_specific_info(PM_PROP_SMBCHG_SPECIFIC_DATA);
+ CORE_VERIFY_PTR(chg_param_ptr);
+ }
+
+ //Vlowbatt Threshold
+ // - Done on: pm_sbl_chg_config_vbat_low_threshold()
+
+ //Charger Path Input Priority
+ if (chg_param_ptr->chgpth_input_priority.enable_config == PM_ENABLE_CONFIG)
+ {
+ pm_smbchg_chgpth_input_priority_type chgpth_priority = chg_param_ptr->chgpth_input_priority.chgpth_input_priority;
+ if (chgpth_priority < PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_INVALID)
+ {
+ err_flag |= pm_smbchg_chgpth_set_input_priority(device_index, chgpth_priority);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+
+ //Battery Missing Detection Source
+ if (chg_param_ptr->bat_miss_detect_src.enable_config == PM_ENABLE_CONFIG)
+ {
+ pm_smbchg_bat_miss_detect_src_type batt_missing_det_src = chg_param_ptr->bat_miss_detect_src.bat_missing_detection_src;
+ if (batt_missing_det_src < PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_INVALID)
+ {
+ err_flag |= pm_smbchg_bat_if_set_bat_missing_detection_src(device_index, batt_missing_det_src);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+ //WDOG Timeout
+ if (chg_param_ptr->wdog_timeout.enable_config == PM_ENABLE_CONFIG)
+ {
+ pm_smbchg_wdog_timeout_type wdog_timeout = chg_param_ptr->wdog_timeout.wdog_timeout;
+ if (wdog_timeout < PM_SMBCHG_MISC_WD_TMOUT_INVALID)
+ {
+ err_flag |= pm_smbchg_misc_set_wdog_timeout(device_index, wdog_timeout);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+
+ //Enable WDOG
+ if (chg_param_ptr->enable_wdog.enable_config == PM_ENABLE_CONFIG)
+ {
+ pm_smbchg_wdog_timeout_type enable_smbchg_wdog = chg_param_ptr->enable_wdog.enable_wdog;
+ err_flag |= pm_smbchg_misc_enable_wdog(device_index, enable_smbchg_wdog);
+ }
+
+
+ //FAST Charging Current
+ if (chg_param_ptr->fast_chg_i.enable_config == PM_ENABLE_CONFIG)
+ {
+ uint32 fast_chg_i_ma = chg_param_ptr->fast_chg_i.fast_chg_i_ma;
+ if ((fast_chg_i_ma >= 300) && (fast_chg_i_ma <= 3000) )
+ {
+ err_flag |= pm_smbchg_chgr_set_fast_chg_i(device_index, fast_chg_i_ma);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+ //Pre Charge Current
+ if (chg_param_ptr->pre_chg_i.enable_config == PM_ENABLE_CONFIG)
+ {
+ uint32 pre_chg_i_ma = chg_param_ptr->pre_chg_i.pre_chg_i_ma;
+ if ((pre_chg_i_ma >= 100) && (pre_chg_i_ma <= 550) )
+ {
+ err_flag |= pm_smbchg_chgr_set_pre_chg_i(device_index, pre_chg_i_ma);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+ //Pre to Fast Charge Current
+ if (chg_param_ptr->pre_to_fast_chg_theshold_mv.enable_config == PM_ENABLE_CONFIG)
+ {
+ uint32 p2f_chg_mv = chg_param_ptr->pre_to_fast_chg_theshold_mv.pre_to_fast_chg_theshold_mv;
+ if ((p2f_chg_mv >= 2400) && (p2f_chg_mv <= 3000) )
+ {
+ err_flag |= pm_smbchg_chgr_set_p2f_threshold(device_index, p2f_chg_mv);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+ //Float Voltage : 3600mV to 4500 mv
+ if (chg_param_ptr->float_volt_theshold_mv.enable_config == PM_ENABLE_CONFIG)
+ {
+ uint32 float_volt_mv = chg_param_ptr->float_volt_theshold_mv.float_volt_theshold_mv;
+ if ((float_volt_mv >= 3600) && (float_volt_mv <= 4500))
+ {
+ err_flag |= pm_smbchg_chgr_set_float_volt(device_index, float_volt_mv);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+
+ //USBIN Input Current Limit :Valid value is 300 to 3000mAmp
+ if (chg_param_ptr->usbin_input_current_limit.enable_config == PM_ENABLE_CONFIG)
+ {
+ uint32 usbin_i_limit_ma = chg_param_ptr->usbin_input_current_limit.usbin_input_current_limit;
+ if ((usbin_i_limit_ma >= 300) && (usbin_i_limit_ma <= 3000))
+ {
+ err_flag |= pm_smbchg_usb_chgpth_set_usbin_current_limit(device_index, usbin_i_limit_ma);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+
+ //DCIN Input Current Limit : valid range is 300 to 2000 mAmp
+ if (chg_param_ptr->dcin_input_current_limit.enable_config == PM_ENABLE_CONFIG)
+ {
+ uint32 dcin_i_limit_ma = chg_param_ptr->dcin_input_current_limit.dcin_input_current_limit;
+ if ((dcin_i_limit_ma >= 300) && (dcin_i_limit_ma <= 3200))
+ {
+ err_flag |= pm_smbchg_dc_chgpth_set_dcin_current_limit(device_index, dcin_i_limit_ma);
+ }
+ else
+ {
+ err_flag |= PM_ERR_FLAG__INVALID_PARAMETER;
+ }
+ }
+
+
+ return err_flag;
+}
+#endif
+
+bool pm_appsbl_charging_in_progress()
+{
+ return charge_in_progress;
+}
+
+bool pm_appsbl_display_init_done()
+{
+ return display_initialized;
+}
+
+pm_err_flag_type pm_appsbl_set_dcin_suspend(uint32_t device_index)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ err_flag = pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__DCIN_SUSPEND, TRUE);
+
+ return err_flag;
+}
diff --git a/dev/pmic/pmi8994/pm_comm_spmi_lite.c b/dev/pmic/pmi8994/pm_comm_spmi_lite.c
new file mode 100644
index 0000000..5a41e4b
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_comm_spmi_lite.c
@@ -0,0 +1,221 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*===========================================================================
+
+INCLUDE FILES FOR MODULE
+
+===========================================================================*/
+
+#include <pm8x41.h>
+#include <debug.h>
+#include <sys/types.h>
+#include "pm_err_flags.h"
+#include "pm_resources_and_types.h"
+#include "pm_comm.h"
+#include <spmi.h>
+
+#define PM_MAX_REGS 0xFFFF
+
+typedef uint32_t SpmiBus_ResultType;
+
+enum spmi_result
+{
+ SPMI_BUS_SUCCESS,
+};
+
+pm_err_flag_type pm_comm_read_byte(uint32 slave_id, uint32 addr, uint8* data, uint8 priority)
+{
+ pm_err_flag_type err = PM_ERR_FLAG__SUCCESS ;
+ SpmiBus_ResultType spmi_result = SPMI_BUS_SUCCESS;
+
+ if(TRUE == spmi_initialized())
+ {
+ /* check for out-of-bounds index */
+ if ( addr > PM_MAX_REGS)
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+ else
+ {
+ spmi_result = spmi_reg_read(slave_id, addr, data, priority);
+
+ if ( spmi_result != SPMI_BUS_SUCCESS ) { err = PM_ERR_FLAG__SPMI_OPT_ERR ; }
+ }
+ }
+ else
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+
+ return err ;
+}
+
+pm_err_flag_type pm_comm_read_byte_mask(uint32 slave_id, uint32 addr, uint8 mask, uint8* data, uint8 priority)
+{
+ pm_err_flag_type err = PM_ERR_FLAG__SUCCESS ;
+
+ err = spmi_reg_read(slave_id, addr, data, priority);
+ if ( err != PM_ERR_FLAG__SUCCESS )
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+ else
+ {
+ *data = *data & mask;
+ }
+
+
+ return err ;
+}
+
+
+
+pm_err_flag_type pm_comm_write_byte(uint32 slave_id, uint32 addr, uint8 data, uint8 priority)
+{
+ pm_err_flag_type err = PM_ERR_FLAG__SUCCESS ;
+ SpmiBus_ResultType spmi_result = SPMI_BUS_SUCCESS;
+
+ if(TRUE == spmi_initialized())
+ {
+ /* check for out-of-bounds index */
+ if ( addr > PM_MAX_REGS)
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+ else
+ {
+ spmi_result = spmi_reg_write(slave_id, addr, &data, priority);
+
+ if ( spmi_result != SPMI_BUS_SUCCESS ) { err = PM_ERR_FLAG__SPMI_OPT_ERR ; }
+ }
+ }
+ else
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+
+ return err ;
+}
+
+pm_err_flag_type pm_comm_write_byte_mask(uint32 slave_id, uint32 addr, uint8 mask, uint8 value, uint8 priority)
+{
+ pm_err_flag_type err = PM_ERR_FLAG__SUCCESS ;
+ SpmiBus_ResultType spmi_result = SPMI_BUS_SUCCESS;
+ uint8 data = 0 ;
+
+ if(TRUE == spmi_initialized())
+ {
+ /* check for out-of-bounds index */
+ if ( addr > PM_MAX_REGS)
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+ else
+ {
+ /* Read the data from the SPMI and leave all the bits other than the mask to the previous state */
+ spmi_result = spmi_reg_read(slave_id, addr, &data, priority);
+
+ if ( spmi_result == SPMI_BUS_SUCCESS )
+ {
+ data &= (~mask) ;
+ data |= (value & mask) ;
+
+ spmi_result = spmi_reg_write(slave_id, addr, &data, priority);
+
+ if ( spmi_result != SPMI_BUS_SUCCESS ) { err = PM_ERR_FLAG__SPMI_OPT_ERR ; }
+ }
+ }
+ }
+ else
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+
+
+ return err ;
+}
+
+#ifndef LK
+pm_err_flag_type pm_comm_write_byte_array(uint32 slave_id, uint16 addr, uint32 num_bytes, uint8* data, uint8 priority)
+{
+ pm_err_flag_type err = PM_ERR_FLAG__SUCCESS ;
+ SpmiBus_ResultType spmi_result = SPMI_BUS_SUCCESS;
+
+ if(TRUE == spmi_initialized)
+ {
+ /* check for out-of-bounds index */
+ if ( addr > PM_MAX_REGS)
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+ else
+ {
+ spmi_result = SpmiBus_WriteLong(slave_id, (SpmiBus_AccessPriorityType)priority, addr, data, num_bytes);
+
+ if ( spmi_result != SPMI_BUS_SUCCESS ) { err = PM_ERR_FLAG__SPMI_OPT_ERR ; }
+ }
+ }
+ else
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+
+ return err ;
+}
+
+pm_err_flag_type pm_comm_read_byte_array (uint32 slave_id, uint16 addr, uint32 num_bytes, uint8* data, uint8 priority)
+{
+ pm_err_flag_type err = PM_ERR_FLAG__SUCCESS ;
+ SpmiBus_ResultType spmi_result = SPMI_BUS_SUCCESS;
+ /* Read the data from the SPMI */
+ uint32 dataReadLength = 0;
+
+
+ if(TRUE == spmi_initialized)
+ {
+ /* check for out-of-bounds index */
+ if ( addr > PM_MAX_REGS)
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+ else
+ {
+ spmi_result = SpmiBus_ReadLong(slave_id, (SpmiBus_AccessPriorityType)priority, addr, data, num_bytes, &dataReadLength);
+
+ if ( spmi_result != SPMI_BUS_SUCCESS ) { err = PM_ERR_FLAG__SPMI_OPT_ERR ; }
+ }
+ }
+ else
+ {
+ err = PM_ERR_FLAG__SPMI_OPT_ERR ;
+ }
+
+ return err ;
+}
+#endif
diff --git a/dev/pmic/pmi8994/pm_config_target.c b/dev/pmic/pmi8994/pm_config_target.c
new file mode 100644
index 0000000..6e25a79
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_config_target.c
@@ -0,0 +1,252 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+#include "pm_smbchg_driver.h"
+#include "pm_app_smbchg.h"
+#include "pm_smbchg_bat_if.h"
+#include <sys/types.h>
+
+/* 2 slave IDs per PMIC device. */
+#define PM_MAX_SLAVE_ID 2
+
+ /************************************************ DRIVER DATA *********************************/
+ #ifndef LK
+//PM8994,PMi8994,PM8004
+uint32 num_of_ldo[] = {32, 1, 1};
+uint32 num_of_smps[] = {12, 3, 5};
+uint32 num_of_gpio[] = {22,10, 0};
+uint32 num_of_mpp[] = {8, 4, 4};
+uint32 num_of_rtc[] = {1, 0, 0};
+uint32 num_of_megaxo[] = {1, 0, 0};
+uint32 num_of_boost[] = {0, 1, 0};
+uint32 num_of_vs[] = {2, 0, 0};
+uint32 num_of_lpg_chan[] = {12, 4,0};
+uint32 num_of_pwron[] = {1, 1, 1};
+uint32 num_of_misc[] = {1, 0, 0};
+uint32 num_of_clk_buffer[] = {13,13,0};
+uint32 num_of_rgb[] = {0,1,0};
+uint32 num_of_wled[] = {0,1,0};
+uint32 num_of_smbchg[] = {0,1,0};
+uint32 num_of_fg[] = {0,1,0};
+uint32 num_of_ibb[] = {0,1,0};
+uint32 num_of_lab[] = {0,1,0};
+uint32 num_of_vib[] = {0,1,0};
+uint32 num_of_pbs_client[] = {16,12,8};
+pm_mpp_specific_info_type
+mpp_specific[1] =
+{
+ {0x9E0, 4}
+};
+
+pm_lpg_specific_info_type lpg_specific[1] =
+{
+ {24}
+};
+
+pm_vib_specific_data_type
+vib_specific[1] =
+{
+ {1200, 2000}
+};
+#endif
+pm_smbchg_specific_data_type
+smbchg_specific_data[1] = {
+{
+ //Configuration Value, Enable config
+ {PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P25, PM_DISABLE_CONFIG }, //Vlowbatt Threshold
+ {PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_USBIN, PM_DISABLE_CONFIG }, //Charger Path Input Priority
+ {PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_BMD_PIN, PM_DISABLE_CONFIG }, //Battery Missing Detection Source
+ {PM_SMBCHG_MISC_WD_TMOUT_18S, PM_DISABLE_CONFIG }, //WDOG Timeout
+ {FALSE, PM_DISABLE_CONFIG }, //Enable WDOG
+ {1000, PM_DISABLE_CONFIG }, //FAST Charging Current
+ {250, PM_DISABLE_CONFIG }, //PRE Charge Current
+ {3000, PM_DISABLE_CONFIG }, //PRE to Fast Charge Current
+ {4200, PM_DISABLE_CONFIG }, //Float Voltage
+ {2100, PM_DISABLE_CONFIG }, //USBIN Input Current Limit
+ {1000, PM_DISABLE_CONFIG }, //DCIN Input Current Limit
+ 3600, //bootup_battery_theshold_mv
+ 3800, //wipowr bootup battery thesholdmv
+ FALSE, //Enable/Disable JEITA Hard Temp Limit Check in SBL
+ }
+};
+
+
+chg_range_data_type chg_range_data[1] = {
+ {
+ //batt_missing_detect_time_range
+ { 80, 160, 320, 640 },
+ //DCIN_range
+ { 300, 400, 450, 475, 500, 550, 600, 650, 700, 900, 950, 1000, 1100, 1200, 1400, 1450, 1500, 1600, 1800, 1850, 1880, 1910, 1930, 1950, 1970, 2000 },
+ //USBIN_range
+ { 300, 400, 450, 475, 500, 550, 600, 650, 700, 900, 950, 1000, 1100, 1200, 1400, 1450, 1500, 1600, 1800, 1850, 1880, 1910, 1930, 1950, 1970, 2000, 2050, 2100, 2300, 2400, 2500, 3000 }
+ }
+};
+
+#ifndef LK
+//By default, configuration of the FG params is NOT enabled. since the last parameter(EnableConfig) = 0
+//To enable configuration, set EnableConfig = 1
+FgSramAddrDataEx_type
+fg_sram_data[SBL_SRAM_CONFIG_SIZE] =
+{
+ //JEITA Thresholds:
+ //SramAddr, SramData, DataOffset, DataSize, EnableConfig
+ { 0x0454, 0x23, 0, 1, PM_DISABLE_CONFIG }, //JEITA Soft Cold Threshold: default = 0x23
+ { 0x0454, 0x46, 1, 1, PM_DISABLE_CONFIG }, //JEITA Soft Hot Threshold: default = 0x46
+ { 0x0454, 0x1E, 2, 1, PM_DISABLE_CONFIG }, //JEITA Hard Cold Threshold: default = 0x1E
+ { 0x0454, 0x48, 3, 1, PM_DISABLE_CONFIG }, //JEITA hard Hot Threshold: default = 0x48
+
+ //Thermistor Beta Coefficents:
+ { 0x0444, 0x86D8, 2, 2, PM_DISABLE_CONFIG }, //thremistor_c1_coeff: default = 0x86D8;
+ { 0x0448, 0x50F1, 0, 2, PM_DISABLE_CONFIG }, //thremistor_c2_coeff: default = 0x50F1;
+ { 0x0448, 0x3C11, 2, 2, PM_DISABLE_CONFIG } //thremistor_c3_coeff: default = 0x3C11;
+};
+
+pm_pbs_info_data_type pm_pbs_info_data_a =
+{
+ 256, /* PBS MEMORY Size */
+ PM_PBS_INFO_IN_OTP, /* Place where PBS Info stored */
+};
+
+pm_pbs_info_data_type pm_pbs_info_data_b =
+{
+ 128, /* PBS MEMORY Size */
+ PM_PBS_INFO_IN_OTP, /* Place where PBS Info stored */
+};
+
+pm_pbs_info_data_type pm_pbs_info_data_c =
+{
+ 256, /* PBS MEMORY Size */
+ PM_PBS_INFO_IN_OTP, /* Place where PBS Info stored */
+};
+
+pm_pbs_info_data_type *pm_pbs_info_data[] = {&pm_pbs_info_data_a, &pm_pbs_info_data_b, &pm_pbs_info_data_c};
+
+/* max_num_seqs, ram_start_addr, poff_trig_id, poff_otp_addr, warmreset_trig_id, warmreset_otp_addr */
+pm_pbs_custom_seq_data_type pbs_custom_seq_data_a = {2, 0x07DC, 3, 0x000C, 2, 0x0008};
+
+/* max_num_seqs, ram_start_addr, poff_trig_id, poff_otp_addr, warmreset_trig_id, warmreset_otp_addr */
+pm_pbs_custom_seq_data_type pbs_custom_seq_data_b = {33, 0x0554, 2, 0x0008, 7, 0x001C};
+
+pm_pbs_custom_seq_data_type* pbs_custom_seq_data[] =
+{
+ &pbs_custom_seq_data_a,
+ &pbs_custom_seq_data_b,
+ NULL,
+};
+
+/* PPID, channel mapping and ownership. */
+
+const uint8 pm_periph_bitmap[][PM_MAX_SLAVE_ID][PM_MAX_BITMAP_ENTRIES] =
+{
+ /* PM8994*/
+ {
+ {
+ 0x72, 0x07, 0x00, 0x10,
+ 0x10, 0x11, 0x16, 0x00,
+ 0x00, 0x00, 0x37, 0x3f,
+ 0x07, 0x00, 0xff, 0xff,
+ 0x01, 0x00, 0x00, 0x00,
+ 0xff, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x3f, 0x00,
+ 0x00, 0x00, 0x00, 0x40,
+ },
+ {
+ 0x00, 0x00, 0xf1, 0xff,
+ 0xff, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0x10,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ },
+ },
+ /* PMI8994*/
+ {
+ {
+ 0x72, 0x03, 0x5f, 0x18,
+ 0x00, 0x10, 0x02, 0x00,
+ 0x1f, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0xff, 0x1f,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00,
+ 0xff, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x40,
+ },
+ {
+ 0x00, 0x00, 0xf1, 0x1f,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0x00, 0x1f, 0x00,
+ 0x01, 0x00, 0x09, 0x53,
+ 0x00, 0x00, 0x00, 0x00,
+ }
+ },
+ /* PM8004 */
+ {
+ {
+ 0x00, 0x03, 0x00, 0x00,
+ 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0xff, 0x01,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x40,
+ },
+ {
+ 0x00, 0x00, 0xf1, 0xe3,
+ 0x07, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+
+ }
+ }
+};
+#endif
+
+void *pm_target_information_get_specific_info()
+{
+ return (void *) smbchg_specific_data;
+};
+
+void *pm_target_chg_range_data()
+{
+ return (void *) chg_range_data;
+}
diff --git a/dev/pmic/pmi8994/pm_fg_adc_usr.c b/dev/pmic/pmi8994/pm_fg_adc_usr.c
new file mode 100644
index 0000000..e7e01fc
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_fg_adc_usr.c
@@ -0,0 +1,1268 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "pm_fg_adc_usr.h"
+#include "pm_fg_driver.h"
+#include "pm_smbchg_driver.h"
+#include "pm_err_flags.h"
+#include "pm_comm.h"
+#include <sys/types.h>
+
+/*===========================================================================
+ TYPE DEFINITIONS
+===========================================================================*/
+#define RAW_IBAT_LSB 39
+#define RAW_VBAT_LSB 39
+#define OFFSET_LSB_NUM 12 //Offset LSB Numerator
+#define OFFSET_LSB_DENOM 10 //Offset LSB Denominator
+#define GAIN_LSB_DENOM 400 // Gain LSB is 0.32/128 = 1/400
+
+/*===========================================================================
+ FUNCTION DEFINITIONS
+===========================================================================*/
+/**
+* @brief This function grant access to FG ADC User access *
+* @details
+* This function grant access to FG ADC User access
+*
+* @param[in] pm_fg_data_type Self
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_grant_sec_access(pm_fg_data_type *fg_adc_usr_ptr)
+{
+
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ if(NULL == fg_adc_usr_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type sec_access = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_sec_access;
+ err_flag = pm_comm_write_byte(fg_adc_usr_ptr->comm_ptr->slave_id, sec_access, 0xA5, 0);
+ }
+
+ return err_flag;
+}
+
+/* Interrupt */
+pm_err_flag_type pm_fg_adc_usr_irq_enable(uint32 pmic_device, pm_fg_adc_usr_irq_type irq, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type irq_reg;
+ pm_register_data_type data = 1 << irq;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_FG_ADC_USR_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ if (enable)
+ {
+ irq_reg = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_en_set;
+ }
+ else
+ {
+ irq_reg = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_en_clr;
+ }
+
+ err_flag = pm_comm_write_byte(fg_adc_usr_ptr->comm_ptr->slave_id, irq_reg, data, 0);
+ }
+ return err_flag;
+}
+
+pm_err_flag_type pm_fg_adc_usr_irq_clear(uint32 pmic_device, pm_fg_adc_usr_irq_type irq)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 1 << irq;
+ pm_register_address_type int_latched_clr;
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_FG_ADC_USR_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ int_latched_clr = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_latched_clr;
+ err_flag = pm_comm_write_byte(fg_adc_usr_ptr->comm_ptr->slave_id, int_latched_clr, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_fg_adc_usr_irq_set_trigger(uint32 pmic_device, pm_fg_adc_usr_irq_type irq, pm_irq_trigger_type trigger)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ uint8 mask = 1 << irq;
+ pm_register_data_type set_type, polarity_high, polarity_low;
+ pm_register_address_type int_set_type, int_polarity_high, int_polarity_low;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_FG_ADC_USR_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ int_set_type = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_set_type;
+ int_polarity_high = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_polarity_high;
+ int_polarity_low = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_polarity_low;
+
+ switch (trigger)
+ {
+ case PM_IRQ_TRIGGER_ACTIVE_LOW:
+ set_type = 0x00;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_ACTIVE_HIGH:
+ set_type = 0x00;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_RISING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_FALLING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_DUAL_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0xFF;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ err_flag = pm_comm_write_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, int_set_type, mask, set_type, 0);
+ err_flag |= pm_comm_write_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, int_polarity_high, mask, polarity_high, 0);
+ err_flag |= pm_comm_write_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, int_polarity_low, mask, polarity_low, 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_fg_adc_usr_irq_status(uint32 pmic_device, pm_fg_adc_usr_irq_type irq, pm_irq_status_type type, boolean *status)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ uint8 mask = 1 << irq;
+ pm_register_address_type int_sts;
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_FG_ADC_USR_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ switch (type)
+ {
+ case PM_IRQ_STATUS_RT:
+ int_sts = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_rt_sts;
+ break;
+ case PM_IRQ_STATUS_LATCHED:
+ int_sts = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_latched_sts;
+ break;
+ case PM_IRQ_STATUS_PENDING:
+ int_sts = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->int_pending_sts;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+
+ err_flag = pm_comm_read_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, int_sts, mask, &data, 0);
+ *status = data ? TRUE : FALSE;
+ }
+
+ return err_flag;
+}
+
+
+
+/**
+* @brief This function enable/disables BMS Fule Gauge Algorithm BCL (battery current limiting s/w use) *
+* @details
+* This function enable/disables BMS Fule Gauge Algorithm BCL (battery current limiting s/w use)
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_enable_bcl_monitoring(uint32 pmic_device, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_bcl_monitoring = 0x00;
+ uint8 mask = 0x80;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_bcl_monitoring = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_en_ctl;
+ err_flag = pm_comm_write_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_bcl_monitoring, mask, (pm_register_data_type)(enable << 7), 0);
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns BMS Fule Gauge BCL (battery current limiting s/w use) *
+* @details
+* This function returns BMS Fule Gauge BCL (battery current limiting s/w use)
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]enable BCL monitoring sts
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_monitoring_sts(uint32 pmic_device, boolean *enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_bcl_monitoring = 0x00;
+ pm_register_data_type data = 0x00;
+ uint8 mask = 0x80;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_bcl_monitoring = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_en_ctl;
+ err_flag = pm_comm_read_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_bcl_monitoring, mask, &data, 0);
+ *enable = (boolean )data;
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns of status of adc_usrery parameter update request *
+* @details
+* This function returns of status of battery parameter update request (VBAT, IBAT, VBAT_CP, IBAT_CP, IBAT_MAX, IBAT_MAX_CP, VBAT_MIN, VBAT_MIN_CP)
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_access_bat_req_sts(uint32 pmic_device, boolean *enable)
+{
+
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_bat_req_sts = 0x00;
+ pm_register_data_type data = 0x00;
+ uint8 mask = 0x80;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_bat_req_sts = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_access_bat_req;
+ err_flag = pm_comm_read_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_bat_req_sts, mask, &data, 0);
+ *enable = (boolean )data;
+ }
+
+ return err_flag;
+
+}
+
+
+
+/**
+* @brief This function enable/disables the updates of VBAT, IBAT, VBAT_CP, IBAT_CP, IBAT_MAX, IBAT_MAX_CP, VBAT_MIN, VBAT_MIN_CP *
+* @details
+* This function enable/disables the updates of VBAT, IBAT, VBAT_CP, IBAT_CP, IBAT_MAX, IBAT_MAX_CP, VBAT_MIN, VBAT_MIN_CP
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_set_access_bat_req(uint32 pmic_device, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_bat_req_sts = 0x00;
+ uint8 mask = 0x80;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_bat_req_sts = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_access_bat_req;
+ err_flag = pm_comm_write_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_bat_req_sts, mask, (pm_register_data_type)enable, 0);
+ }
+
+ return err_flag;
+}
+
+
+/**
+* @brief This function returns the grant status of battery parameter update request *
+* @details
+* This function returns of status of battery parameter update request (VBAT, IBAT, VBAT_CP, IBAT_CP, IBAT_MAX, IBAT_MAX_CP, VBAT_MIN, VBAT_MIN_CP)
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_access_bat_grnt_sts(uint32 pmic_device, boolean *enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_bat_grnt_sts = 0x00;
+ pm_register_data_type data = 0x00;
+ uint8 mask = 0x80;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_bat_grnt_sts = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_access_bat_grnt;
+ err_flag = pm_comm_read_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_bat_grnt_sts, mask, &data, 0);
+ *enable = (boolean )data;
+ }
+
+ return err_flag;
+
+}
+
+
+
+/**
+* @brief This function returns status RDY bit after battery parameter update request is serviced *
+* @details
+* After the first readings from ADC are obtained, this bit is set to 1; At reset and shutdown, this bit gets automatically cleared
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable BCL monitoring
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_values(uint32 pmic_device, boolean *enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_bcl_values = 0x00;
+ pm_register_data_type data = 0x00;
+ uint8 mask = 0x80;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_bcl_values = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bcl_values;
+ err_flag = pm_comm_read_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_bcl_values, mask, &data, 0);
+ *enable = (boolean )data;
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns battery ADC Voltage *
+* @details
+* 8 bit signed partial ADC value, MSB = 0 is positive voltage (positive number), only positive voltages are captured, 1 LSB = 39 mV
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]vbat_adc Battery Voltage
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_vbat(uint32 pmic_device, uint32 *vbat_adc)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_vbat = 0x00;
+ pm_register_address_type fg_adc_usr_vbat_cp = 0x00;
+ pm_register_data_type data = 0x00;
+ pm_register_data_type data1 = 0x00;
+
+ int8 temp_data = 0;
+ int32 temp_data1 = 0;
+
+ //Compare data thrice in copy register and original register to make sure we have right data
+ uint32 total_count = 3;
+ uint32 count = 0;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ *vbat_adc = 0;
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_vbat = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_vbat;
+ fg_adc_usr_vbat_cp = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_vbat_cp;
+
+ do {
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_vbat, &data1, 0);
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_vbat_cp, &data, 0);
+
+ if(data == data1)
+ {
+ break;
+ }
+
+ if((total_count - 1) == count)
+ {
+ data = 0;
+ err_flag = PM_ERR_FLAG__INVALID;
+ }
+
+ count++;
+
+ }while ( count < total_count);
+
+ //Convert uint8 to int8
+ temp_data = data;
+
+ //Convert int8 to int32
+ temp_data1 = temp_data;
+
+ *vbat_adc = temp_data1 * RAW_VBAT_LSB;
+ }
+
+ return err_flag;
+}
+
+
+/**
+* @brief This function returns battery ADC Current *
+* @details
+* 8 bit signed partial ADC value, MSB = 0 is discharging current (positive number), only discharging currents are captured, 1 LSB = 39 mA
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]ibat_adc Battery Current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_ibat(uint32 pmic_device, int32 *ibat_adc)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_ibat = 0x00;
+ pm_register_address_type fg_adc_usr_ibat_cp = 0x00;
+ pm_register_data_type data = 0x00;
+ pm_register_data_type data1 = 0x00;
+
+ int8 temp_data = 0;
+ int32 temp_data1 = 0;
+
+ uint32 count = 0;
+ //Compare data thrice in copy register and original register to make sure we have right data
+ uint32 total_count = 3;
+
+ pm_fg_data_type *fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == ibat_adc)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ fg_adc_usr_ibat = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_ibat;
+ fg_adc_usr_ibat_cp = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_ibat_cp;
+
+ do
+ {
+ /*Read original register and copy register to make sure available data is reliable*/
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_ibat, &data1, 0);
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_ibat_cp, &data, 0);
+
+ if (data1 == data)
+ {
+ break;
+ }
+ if ((total_count - 1) == count)
+ {
+ err_flag = PM_ERR_FLAG__INVALID;
+ }
+ count++;
+
+ }
+ while (count < total_count);
+
+ //Convert uint8 to int8
+ temp_data = data;
+
+ //Convert int8 to int32
+ temp_data1 = temp_data;
+
+ *ibat_adc = temp_data1 * RAW_IBAT_LSB;
+ }
+
+ return err_flag;
+}
+
+
+/**
+* @brief This function returns minimum battery Voltage *
+* @details
+* Running Vbat Min stored and then cleared by SW
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]vbat_min Battery Minimum Voltage
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_vbat_min(uint32 pmic_device, uint8 *vbat_min)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_vbat_min = 0x00;
+ pm_register_data_type data = 0x00;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_vbat_min = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_vbat_min;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_vbat_min, &data, 0);
+ *vbat_min = data;
+ }
+
+ return err_flag;
+
+}
+
+/**
+* @brief This function returns max battery current *
+* @details
+* Running Ibat Min stored and then cleared by SW
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]ibat_max Battery Maximum Current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_ibat_max(uint32 pmic_device, uint8 *ibat_max)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_ibat_max = 0x00;
+ pm_register_data_type data = 0x00;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_ibat_max = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_ibat_max;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_ibat_max, &data, 0);
+ *ibat_max = (uint8)data;
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns copy of minimum battery Voltage *
+* @details
+* Running Vbat Min stored and then cleared by SW
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]vbat_min Battery Minimum Voltage
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_vbat_min_cp(uint32 pmic_device, uint8 *vbat_min_cp)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_vbat_min_cp = 0x00;
+ pm_register_data_type data = 0x00;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_vbat_min_cp = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_vbat_min_cp;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_vbat_min_cp, &data, 0);
+ *vbat_min_cp = (uint8)data;
+ }
+
+ return err_flag;
+
+}
+
+/**
+* @brief This function returns copy of max battery current *
+* @details
+* Running Ibat Min stored and then cleared by SW
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]ibat_max Battery Maximum Current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_ibat_max_cp(uint32 pmic_device, uint8 *ibat_max_cp)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_ibat_max_cp = 0x00;
+ pm_register_data_type data = 0x00;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_ibat_max_cp = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_ibat_max_cp;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_ibat_max_cp, &data, 0);
+ *ibat_max_cp = (uint8)data;
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns Battery Resitance in HALF encoding *
+* @details
+* HALF-FLOATING point encoding, 15:11 exp, bit 10 sign, 9:0 mantissa, 1=1 ohm, refer to MDOS for encoding info
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out]battResistance Battery Resistance
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_half_point_encoding(uint32 pmic_device, uint16 *battResistance)
+{
+
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type addr_msb;
+ pm_register_address_type addr_lsb;
+ pm_register_data_type data_0 = 0x00;
+ pm_register_data_type data_1 = 0x00;
+ uint16 battR = 0x0000;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ addr_lsb = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bat_res_7_0;
+ addr_msb = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bat_res_15_8;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, addr_lsb, &data_0, 0);
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, addr_msb, &data_1, 0);
+
+ battR = ((data_1 | battR) << 8) | (data_0 | battR);
+
+ *battResistance = battR;
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns BCL mode status *
+* @details
+* This function returns BCL mode status
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[out] bcl_mode BCL mode
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_mode(uint32 pmic_device, pm_fg_adc_usr_bcl_mode_sts *bcl_mode)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_bcl_values = 0x00;
+ pm_register_data_type data = 0x00;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_bcl_values = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bcl_values;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_bcl_values, &data, 0);
+ data = data >> 0x06;
+ *bcl_mode = (pm_fg_adc_usr_bcl_mode_sts)data;
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns votlage gain correction value for battery voltage *
+* @details
+* This function returns gain correction value for battery
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] gainCorrection for battery volatge
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_v_gain_batt(uint32 pmic_device, int32 *v_gain_correction)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_v_gain_batt = 0x00;
+ pm_register_data_type data = 0x00;
+
+ int8 temp_data = 0;
+ int32 temp_data1 = 0;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_v_gain_batt = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bcl_v_gain_batt;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_v_gain_batt, &data, 0);
+
+ //Convert uint8 to int8
+ temp_data = data;
+
+ //Convert int8 to int32
+ temp_data1 = temp_data;
+
+ *v_gain_correction = temp_data1;
+ }
+
+ return err_flag;
+
+}
+
+/**
+* @brief This function returns current Rsense gain correction value for Battery Current *
+* @details
+* This function returns current Rsense gain correction value for Battery Current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] gainCorrection for battery volatge
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_gain_rsense(uint32 pmic_device, int32 *i_gain_rsense)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_i_gain_rsense = 0x00;
+ pm_register_data_type data = 0x00;
+
+ int8 temp_data = 0;
+ int32 temp_data1 = 0;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);;
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_i_gain_rsense = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bcl_i_gain_rsense;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_i_gain_rsense, &data, 0);
+
+ //Convert uint8 to int8
+ temp_data = data;
+
+ //Convert int8 to int32
+ temp_data1 = temp_data;
+
+ *i_gain_rsense = temp_data1;
+ }
+
+ return err_flag;
+}
+
+
+
+/**
+* @brief This function returns current Rsense offset value for Battery Current *
+* @details
+* This function returns current Rsense offset value for Battery Current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] ioffset_rsense Offset Gain Correction battery current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_offset_rsense(uint32 pmic_device, int32 *i_offset_rsense)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_i_offset_rsense = 0x00;
+ pm_register_data_type data = 0x00;
+
+ int8 temp_data = 0;
+ int32 temp_data1 = 0;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_i_offset_rsense = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bcl_i_offset_rsense;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_i_offset_rsense, &data, 0);
+
+ //Convert uint8 to int8
+ temp_data = data;
+
+ //Convert int8 to int32
+ temp_data1 = temp_data;
+
+ *i_offset_rsense = (temp_data1 * OFFSET_LSB_NUM) / OFFSET_LSB_DENOM;
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns current gain in BATFET for Battery Current *
+* @details
+* This function returns current gain in BATFET for Battery Current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] igain_offset_correction Gain Correction for battery current
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_gain_batfet(uint32 pmic_device, int32 *i_gain_batfet)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_i_gain_batfet = 0x00;
+ pm_register_data_type data = 0x00;
+
+ int8 temp_data = 0;
+ int32 temp_data1 = 0;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_i_gain_batfet = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bcl_i_gain_batfet;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_i_gain_batfet, &data, 0);
+
+ //Convert uint8 to int8
+ temp_data = data;
+
+ //Convert int8 to int32
+ temp_data1 = temp_data;
+
+ *i_gain_batfet = temp_data1;
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+* @brief This function returns current offset in BATFET for Battery Current *
+* @details
+* This function returns current gain in BATFET for Battery Current
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] ioffset_batfet_correction offset Gain Correction for BATFET
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_offset_batfet(uint32 pmic_device, int32 *i_offset_batfet)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_i_offset_batfet = 0x00;
+ pm_register_data_type data = 0x00;
+
+ int8 temp_data = 0;
+ int32 temp_data1 = 0;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);;
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_i_offset_batfet = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bcl_i_offset_batfet;
+ err_flag = pm_comm_read_byte(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_i_offset_batfet, &data, 0);
+
+ //Convert uint8 to int8
+ temp_data = data;
+
+ //Convert int8 to int32
+ temp_data1 = temp_data;
+
+ *i_offset_batfet = ((temp_data1 * OFFSET_LSB_NUM) / OFFSET_LSB_DENOM);
+ }
+
+ return err_flag;
+}
+
+
+
+/**
+* @brief This function returns source used for current sense *
+* @details
+* This function returns source used for current sense
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in] isense_source source used for current sense
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_get_bcl_i_sense_source(uint32 pmic_device, boolean *i_sense_source)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_bcl_isense_source = 0x00;
+ pm_register_data_type data = 0x00;
+ uint8 mask = 0x01;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_bcl_isense_source = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_bcl_i_sense_source;
+ err_flag = pm_comm_read_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_bcl_isense_source, mask, &data, 0);
+ *i_sense_source = (boolean )data;
+ }
+
+ return err_flag;
+}
+
+
+/**
+* @brief This function cleras stored VBAT minimum *
+* @details
+* This function cleras stored VBAT minimum
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable for clearing stored vbat minimum
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_clear_vbat_min(uint32 pmic_device, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_clr_vbat_min = 0x00;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_clr_vbat_min = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_vbat_min_clr;
+ err_flag = pm_comm_write_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_clr_vbat_min, 0x80, (pm_register_data_type)enable, 0);
+ }
+
+ return err_flag;
+
+}
+
+/**
+* @brief This function clears stored IBAT Max *
+* @details
+* This function cleras stored IBAT Max
+*
+* @param[in] pmic_device_index. Primary: 0 Secondary: 1
+* @param[in]enable enable/disable for clearing stored vbat minimum
+*
+* @return pm_err_flag_type
+* PM_ERR_FLAG__FEATURE_NOT_SUPPORTED = Feature not available on this
+* version of the PMIC.
+* PM_ERR_FLAG__SUCCESS = SUCCESS.
+*
+*/
+pm_err_flag_type pm_fg_adc_usr_clear_ibat_max(uint32 pmic_device, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type fg_adc_usr_clr_ibat_min = 0x00;
+
+ pm_fg_data_type* fg_adc_usr_ptr = pm_fg_get_data(pmic_device);
+
+ if (NULL == fg_adc_usr_ptr)
+ {
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ fg_adc_usr_clr_ibat_min = fg_adc_usr_ptr->fg_register->adc_usr_register->base_address + fg_adc_usr_ptr->fg_register->adc_usr_register->fg_adc_usr_ibat_max_clr;
+ err_flag = pm_comm_write_byte_mask(fg_adc_usr_ptr->comm_ptr->slave_id, fg_adc_usr_clr_ibat_min, 0x80, (pm_register_data_type)enable, 0);
+ }
+
+ return err_flag;
+
+}
+
+
+/**
+PmicFgCalibrateIbat()
+
+@brief
+
+*/
+pm_err_flag_type pm_fg_adc_usr_get_calibrated_ibat(uint32 pmic_device, int32 *calibrated_ibat)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+
+ int32 raw_ibat = 0;
+ static int32 gain = 0;
+ static int32 offset = 0;
+
+ boolean sense_source = FALSE;
+
+ *calibrated_ibat = 0;
+
+ errFlag |= pm_fg_adc_usr_get_ibat(pmic_device, &raw_ibat);
+
+ if((!gain) || (!offset))
+ {//gain and offset are constant per part, so we should read them only once
+ errFlag |= pm_fg_adc_usr_get_bcl_i_sense_source( pmic_device, &sense_source);
+
+ if(sense_source)
+ {// 1 -> pick rsense correction
+ errFlag |= pm_fg_adc_usr_get_bcl_i_gain_rsense( pmic_device, &gain );
+ errFlag |= pm_fg_adc_usr_get_bcl_i_offset_rsense( pmic_device, &offset );
+ }
+ else
+ {// 0 -> pick batfet correction
+ errFlag |= pm_fg_adc_usr_get_bcl_i_gain_batfet( pmic_device, &gain );
+ errFlag |= pm_fg_adc_usr_get_bcl_i_offset_batfet( pmic_device, &offset );
+ }
+ }
+
+ *calibrated_ibat = (((raw_ibat + offset) * (GAIN_LSB_DENOM + gain ))/ GAIN_LSB_DENOM);
+
+ return errFlag;
+}
+
+pm_err_flag_type pm_fg_adc_usr_get_calibrated_vbat(uint32 pmic_device, uint32 *calibrated_vbat)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+
+ uint32 raw_vbat = 0;
+ static int32 gain = 0;
+
+ errFlag = pm_fg_adc_usr_get_vbat(pmic_device, &raw_vbat);
+
+ if(!gain)
+ {//Gain is constant w.r.t to every part, so we should read it only once.
+ errFlag |= pm_fg_adc_usr_get_bcl_v_gain_batt( pmic_device, &gain );
+ }
+
+ /* Applying gain calibration to the raw value*/
+ // Twos_complement(VBAT_registerval) *39 * (1+ Twos_Complement(V_GAIN_registerval) * (.32/128))
+ *calibrated_vbat = (uint32)(((raw_vbat * (GAIN_LSB_DENOM + gain)))/GAIN_LSB_DENOM);
+
+ return errFlag;
+}
+
diff --git a/dev/pmic/pmi8994/pm_fg_driver.c b/dev/pmic/pmi8994/pm_fg_driver.c
new file mode 100644
index 0000000..436e19d
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_fg_driver.c
@@ -0,0 +1,74 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "pm_fg_driver.h"
+
+/*===========================================================================
+
+ STATIC VARIABLES
+
+===========================================================================*/
+
+/* Static global variable to store the FG driver data */
+
+pm_fg_data_type fg_data[PM_MAX_NUM_PMICS];
+fg_adc_usr_register_ds fg_adc_usr_reg[1] =
+ { /* FG base address and offsets */
+ {0x4200, 0x0 ,0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,\
+ 0x18, 0x19, 0x1A, 0x1B, 0x46, 0x50, 0x51, 0x53, \
+ 0xD0, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, \
+ 0x5C, 0x5D, 0x5E, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, \
+ 0x66, 0x67, 0x68, 0x69},
+ };
+/* Fill in slave id, pmic index and comm type (comm type is unused) */
+pm_comm_info_type comm[1] = {{2, 1, 0},};
+/* We use only adc user register others are not needed */
+fg_register_ds fg_reg[1] = { {NULL, NULL, NULL, &fg_adc_usr_reg[0]}, };
+
+/*===========================================================================
+
+ FUNCTION DEFINITIONS
+
+===========================================================================*/
+/* Initialize FG driver and data structure */
+void pm_fg_driver_init(uint32_t device_index)
+{
+ fg_data[device_index].comm_ptr = &comm[0];
+ fg_data[device_index].fg_register = &fg_reg[0];
+ fg_data[device_index].num_of_peripherals = 0x0;
+}
+
+pm_fg_data_type* pm_fg_get_data(uint32 pmic_index)
+{
+ if(pmic_index <PM_MAX_NUM_PMICS)
+ {
+ return &fg_data[pmic_index];
+ }
+
+ return NULL;
+}
diff --git a/dev/pmic/pmi8994/pm_smbchg_bat_if.c b/dev/pmic/pmi8994/pm_smbchg_bat_if.c
new file mode 100644
index 0000000..5e8253a
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_smbchg_bat_if.c
@@ -0,0 +1,763 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+
+#include "pm_smbchg_bat_if.h"
+#include "pm_smbchg_driver.h"
+#include <debug.h>
+#include <sys/types.h>
+
+/*Find the nearest register value corresponding to input_data*/
+static void pm_smbchg_bat_if_return_reg_value(uint32 input_data, uint32 *array, uint32 array_size, pm_register_data_type *reg_value);
+
+/*writes to secured acess register to unlock pmic write operation*/
+static inline pm_err_flag_type pm_smbchg_bat_if_unlock_perph_write(pm_smbchg_data_type *smbchg);
+
+/*Returns battery presence status*/
+pm_err_flag_type pm_smbchg_bat_if_get_bat_pres_status(uint32 device_index, boolean *bat_present)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == bat_present)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type bat_pres_status = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->bat_pres_status;
+ errFlag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, bat_pres_status, 0x80, &data, 0);
+ *bat_present = (data) ? TRUE : FALSE;
+ }
+
+ return errFlag;
+}
+
+/*This API clears the dead battery timer*/
+pm_err_flag_type pm_smbchg_bat_if_clear_dead_bat_timer(uint32 device_index)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type clr_dead_bat_timer = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->clr_dead_bat_timer;
+
+ errFlag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, clr_dead_bat_timer, 0x1, 0x1, 0);
+ }
+
+ return errFlag;
+}
+
+/*writes to battery interface command control to enable/disable wireless charging, thermal current override, stat output, fast charge, battery charging, OTG */
+pm_err_flag_type pm_smbchg_bat_if_config_chg_cmd(uint32 device_index, pm_smbchg_bat_if_cmd_chg_type cmd_chg_cfg, boolean enable)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_BAT_IF_CMD__INVALID == cmd_chg_cfg)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type cmd_chg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->cmd_chg;
+
+ errFlag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, cmd_chg, (0x1<<cmd_chg_cfg), (pm_register_data_type)(enable<<cmd_chg_cfg), 0);
+ }
+
+ return errFlag;
+}
+
+
+/*reads battery interface command control settings for enable/disable wireless charging, thermal current override, stat output, fast charge, battery charging, OTG */
+pm_err_flag_type pm_smbchg_bat_if_get_chg_cmd(uint32 device_index, pm_smbchg_bat_if_cmd_chg_type cmd_chg_cfg, boolean *enable)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+ pm_register_address_type cmd_chg;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_BAT_IF_CMD__INVALID == cmd_chg_cfg)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (NULL == enable)
+ {
+ errFlag = PM_ERR_FLAG__PAR3_OUT_OF_RANGE;
+ }
+ else
+ {
+ cmd_chg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->cmd_chg;
+ errFlag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, cmd_chg, &data, 0);
+
+ *enable = (data & (0x1<<cmd_chg_cfg)) ? TRUE : FALSE;
+ }
+
+ return errFlag;
+}
+
+/*Sets low battery voltag threshold*/
+pm_err_flag_type pm_smbchg_bat_if_set_low_batt_volt_threshold(uint32 device_index, pm_smbchg_bat_if_low_bat_thresh_type low_bat_threshold)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type vbl_cfg;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (low_bat_threshold >= PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ vbl_cfg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->vbl_cfg;
+ errFlag = pm_smbchg_bat_if_unlock_perph_write(smbchg_ptr);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, vbl_cfg, 0xF, (pm_register_data_type)low_bat_threshold, 0);
+ }
+ return errFlag;
+}
+
+/*Gets low battery voltag threshold*/
+pm_err_flag_type pm_smbchg_bat_if_get_low_bat_volt_threshold(uint32 device_index, pm_smbchg_bat_if_low_bat_thresh_type *low_bat_threshold)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_register_address_type vbl_cfg;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == low_bat_threshold)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ vbl_cfg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->vbl_cfg;
+ errFlag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, vbl_cfg, 0xF, &data, 0);
+ *low_bat_threshold = (pm_smbchg_bat_if_low_bat_thresh_type)data;
+ }
+
+ return errFlag;
+}
+
+/* This API sets battery missing detection configuration like select if the battery missing monitoring should only happen at the beginning of a charge cycle or every 3 seconds */
+pm_err_flag_type pm_smbchg_bat_if_set_bat_missing_cfg(uint32 device_index, pm_smbchg_bat_if_batt_missing_cfg_type *batt_missing_cfg)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_register_address_type bm_cfg;
+ uint32 time_pos = 0;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == batt_missing_cfg)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ uint32 *batt_missing_detect_time = smbchg_ptr->chg_range_data->batt_missing_detect_time;
+ bm_cfg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->bm_cfg;
+
+ /*Find the nearest register value corresponding to time*/
+ while (time_pos < BATT_MISSING_SIZE)
+ {
+ if (batt_missing_cfg->batt_removal_det_time_usec < batt_missing_detect_time[time_pos])
+ {
+ break;
+ }
+ else
+ {
+ time_pos++;
+ }
+ }
+ batt_missing_cfg->batt_removal_det_time_usec = (time_pos) ? (time_pos - 1) : 0;
+
+ data = (batt_missing_cfg->batt_removal_det_time_usec << 6) | (batt_missing_cfg->batt_bat_get_override_en << 5) | (batt_missing_cfg->batt_missing_input_plugin_en << 4)
+ | (batt_missing_cfg->batt_missing_2p6s_poller_en << 3) | (batt_missing_cfg->batt_missing_algo_en << 2) | (batt_missing_cfg->use_therm_pin_for_batt_missing_src << 1)
+ | batt_missing_cfg->use_bmd_pin_for_batt_missing_src;
+
+ errFlag = pm_smbchg_bat_if_unlock_perph_write(smbchg_ptr);
+ errFlag |= pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, bm_cfg, data, 0);
+ }
+
+ return errFlag;
+}
+
+
+/*This API reads the battery missing configuration settings*/
+pm_err_flag_type pm_smbchg_bat_if_get_bat_missing_cfg(uint32 device_index, pm_smbchg_bat_if_batt_missing_cfg_type *batt_missing_cfg)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+ pm_register_address_type bm_cfg;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == batt_missing_cfg)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ uint32 *batt_missing_detect_time = smbchg_ptr->chg_range_data->batt_missing_detect_time;
+ bm_cfg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->bm_cfg;
+
+ errFlag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, bm_cfg, &data, 0);
+
+ batt_missing_cfg->batt_removal_det_time_usec = batt_missing_detect_time[(data >> 6)];
+ batt_missing_cfg->batt_bat_get_override_en = (data & 0x20) ? TRUE : FALSE;
+ batt_missing_cfg->batt_missing_input_plugin_en = (data & 0x10) ? TRUE : FALSE;
+ batt_missing_cfg->batt_missing_2p6s_poller_en = (data & 0x8) ? TRUE : FALSE;
+ batt_missing_cfg->batt_missing_algo_en = (data & 0x4) ? TRUE : FALSE;
+ batt_missing_cfg->use_therm_pin_for_batt_missing_src = (data & 0x2) ? TRUE : FALSE;
+ batt_missing_cfg->use_bmd_pin_for_batt_missing_src = (data & 0x1) ? TRUE : FALSE;
+ }
+ return errFlag;
+}
+
+
+
+
+pm_err_flag_type pm_smbchg_bat_if_set_bat_missing_detection_src(uint32 device_index, pm_smbchg_bat_miss_detect_src_type batt_missing_det_src)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_bat_if_batt_missing_cfg_type batt_missing_cfg;
+
+ if (batt_missing_det_src >= PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ //Get the current configuration
+ err_flag = pm_smbchg_bat_if_get_bat_missing_cfg(device_index, &batt_missing_cfg);
+
+ if (err_flag == PM_ERR_FLAG__SUCCESS)
+ {
+ //Change needed bits and write it back
+ switch (batt_missing_det_src)
+ {
+ case PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_THERM_PIN:
+ batt_missing_cfg.use_bmd_pin_for_batt_missing_src = 0;
+ batt_missing_cfg.use_therm_pin_for_batt_missing_src = 1;
+ break;
+ case PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_BMD_PIN:
+ batt_missing_cfg.use_bmd_pin_for_batt_missing_src = 1;
+ batt_missing_cfg.use_therm_pin_for_batt_missing_src = 0;
+ break;
+ case PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_THERM_BMD_PIN:
+ batt_missing_cfg.use_bmd_pin_for_batt_missing_src = 1;
+ batt_missing_cfg.use_therm_pin_for_batt_missing_src = 1;
+ break;
+ case PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_NONE:
+ batt_missing_cfg.use_bmd_pin_for_batt_missing_src = 0;
+ batt_missing_cfg.use_therm_pin_for_batt_missing_src = 0;
+ break;
+ default:
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ break;
+ }
+ err_flag |= pm_smbchg_bat_if_set_bat_missing_cfg(device_index, &batt_missing_cfg);
+ }
+ }
+ return err_flag;
+}
+
+
+/*This API sets the minimum system voltage. And below this voltage system and battery are not connected together.Valid values are 315, 345 and 360 milli volt*/
+pm_err_flag_type pm_smbchg_bat_if_set_min_sys_volt(uint32 device_index, uint32 min_sys_millivolt)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ if (min_sys_millivolt < 345)
+ {
+ data = 0;
+ }
+ else if (min_sys_millivolt < 360)
+ {
+ data = 1;
+ }
+ else
+ {
+ data = 0x2;
+ }
+ pm_register_address_type cfg_sysmin = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->cfg_sysmin;
+
+ errFlag = pm_smbchg_bat_if_unlock_perph_write(smbchg_ptr);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg_sysmin, 0x3, data, 0);
+ }
+
+ return errFlag;
+}
+
+/*This API reads the configured minimum system voltage */
+pm_err_flag_type pm_smbchg_bat_if_get_min_sys_volt(uint32 device_index, uint32 *min_sys_millivolt)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == min_sys_millivolt)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type cfg_sysmin = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->cfg_sysmin;
+ errFlag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, cfg_sysmin, &data, 0);
+ switch (data & 0x03)
+ {
+ case 0x00:
+ *min_sys_millivolt = 315;
+ break;
+ case 0x01:
+ *min_sys_millivolt = 354;
+ default:
+ *min_sys_millivolt = 360;
+ }
+ }
+
+ return errFlag;
+}
+
+/*This API configures the current limit for pass through mode, low volt mode and high volt mode in milliamp*/
+pm_err_flag_type pm_smbchg_bat_if_set_dcin_input_current_limit(uint32 device_index, pm_smbchg_bat_if_dcin_icl_type dcin_icl_type, uint32 current_ma)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+ pm_register_address_type reg;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (dcin_icl_type >= PM_SMBCHG_BAT_IF_DCIN_INVALID_MODE)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ uint32 *current_limits = smbchg_ptr->chg_range_data->dcin_current_limits;
+
+ switch (dcin_icl_type)
+ {
+ case PM_SMBCHG_BAT_IF_DCIN_PASS_THROUGH_MODE:
+ reg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->zin_icl_pt;
+ break;
+ case PM_SMBCHG_BAT_IF_DCIN_LOW_VOLT_MODE:
+ reg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->zin_icl_lv;
+ break;
+ case PM_SMBCHG_BAT_IF_DCIN_HIGH_VOLT_MODE:
+ reg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->zin_icl_hv;
+ break;
+ default:
+ return PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+
+ pm_smbchg_bat_if_return_reg_value(current_ma, current_limits, DCIN_SIZE, &data);
+ errFlag |= pm_smbchg_bat_if_unlock_perph_write(smbchg_ptr);
+ errFlag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, reg, 0x1F, data, 0);
+ }
+
+ return errFlag;
+}
+
+/*This API reads the configured current limit for pass through mode, low volt mode and high volt mode in milliamp*/
+pm_err_flag_type pm_smbchg_bat_if_get_dcin_input_current_limit(uint32 device_index, pm_smbchg_bat_if_dcin_icl_type dcin_icl_type, uint32 *current_ma)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+ pm_register_address_type reg;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (dcin_icl_type >= PM_SMBCHG_BAT_IF_DCIN_INVALID_MODE)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (NULL == current_ma)
+ {
+ errFlag = PM_ERR_FLAG__PAR3_OUT_OF_RANGE;
+ }
+ else
+ {
+ uint32 *current_limits = smbchg_ptr->chg_range_data->dcin_current_limits;
+
+ switch (dcin_icl_type)
+ {
+ case PM_SMBCHG_BAT_IF_DCIN_PASS_THROUGH_MODE:
+ reg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->zin_icl_pt;
+ break;
+ case PM_SMBCHG_BAT_IF_DCIN_LOW_VOLT_MODE:
+ reg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->zin_icl_lv;
+ break;
+ case PM_SMBCHG_BAT_IF_DCIN_HIGH_VOLT_MODE:
+ reg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->zin_icl_hv;
+ break;
+ default:
+ return PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+
+ errFlag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, reg, 0x1F, &data, 0);
+ if (DCIN_SIZE <= data)
+ {
+ errFlag |= PM_ERR_FLAG__INVALID;
+ }
+ else
+ {
+ *current_ma = current_limits[data];
+ }
+ }
+
+ return errFlag;
+}
+
+///////////////////////////////
+/*This API configures WI PWR timer. div2 falling edge values: 0, 150, 250, 500 usec. wipwr_irq_tmr_us values 1000, 1500,2000,2500,3000,4000,4500 usec*/
+///////////////////////////////
+pm_err_flag_type pm_smbchg_bat_if_set_wi_pwr_tmr(uint32 device_index, uint32 div2_falling_edge_time_us, uint32 wipwr_irq_tmr_us)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_data_type wi_pwr_tmr = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->wi_pwr_tmr;
+
+ /*div2_falling_edge_time_us: 0 - 0, 1 - 150, 2 - 250, 3 - 500 us*/
+ div2_falling_edge_time_us = (div2_falling_edge_time_us > 250) ? 0x3 : ((div2_falling_edge_time_us - 50) / 100);
+
+ /*wipwr_irq_tmr_us: 0 - 1000, 1 - 1500, 2 - 2000, 3 - 2500, 4 - 3000, 5 - 3500, 6 -4000, 7 - 4500 us*/
+ wipwr_irq_tmr_us = (wipwr_irq_tmr_us > 4500) ? 5 : (wipwr_irq_tmr_us - 1000) / 500;
+
+ data = (div2_falling_edge_time_us << 4) | wipwr_irq_tmr_us;
+ errFlag = pm_smbchg_bat_if_unlock_perph_write(smbchg_ptr);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, wi_pwr_tmr, 0x3F, data, 0);
+ }
+
+ return errFlag;
+}
+
+/*This API reads the WIPWR timer settings*/
+pm_err_flag_type pm_smbchg_bat_if_get_wi_pwr_tmr(uint32 device_index, uint32 *div2_falling_edge_time_us, uint32 *wipwr_irq_tmr_us)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == div2_falling_edge_time_us)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (NULL == wipwr_irq_tmr_us)
+ {
+ errFlag = PM_ERR_FLAG__PAR3_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_data_type wi_pwr_tmr = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->wi_pwr_tmr;
+
+ errFlag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, wi_pwr_tmr, &data, 0);
+ /*div2_falling_edge_time_us: 0 - 0, 1 - 150, 2 - 250, 3 - 500 us*/
+ *div2_falling_edge_time_us = ((data & 0x30) == 0x30) ? 500 : (((data & 0x30) >> 4) * 100 + 2);
+
+ /*wipwr_irq_tmr_us: 0 - 1000, 1 - 1500, 2 - 2000, 3 - 2500, 4 - 3000, 5 - 3500, 6 -4000, 7 - 4500 us*/
+ *wipwr_irq_tmr_us = (data & 0x7) * 500 + 1000;
+ }
+
+ return errFlag;
+}
+
+
+pm_err_flag_type pm_smbchg_bat_if_irq_enable(uint32 device_index, pm_smbchg_bat_if_irq_type irq, boolean enable)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type irq_reg;
+ pm_register_data_type data = 1 << irq;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_BAT_IF_IRQ_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ if (enable)
+ {
+ irq_reg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_en_set;
+ }
+ else
+ {
+ irq_reg = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_en_clr;
+ }
+
+ errFlag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, irq_reg, data, 0);
+ }
+ return errFlag;
+}
+
+pm_err_flag_type pm_smbchg_bat_if_irq_clear(uint32 device_index, pm_smbchg_bat_if_irq_type irq)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 1 << irq;
+ pm_register_address_type int_latched_clr;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_BAT_IF_IRQ_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ int_latched_clr = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_latched_clr;
+ errFlag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, int_latched_clr, data, 0);
+ }
+
+ return errFlag;
+}
+
+
+pm_err_flag_type pm_smbchg_bat_if_irq_set_trigger(uint32 device_index, pm_smbchg_bat_if_irq_type irq, pm_irq_trigger_type trigger)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ uint8 mask = 1 << irq;
+ pm_register_data_type set_type, polarity_high, polarity_low;
+ pm_register_address_type int_set_type, int_polarity_high, int_polarity_low;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_BAT_IF_IRQ_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ int_set_type = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_set_type;
+ int_polarity_high = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_polarity_high;
+ int_polarity_low = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_polarity_low;
+
+ switch (trigger)
+ {
+ case PM_IRQ_TRIGGER_ACTIVE_LOW:
+ set_type = 0x00;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_ACTIVE_HIGH:
+ set_type = 0x00;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_RISING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_FALLING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_DUAL_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0xFF;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ errFlag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_set_type, mask, set_type, 0);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_high, mask, polarity_high, 0);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_low, mask, polarity_low, 0);
+ }
+
+ return errFlag;
+}
+
+
+pm_err_flag_type pm_smbchg_bat_if_irq_status(uint32 device_index, pm_smbchg_bat_if_irq_type irq, pm_irq_status_type type, boolean *status)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ uint8 mask = 1 << irq;
+ pm_register_address_type int_sts;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_BAT_IF_IRQ_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ switch (type)
+ {
+ case PM_IRQ_STATUS_RT:
+ int_sts = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_rt_sts;
+ break;
+ case PM_IRQ_STATUS_LATCHED:
+ int_sts = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_latched_sts;
+ break;
+ case PM_IRQ_STATUS_PENDING:
+ int_sts = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->int_pending_sts;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+
+ errFlag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_sts, mask, &data, 0);
+ *status = data ? TRUE : FALSE;
+ }
+
+ return errFlag;
+}
+
+/*Find the nearest register value corresponding to input_data*/
+static void pm_smbchg_bat_if_return_reg_value(uint32 input_data, uint32 *array, uint32 array_size, pm_register_data_type *reg_value)
+{
+ uint32 loc = 0;
+
+ while (loc < array_size)
+ {
+ if (input_data < array[loc])
+ {
+ break;
+ }
+ else
+ {
+ loc++;
+ }
+ }
+
+ *reg_value = (loc) ? (loc - 1) : 0;
+
+ return;
+}
+
+
+static inline pm_err_flag_type pm_smbchg_bat_if_unlock_perph_write(pm_smbchg_data_type *smbchg_ptr)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type sec_access = smbchg_ptr->smbchg_register->bat_if_register->base_address + smbchg_ptr->smbchg_register->bat_if_register->sec_access;
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, sec_access, 0xA5, 0);
+ }
+
+ return err_flag;
+}
+
diff --git a/dev/pmic/pmi8994/pm_smbchg_chgr.c b/dev/pmic/pmi8994/pm_smbchg_chgr.c
new file mode 100644
index 0000000..2179772
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_smbchg_chgr.c
@@ -0,0 +1,1091 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+#include "pm_smbchg_chgr.h"
+#include "pm_smbchg_driver.h"
+#include <sys/types.h>
+
+static inline pm_err_flag_type pm_smbchg_chgr_unlock_perph_write(pm_smbchg_data_type *smbchg);
+
+
+/*Find the nearest register value corresponding to input_data*/
+//static void pm_smbchg_chgr_return_reg_value(uint32 input_data, uint32 *array, uint32 array_size, pm_register_data_type *reg_value)
+//{
+// uint32 position = 0;
+//
+// while (position < array_size)
+// {
+// if (input_data < array[position])
+// {
+// break;
+// }
+// else
+// {
+// position++;
+// }
+// }
+//
+// *reg_value = (position) ? (position - 1) : 0;
+//
+// return;
+//}
+
+//@todo: implement pm_smbchg_chgr_chg_option
+
+/*This API returns if battery is above VBAT_WEAK threshold or not*/
+pm_err_flag_type pm_smbchg_chgr_vbat_sts(uint32 device_index, boolean *is_above_vbat_weak)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == is_above_vbat_weak)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type vbat_status = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->vbat_status;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, vbat_status, &data, 0);
+
+ if (PM_ERR_FLAG__SUCCESS == err_flag)
+ {
+ *is_above_vbat_weak = (data & 0x2) ? TRUE : FALSE;
+ }
+ }
+
+ return err_flag;
+}
+
+//This API returns the float vlotage status
+pm_err_flag_type pm_smbchg_chgr_get_float_volt_sts(uint32 device_index, boolean *aicl_in_hard_limit, uint32 *fv_mv)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ uint32 temp_data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == fv_mv)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type fv_sts = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->fv_sts;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, fv_sts, &data, 0);
+
+ if (PM_ERR_FLAG__SUCCESS == err_flag)
+ {
+ *aicl_in_hard_limit = (data & 0x40) ? TRUE : FALSE;
+ temp_data = data & 0x3F;
+ if (temp_data < 0x5)
+ {
+ temp_data = 3600;
+ }
+ if (temp_data >= 0x22)
+ {
+ temp_data = 4500;
+ }
+ else
+ {
+ temp_data = (temp_data > 0x2D) ? (3620 + ((temp_data - 0x5) * 20)) : (3600 + ((temp_data - 0x5) * 20));
+ }
+
+ *fv_mv = temp_data;
+ }
+ }
+
+ return err_flag;
+}
+
+/*This API returns the pre charger and fast charger current status in milliamp*/
+pm_err_flag_type pm_smbchg_chgr_get_chg_i_sts(uint32 device_index, uint32 *pre_charge_current_ma, uint32 *fast_charge_current_ma)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == fast_charge_current_ma)
+ {
+ err_flag = PM_ERR_FLAG__PAR3_OUT_OF_RANGE;
+ }
+ else
+ {
+ uint32 *charge_current = smbchg_ptr->chg_range_data->usbin_current_limits;
+ if ( NULL == charge_current)
+ {
+ err_flag |= PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ pm_register_address_type ichg_sts = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->ichg_sts;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, ichg_sts, &data, 0);
+
+ if (PM_ERR_FLAG__SUCCESS == err_flag)
+ {
+ *pre_charge_current_ma = ((data >> 5) & 0x04) ? 550 : (100 + ((data >> 5) * 50));
+
+ *fast_charge_current_ma = charge_current[data & 0x1F];
+ }
+ }
+
+ return err_flag;
+}
+
+/*This API reads the various charging status*/
+pm_err_flag_type pm_smbchg_chgr_get_chgr_sts(uint32 device_index, pm_smbchg_chgr_chgr_status_type *chgr_sts)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_register_address_type chgr_sts_reg;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == chgr_sts)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ chgr_sts_reg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->chgr_sts;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, chgr_sts_reg, &data, 0);
+
+ if (PM_ERR_FLAG__SUCCESS == err_flag)
+ {
+ chgr_sts->is_net_i_discharg = (data & 0x80) ? TRUE : FALSE;
+ chgr_sts->is_auto_fv_comp_active = (data & 0x40) ? TRUE : FALSE;
+ chgr_sts->is_chgr_done_once = (data & 0x20) ? TRUE : FALSE;
+ chgr_sts->is_batt_lt_2v = (data & 0x10) ? TRUE : FALSE;
+ chgr_sts->is_chgr_in_hold_off = (data & 0x8) ? TRUE : FALSE;
+ chgr_sts->charging_type = (pm_smbchg_chgr_charging_type)((data & 0x6) >> 1);
+ chgr_sts->charger_enable = (data & 0x1) ? TRUE : FALSE;
+ }
+ }
+
+ return err_flag;
+}
+
+/*This API configures the pre-charger current value in milliamp. Valid values are 100 to 550 mAmp*/
+pm_err_flag_type pm_smbchg_chgr_set_pre_chg_i(uint32 device_index, uint32 pre_chg_i_ma)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_register_address_type pcc_cfg;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pcc_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->pcc_cfg;
+
+ pre_chg_i_ma = (pre_chg_i_ma<100)? 100 : pre_chg_i_ma;
+
+ data = (pre_chg_i_ma > 250) ? 0x4 : ((pre_chg_i_ma - 100) / 50);
+
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, pcc_cfg, 0x7, data, 0);
+ }
+
+ return err_flag;
+}
+
+/*This API configures the fast-charger current value in milliamp. Valid values are 300 to 3000 mAmp*/
+pm_err_flag_type pm_smbchg_chgr_set_fast_chg_i(uint32 device_index, uint32 fast_chag_i_ma)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ uint32 *charge_current = smbchg_ptr->chg_range_data->usbin_current_limits;
+ pm_register_address_type fcc_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->fcc_cfg;
+
+ while (data < USBIN_SIZE)
+ {
+ if (charge_current[data] > fast_chag_i_ma)
+ {
+ break;
+ }
+ else
+ {
+ data++;
+ }
+ }
+
+ data = (data < USBIN_SIZE) ? (data - 1) : 0;
+
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, fcc_cfg, 0x1F, data, 0);
+ }
+
+ return err_flag;
+}
+
+/*This API configures the fast-charger current compensation value in milliamp. Valid values are 300 to 1200 mAmp*/
+pm_err_flag_type pm_smbchg_chgr_set_fast_chg_i_cmpn(uint32 device_index, uint32 fast_chg_i_cmp_ma)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type fcc_cmp_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->fcc_cmp_cfg;
+
+ if (fast_chg_i_cmp_ma < 700)
+ {
+ data = 0x00;
+ }
+ else if (fast_chg_i_cmp_ma < 900)
+ {
+ data = 0x01;
+ }
+ else if (fast_chg_i_cmp_ma < 1200)
+ {
+ data = 0x02;
+ }
+ else
+ {
+ data = 0x03;
+ }
+
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, fcc_cmp_cfg, 0x3, data, 0);
+ }
+
+ return err_flag;
+}
+
+/*This API configures the floating voltage. Valid range is 3600mV to 4500 mv*/
+pm_err_flag_type pm_smbchg_chgr_set_float_volt(uint32 device_index, uint32 float_volt_mv)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type fv_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->fv_cfg;
+
+ if (float_volt_mv < 3600)
+ {
+ data = 0x5;
+ }
+ else if (float_volt_mv > 4500)
+ {
+ data = 0x33;
+ }
+ else
+ {
+ data = ((float_volt_mv - 3600) / 20) + 5;
+ }
+
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, fv_cfg, 0x3F, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_chgr_get_float_volt_cfg(uint32 device_index, uint32 *float_volt_mv)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == float_volt_mv)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type fv_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->fv_cfg;
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, fv_cfg, 0x3F, &data, 0);
+ *float_volt_mv = (data > 0x5) ? 0x00 : (3600 + ((data - 0x5) * 20));
+ }
+
+ return err_flag;
+}
+
+/*This api sets floating voltage conpmensation code. Valid value is from 0 to 6300 mV*/
+pm_err_flag_type pm_smbchg_chgr_set_float_volt_cmpn(uint32 device_index, uint32 float_volt_cmpn)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type fv_cmp_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->fv_cmp_cfg;
+
+ data = (float_volt_cmpn > 6300) ? 63 : float_volt_cmpn/100;
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, fv_cmp_cfg, 0x3F, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+/*This api reads floating voltage conpmensation code settings. Valid value is from 0 to 63*/
+pm_err_flag_type pm_smbchg_chgr_get_float_volt_cmpn(uint32 device_index, uint32 *float_volt_cmpn)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == float_volt_cmpn)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type fv_cmp_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->fv_cmp_cfg;
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, fv_cmp_cfg, 0x3F, &data, 0);
+ *float_volt_cmpn = data * 10;
+ }
+
+ return err_flag;
+}
+
+/*This api enables/disables Charger Auto Float Voltage Compensation*/
+pm_err_flag_type pm_smbchg_chgr_en_afvc(uint32 device_index, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type cfg_afvc = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->cfg_afvc;
+ data = (enable) ? TRUE : FALSE;
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg_afvc, 0x7, data, 0);
+ }
+
+ return err_flag;
+}
+
+/*This API sets charge inhibit level*/
+pm_err_flag_type pm_smbchg_chgr_set_inhibi_threshold(uint32 device_index, uint32 inhibit_lvl_mv)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ if (inhibit_lvl_mv < 100)
+ {
+ data = 0x00;
+ }
+ else if (inhibit_lvl_mv < 200)
+ {
+ data = 0x1;
+ }
+ else if (inhibit_lvl_mv < 300)
+ {
+ data = 0x2;
+ }
+ else
+ {
+ data = 0x3;
+ }
+
+ pm_register_address_type cfg_chg_inhib = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->cfg_chg_inhib;
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg_chg_inhib, 0x3, data, 0);
+ }
+
+ return err_flag;
+}
+
+/*This API reads charge inhibit level configured*/
+pm_err_flag_type pm_smbchg_chgr_get_inhibi_threshold(uint32 device_index, uint32 *inhibit_lvl_mv)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == inhibit_lvl_mv)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type cfg_chg_inhib = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->cfg_chg_inhib;
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg_chg_inhib, 0x3, &data, 0);
+ *inhibit_lvl_mv = (data == 0x00) ? 50 : (data * 100);
+ }
+
+ return err_flag;
+}
+
+/*This API sets the pre-charge to full charger threshold. Valid range is 2400mV to 3000mV*/
+pm_err_flag_type pm_smbchg_chgr_set_p2f_threshold(uint32 device_index, uint32 milli_volt)
+
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ if (milli_volt < 2600)
+ {
+ data = 0x00;
+ }
+ else if (milli_volt < 2800)
+ {
+ data = 0x1;
+ }
+ else if (milli_volt < 3000)
+ {
+ data = 0x2;
+ }
+ else
+ {
+ data = 0x3;
+ }
+
+ pm_register_address_type cfg_p2f = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->cfg_p2f;
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg_p2f, 0x3, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+/*This API reads the pre-charge to full charger threshold. Valid range is 2400mV to 3000mV*/
+pm_err_flag_type pm_smbchg_chgr_get_p2f_threshold(uint32 device_index, uint32 *milli_volt)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == milli_volt)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type cfg_p2f = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->cfg_p2f;
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg_p2f, 0x3, &data, 0);
+ *milli_volt = 2400 + (200 * data);
+ }
+
+ return err_flag;
+}
+
+
+/*This API sets the charge termination current in milliamp */
+pm_err_flag_type pm_smbchg_chgr_set_charge_termination_current(uint32 device_index, uint32 current_ma)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ /* 000 = 300mA, 001 = 50mA, 010 = 100mA, 011 = 150mA, 100 = 200mA, 101 = 250mA, 110 =500mA, 111 = 600mA */
+ if (current_ma < 300)
+ {
+ data = (current_ma / 50) ? (current_ma / 50) : 0x1;
+ }
+ else if (current_ma < 500)
+ {
+ data = 0x00;
+ }
+ else
+ {
+ data = (current_ma < 600) ? 0x6 : 0x7;
+ }
+
+ pm_register_address_type cfg_tcc = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->cfg_tcc;
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg_tcc, 0x7, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+/*This API reads the charge termination current_ma*/
+pm_err_flag_type pm_smbchg_chgr_get_charge_termination_current(uint32 device_index, uint32 *current_ma)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == current_ma)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type cfg_tcc = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->cfg_tcc;
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg_tcc, 0x7, &data, 0);
+ if (data == 0)
+ {
+ *current_ma = 300;
+ }
+ else if (data < 5)
+ {
+ *current_ma = 50 * data;
+ }
+ else
+ {
+ *current_ma = 100 * (data - 1);
+ }
+ }
+
+ return err_flag;
+}
+
+
+/*This API configures charge temperature compensation type*/
+pm_err_flag_type pm_smbchg_chgr_config_chgr_temp_cmpn(uint32 device_index, pm_smbchg_chgr_ccmpn_type ccmpn_type, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_CHGR_CCMPN__INVALID == ccmpn_type)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type ccmp_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->ccmp_cfg;
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, ccmp_cfg, (0x1 << ccmpn_type), (pm_register_data_type)(enable << ccmpn_type), 0);
+ }
+
+ return err_flag;
+}
+
+
+/*This API reads configured charge temperature compensation type*/
+pm_err_flag_type pm_smbchg_chgr_get_chgr_temp_cmpn_config(uint32 device_index, pm_smbchg_chgr_ccmpn_type ccmpn_type, boolean *enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_CHGR_CCMPN__INVALID == ccmpn_type)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type ccmp_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->ccmp_cfg;
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, ccmp_cfg, &data, 0);
+ *enable = (data & (0x1 << ccmpn_type)) ? TRUE : FALSE;
+ }
+
+ return err_flag;
+}
+
+
+/*This API sets charger configuration */
+pm_err_flag_type pm_smbchg_chgr_config_chgr(uint32 device_index, pm_chgr_chgr_cfg_type *chgr_cfg_type)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data1, data2;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == chgr_cfg_type)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (chgr_cfg_type->sysok_opt >= PM_SMBCHG_CHGR_SYSOK_OPT__INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ data1 = (chgr_cfg_type->cont_without_fg_ready) | (chgr_cfg_type->is_rchg_threshold_src_fg << 1) | (chgr_cfg_type->is_term_current_src_fg << 2)
+ | (chgr_cfg_type->en_early_current_termination << 3) | (chgr_cfg_type->sysok_opt << 4) | (chgr_cfg_type->en_sysok_pol_table_n << 7);
+
+ data2 = (chgr_cfg_type->en_charger_inhibit) | (chgr_cfg_type->is_holdoff_tmr_350ms << 1) | (chgr_cfg_type->auto_rchg_dis << 2) | (chgr_cfg_type->current_termination_dis << 3)
+ | (chgr_cfg_type->batt_ov_ends_cycle_en << 4) | (chgr_cfg_type->p2f_chg_tran_require_cmd << 5);
+
+ pm_register_address_type chgr_cfg1 = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->chgr_cfg1;
+ pm_register_address_type chgr_cfg2 = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->chgr_cfg2;
+
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, chgr_cfg1, data1, 0);
+
+ err_flag |= pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, chgr_cfg2, data2, 0);
+ }
+
+ return err_flag;
+}
+
+/*This API reads charger configuration */
+pm_err_flag_type pm_smbchg_chgr_get_chgr_config(uint32 device_index, pm_chgr_chgr_cfg_type *chgr_cfg_type)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data1, data2;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == chgr_cfg_type)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type chgr_cfg1 = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->chgr_cfg1;
+ pm_register_address_type chgr_cfg2 = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->chgr_cfg2;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, chgr_cfg1, &data1, 0);
+ err_flag |= pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, chgr_cfg2, &data2, 0);
+
+ chgr_cfg_type->cont_without_fg_ready = (data1 & 0x1) ? TRUE : FALSE;
+ chgr_cfg_type->is_rchg_threshold_src_fg = (data1 & 0x2) ? TRUE : FALSE;
+ chgr_cfg_type->is_term_current_src_fg = (data1 & 0x4) ? TRUE : FALSE;
+ chgr_cfg_type->en_early_current_termination = (data1 & 0x8) ? TRUE : FALSE;
+ chgr_cfg_type->sysok_opt = (pm_smbchg_chgr_sysok_opt_type)((data1 & 0x70) >> 4);
+ chgr_cfg_type->en_sysok_pol_table_n = (data1 & 0x80) ? TRUE : FALSE;;
+
+ chgr_cfg_type->en_charger_inhibit = (data2 & 0x1) ? TRUE : FALSE;
+ chgr_cfg_type->is_holdoff_tmr_350ms = (data2 & 0x2) ? TRUE : FALSE;
+ chgr_cfg_type->auto_rchg_dis = (data2 & 0x4) ? TRUE : FALSE;
+ chgr_cfg_type->current_termination_dis = (data2 & 0x8) ? TRUE : FALSE;
+ chgr_cfg_type->batt_ov_ends_cycle_en = (data2 & 0x10) ? TRUE : FALSE;
+ chgr_cfg_type->p2f_chg_tran_require_cmd = (data2 & 0x20) ? TRUE : FALSE;
+ }
+
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_chgr_config_sfty_timer(uint32 device_index, uint32 pre_chg_sfty_min, uint32 total_chg_sfty_min, pm_smbchg_chgr_sfty_timer_type sfty_timer_type)
+
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data1, data2, data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (sfty_timer_type >= PM_SMBCHG_CHGR_SFTY_TIMER__INVAID_TYPE)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ if (pre_chg_sfty_min < 96)
+ {
+ data1 = (pre_chg_sfty_min < 48) ? 0x0 : 0x1;
+ }
+ else
+ {
+ data1 = (pre_chg_sfty_min < 192) ? 0x2 : 0x3;
+ }
+
+ if (total_chg_sfty_min < 768)
+ {
+ data2 = (total_chg_sfty_min < 384) ? 0x0 : 0x1;
+ }
+ else
+ {
+ data2 = (total_chg_sfty_min < 1536) ? 0x2 : 0x3;
+ }
+
+ data = (sfty_timer_type << 4) | (data2 << 2) | data1;
+
+ pm_register_address_type sft_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->sft_cfg;
+
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, sft_cfg, 0x3F, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_chgr_get_sfty_timer_config(uint32 device_index, uint32 *pre_chg_sfty_min, uint32 *total_chg_sfty_min, pm_smbchg_chgr_sfty_timer_type *sfty_timer_type)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == pre_chg_sfty_min || NULL == total_chg_sfty_min || NULL == sfty_timer_type)
+ {
+ err_flag = PM_ERR_FLAG__INVALID_POINTER;
+ }
+ else
+ {
+ pm_register_address_type sft_cfg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->sft_cfg;
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, sft_cfg, &data, 0);
+
+ *sfty_timer_type = (pm_smbchg_chgr_sfty_timer_type)((data & 0x30) >> 0x4);
+
+ switch (data & 0x3)
+ {
+ case 0:
+ *pre_chg_sfty_min = 24; break;
+ case 1:
+ *pre_chg_sfty_min = 48; break;
+ case 2:
+ *pre_chg_sfty_min = 96; break;
+ default:
+ *pre_chg_sfty_min = 192;
+ }
+
+ switch ((data & 0x6) >> 2)
+ {
+ case 0:
+ *total_chg_sfty_min = 192; break;
+ case 1:
+ *total_chg_sfty_min = 384; break;
+ case 2:
+ *total_chg_sfty_min = 768; break;
+ default:
+ *total_chg_sfty_min = 1536;
+ }
+
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_chgr_irq_enable(uint32 device_index, pm_smbchg_chgr_irq_type irq, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type irq_reg;
+ pm_register_data_type data = 1 << irq;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_CHGR_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ if (enable)
+ {
+ irq_reg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_en_set;
+ }
+ else
+ {
+ irq_reg = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_en_clr;
+ }
+
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, irq_reg, data, 0);
+ }
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_chgr_irq_clear(uint32 device_index, pm_smbchg_chgr_irq_type irq)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 1 << irq;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_CHGR_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type int_latched_clr = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_latched_clr;
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, int_latched_clr, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_chgr_irq_set_trigger(uint32 device_index, pm_smbchg_chgr_irq_type irq, pm_irq_trigger_type trigger)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ uint8 mask = 1 << irq;
+ pm_register_data_type set_type, polarity_high, polarity_low;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_CHGR_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ switch (trigger)
+ {
+ case PM_IRQ_TRIGGER_ACTIVE_LOW:
+ set_type = 0x00;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_ACTIVE_HIGH:
+ set_type = 0x00;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_RISING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_FALLING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_DUAL_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0xFF;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+
+ pm_register_address_type int_set_type = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_set_type;
+ pm_register_address_type int_polarity_high = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_polarity_high;
+ pm_register_address_type int_polarity_low = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_polarity_low;
+
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_set_type, mask, set_type, 0);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_high, mask, polarity_high, 0);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_low, mask, polarity_low, 0);
+ }
+
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_chgr_irq_status(uint32 device_index, pm_smbchg_chgr_irq_type irq, pm_irq_status_type type, boolean *status)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ uint8 mask = 1 << irq;
+ pm_register_address_type int_sts;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_CHGR_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (NULL == status)
+ {
+ err_flag = PM_ERR_FLAG__PAR4_OUT_OF_RANGE;
+ }
+ else
+ {
+ switch (type)
+ {
+ case PM_IRQ_STATUS_RT:
+ int_sts = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_rt_sts;
+ break;
+ case PM_IRQ_STATUS_LATCHED:
+ int_sts = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_latched_sts;
+ break;
+ case PM_IRQ_STATUS_PENDING:
+ int_sts = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->int_pending_sts;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_sts, mask, &data, 0);
+ *status = data ? TRUE : FALSE;
+ }
+
+ return err_flag;
+}
+
+static inline pm_err_flag_type pm_smbchg_chgr_unlock_perph_write(pm_smbchg_data_type *smbchg_ptr)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type sec_access = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->sec_access;
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, sec_access, 0xA5, 0);
+ }
+
+ return err_flag;
+}
+
+
+/*This API sets charger source */
+pm_err_flag_type pm_smbchg_chgr_enable_src(uint32 device_index, boolean chg_en_src)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type chgr_cfg2 = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->chgr_cfg2;
+
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, chgr_cfg2, 0x80, chg_en_src, 0);
+ }
+
+ return err_flag;
+}
+
+/*This API sets charger polarity */
+pm_err_flag_type pm_smbchg_chgr_set_chg_polarity_low (uint32 device_index, boolean chg_pol_low)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type chgr_cfg2 = smbchg_ptr->smbchg_register->chgr_register->base_address + smbchg_ptr->smbchg_register->chgr_register->chgr_cfg2;
+
+ err_flag = pm_smbchg_chgr_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, chgr_cfg2, 0x40, chg_pol_low, 0);
+ }
+
+ return err_flag;
+}
diff --git a/dev/pmic/pmi8994/pm_smbchg_dc_chgpth.c b/dev/pmic/pmi8994/pm_smbchg_dc_chgpth.c
new file mode 100644
index 0000000..f485217
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_smbchg_dc_chgpth.c
@@ -0,0 +1,484 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+
+#include "pm_smbchg_dc_chgpth.h"
+#include "pm_smbchg_driver.h"
+#include <sys/types.h>
+
+/*Unlock peripheral for secured write access*/
+static inline pm_err_flag_type pm_smbchg_dc_chgpth_unlock_perph_write(pm_smbchg_data_type *smbchg_ptr);
+
+/*Find the nearest register value corresponding to input_data*/
+static void pm_smbchg_dc_chgpth_return_reg_value(uint32 input_data, uint32 *array, uint32 array_size, pm_register_data_type *reg_value);
+
+/*This API configures ADCIN adapter allowance*/
+pm_err_flag_type pm_smbchg_dc_chgpth_set_dcin_adptr_allowance(uint32 device_index, pm_smbchg_dcin_adptr_allowance adptr_allowance)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type dcin_chgr_cfg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->dcin_chgr_cfg;
+
+ errFlag = pm_smbchg_dc_chgpth_unlock_perph_write(smbchg_ptr);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, dcin_chgr_cfg, 0x7, (pm_register_data_type)adptr_allowance, 0);
+ }
+ return errFlag;
+}
+
+/*This API reads the adapter allowance configuration*/
+pm_err_flag_type pm_smbchg_dc_chgpth_get_dcin_adptr_allowance(uint32 device_index, pm_smbchg_dcin_adptr_allowance *adptr_allowance)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == adptr_allowance)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type dcin_chgr_cfg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->dcin_chgr_cfg;
+
+ errFlag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, dcin_chgr_cfg, 0x7, &data, 0);
+
+ if (PM_ERR_FLAG__SUCCESS == errFlag)
+ {
+ *adptr_allowance = (pm_smbchg_dcin_adptr_allowance)data;
+ }
+ }
+
+ return errFlag;
+}
+
+/*This API configures the DCIN input current limit*/
+pm_err_flag_type pm_smbchg_dc_chgpth_set_dcin_current_limit(uint32 device_index, uint32 current_ma)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ uint32 *current_limits = smbchg_ptr->chg_range_data->dcin_current_limits;
+
+ pm_register_address_type dcin_il_cfg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->dcin_il_cfg;
+
+ pm_smbchg_dc_chgpth_return_reg_value(current_ma, current_limits, DCIN_SIZE, &data);
+
+ errFlag = pm_smbchg_dc_chgpth_unlock_perph_write(smbchg_ptr);
+ errFlag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, dcin_il_cfg, 0x1F, data, 0);
+ }
+
+ return errFlag;
+}
+
+/*This API reads the DCIN input current limit*/
+pm_err_flag_type pm_smbchg_dc_chgpth_get_dcin_current_limit(uint32 device_index, uint32 *current_milli_amp)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr )
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == current_milli_amp)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ uint32 *current_limits = smbchg_ptr->chg_range_data->dcin_current_limits;
+
+ pm_register_address_type dcin_il_cfg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->dcin_il_cfg;
+
+ errFlag |= pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, dcin_il_cfg, 0x1F, &data, 0);
+ if ((data & 0x1F) >= DCIN_SIZE)
+ {
+ errFlag |= PM_ERR_FLAG__INVALID;
+ }
+ else
+ {
+ *current_milli_amp = current_limits[data & 0x1F];
+ }
+ }
+
+ return errFlag;
+}
+
+/*This API configures various AICL parameters*/
+pm_err_flag_type pm_smbchg_dc_chgpth_config_aicl(uint32 device_index, pm_smbchg_dc_aicl_cfg_type dc_aicl_cfg, boolean enable)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type dc_aicl_cfg_reg;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_AICL__INVALID_CFG == dc_aicl_cfg)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_data_type mask = (0x1 << (dc_aicl_cfg & 0x7));
+
+ if (dc_aicl_cfg > PM_SMBCHG_AICL__OV_OPTION)
+ {
+ dc_aicl_cfg_reg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->dc_aicl_cfg2;
+ }
+ else
+ {
+ dc_aicl_cfg_reg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->dc_aicl_cfg1;
+ }
+
+ pm_register_data_type data = (enable)? 0xFF : 0x00;
+ errFlag = pm_smbchg_dc_chgpth_unlock_perph_write(smbchg_ptr);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, dc_aicl_cfg_reg, mask, data, 0);
+ }
+
+ return errFlag;
+}
+
+/*This API reads the various AICL configurations*/
+pm_err_flag_type pm_smbchg_dc_chgpth_get_aicl_config(uint32 device_index, pm_smbchg_dc_aicl_cfg_type dc_aicl_cfg, boolean *enable)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type dc_aicl_cfg_reg;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_AICL__INVALID_CFG == dc_aicl_cfg)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (NULL == enable)
+ {
+ errFlag = PM_ERR_FLAG__PAR3_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_data_type mask = (0x1 << (dc_aicl_cfg & 0x7));
+
+ if (dc_aicl_cfg > PM_SMBCHG_AICL__OV_OPTION)
+ {
+ dc_aicl_cfg_reg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->dc_aicl_cfg2;
+ }
+ else
+ {
+ dc_aicl_cfg_reg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->dc_aicl_cfg1;
+ }
+
+ errFlag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, dc_aicl_cfg_reg, mask, &data, 0);
+ *enable = (data) ? TRUE : FALSE;
+ }
+
+ return errFlag;
+}
+
+/* This API configures AICL restart timer */
+pm_err_flag_type pm_smbchg_dc_chgpth_set_aicl_restart_tmr(uint32 device_index, pm_smbchg_dc_chgpth_aicl_rstrt_tmr timer_type)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (timer_type >= PM_SMBCHG_AICL_WL_RSTRT_TMR_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type aicl_wl_sel_cfg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->aicl_wl_sel_cfg;
+
+ errFlag = pm_smbchg_dc_chgpth_unlock_perph_write(smbchg_ptr);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, aicl_wl_sel_cfg, 0x3, (pm_smbchg_dc_chgpth_aicl_rstrt_tmr)timer_type, 0);
+ }
+
+ return errFlag;
+}
+
+
+/* This API reads configured AICL restart timer */
+pm_err_flag_type pm_smbchg_dc_chgpth_get_aicl_restart_tmr(uint32 device_index, pm_smbchg_dc_chgpth_aicl_rstrt_tmr *timer_type)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == timer_type)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type aicl_wl_sel_cfg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->aicl_wl_sel_cfg;
+
+ errFlag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, aicl_wl_sel_cfg, 0x3, &data, 0);
+
+ *timer_type = (pm_smbchg_dc_chgpth_aicl_rstrt_tmr)data;
+ }
+
+ return errFlag;
+}
+
+
+pm_err_flag_type pm_smbchg_dc_chgpth_irq_enable(uint32 device_index, pm_smbchg_dc_chgpth_irq_type irq, boolean enable)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type irq_reg;
+ pm_register_data_type data = 1 << irq;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_DC_CHGPTH_IRQ_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ if (enable)
+ {
+ irq_reg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_en_set;
+ }
+ else
+ {
+ irq_reg = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_en_clr;
+ }
+
+ errFlag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, irq_reg, data, 0);
+ }
+ return errFlag;
+}
+
+pm_err_flag_type pm_smbchg_dc_chgpth_irq_clear(uint32 device_index, pm_smbchg_dc_chgpth_irq_type irq)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 1 << irq;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_DC_CHGPTH_IRQ_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type int_latched_clr = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_latched_clr;
+
+ errFlag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, int_latched_clr, data, 0);
+ }
+ return errFlag;
+}
+
+
+pm_err_flag_type pm_smbchg_dc_chgpth_irq_set_trigger(uint32 device_index, pm_smbchg_dc_chgpth_irq_type irq, pm_irq_trigger_type trigger)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ uint8 mask = 1 << irq;
+ pm_register_data_type set_type, polarity_high, polarity_low;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_DC_CHGPTH_IRQ_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type int_set_type = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_set_type;
+ pm_register_address_type int_polarity_high = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_polarity_high;
+ pm_register_address_type int_polarity_low = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_polarity_low;
+
+ switch (trigger)
+ {
+ case PM_IRQ_TRIGGER_ACTIVE_LOW:
+ set_type = 0x00;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_ACTIVE_HIGH:
+ set_type = 0x00;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_RISING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_FALLING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_DUAL_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0xFF;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ errFlag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_set_type, mask, set_type, 0);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_high, mask, polarity_high, 0);
+ errFlag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_low, mask, polarity_low, 0);
+ }
+
+ return errFlag;
+}
+
+pm_err_flag_type pm_smbchg_dc_chgpth_irq_status(uint32 device_index, pm_smbchg_dc_chgpth_irq_type irq, pm_irq_status_type type, boolean *status)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ uint8 mask = 1 << irq;
+ pm_register_address_type int_sts;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_DC_CHGPTH_IRQ_INVALID)
+ {
+ errFlag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ switch (type)
+ {
+ case PM_IRQ_STATUS_RT:
+ int_sts = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_rt_sts;
+ break;
+ case PM_IRQ_STATUS_LATCHED:
+ int_sts = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_latched_sts;
+ break;
+ case PM_IRQ_STATUS_PENDING:
+ int_sts = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->int_pending_sts;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+
+ errFlag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_sts, mask, &data, 0);
+ *status = data ? TRUE : FALSE;
+ }
+
+ return errFlag;
+}
+
+/*@todo: following API may require implementation. Need more info */
+//pm_smbchg_dc_chgpth_temp_comp_cfg
+//pm_smbchg_dc_chgpth_tr_dcin_sns
+//pm_smbchg_dc_chgpth_tr_dcin_divider
+//pm_smbchg_dc_chgpth_tr_iinos_dc
+
+
+static inline pm_err_flag_type pm_smbchg_dc_chgpth_unlock_perph_write(pm_smbchg_data_type *smbchg_ptr)
+{
+ pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+
+ if (NULL == smbchg_ptr)
+ {
+ errFlag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type sec_access = smbchg_ptr->smbchg_register->dc_chgpth_register->base_address + smbchg_ptr->smbchg_register->dc_chgpth_register->sec_access;
+ errFlag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, sec_access, 0xA5, 0);
+ }
+
+ return errFlag;
+}
+
+
+/*Find the nearest register value corresponding to input_data*/
+static void pm_smbchg_dc_chgpth_return_reg_value(uint32 input_data, uint32 *array, uint32 array_size, pm_register_data_type *reg_value)
+{
+ uint32 loc = 0;
+
+
+ while (loc < array_size)
+ {
+ if (input_data < array[loc])
+ {
+ break;
+ }
+ else
+ {
+ loc++;
+ }
+ }
+
+ *reg_value = (loc) ? (loc - 1) : 0;
+
+ return;
+}
diff --git a/dev/pmic/pmi8994/pm_smbchg_driver.c b/dev/pmic/pmi8994/pm_smbchg_driver.c
new file mode 100644
index 0000000..e0925ab
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_smbchg_driver.c
@@ -0,0 +1,146 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+#include "pm_app_smbchg.h"
+#include "pm_smbchg_driver.h"
+#include "pm_comm.h"
+
+/*===========================================================================
+
+ STATIC VARIABLES
+
+===========================================================================*/
+
+/* Static global variable to store the SMBCHG driver data */
+pm_smbchg_data_type smb_data[PM_MAX_NUM_PMICS];
+
+/* Initialize bat i/f registers */
+smbchg_bat_if_register_ds bat_if_reg[1] =
+ { /* Battery interface register base and offsets */
+ {
+ 0x1200, 0x5, 0x8, 0x10, 0x11, 0x12, 0x13,
+ 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b,
+ 0x40, 0x41, 0x42, 0xD0, 0xDF, 0xE0, 0xE1, 0xF0,
+ 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF8, 0xF9,
+ 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
+ },
+ };
+
+/* Initialize usb charger path registers */
+smbchg_usb_chgpth_register_ds usb_chgpath_reg[1] =
+ { /* Charger path register base & offset */
+ {
+ 0x1300, 0x5, 0x7, 0x8, 0x9, 0xA, 0xB,
+ 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12,
+ 0x13, 0x14, 0x15, 0x16, 0x18, 0x19,
+ 0x1A, 0x1B, 0x40, 0x44, 0x4E, 0xD0, 0xF1,
+ 0xF2, 0xF3, 0xF4, 0xF5, 0xFF
+ },
+ };
+
+/* Initialize dc charger path registers */
+smbchg_dc_chgpth_register_ds dc_chgpath_reg[1] =
+ { /* DC charge path base & offset */
+ {
+ 0x1400, 0x5, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+ 0x18, 0x19, 0x1A, 0x1B, 0xD0, 0xDF, 0xE0, 0xE1, 0xE2,
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xFA
+ },
+ };
+
+/* Initialize misc charger registers */
+smbchg_misc_register_ds misc_reg[1] =
+ { /* Misc charge register base & offsets */
+ {
+ 0x1600, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x8,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+ 0x18, 0x19, 0x1A, 0x1B, 0x40, 0x41, 0x42,
+ 0xD0, 0xDF, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5,
+ 0xF6, 0xF7, 0xF8, 0xFF
+ },
+ };
+
+smbchg_chgr_register_ds smb_chgr_reg[1] =
+ {
+ {
+ 0x1000, 0x5, 0x8, 0xB, 0xC, 0xD, 0xE, 0x10, 0x11,
+ 0x12, 0x13, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1A,
+ 0x1B, 0xD0, 0xDF, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5,
+ 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD,
+ 0xFE, 0xFF,
+ },
+ };
+
+pm_comm_info_type comm_ptr[1] =
+ { /* slave_id , pmic index, and comm type (comm type is unused) */
+ {0x2, 0x1, 0x0},
+ };
+
+/* Initialize the SMB charger data structure */
+smbchg_register_ds smb_charge[1] =
+ {
+ {
+ NULL,
+ &smb_chgr_reg[0],
+ NULL,
+ &bat_if_reg[0],
+ &usb_chgpath_reg[0],
+ &dc_chgpath_reg[0],
+ &misc_reg[0],
+ },
+ };
+
+/* Initialize the SMB data */
+void pm_smbchg_driver_init(uint32_t device_index)
+{
+
+ smb_data[device_index].smbchg_register = &smb_charge[0];
+ smb_data[device_index].comm_ptr = &comm_ptr[0];
+ smb_data[device_index].chg_range_data = (chg_range_data_type *) pm_target_chg_range_data();
+}
+
+/*===========================================================================
+
+ FUNCTION DEFINITIONS
+
+===========================================================================*/
+
+pm_smbchg_data_type* pm_smbchg_get_data(uint32 pmic_index)
+{
+ if(pmic_index < PM_MAX_NUM_PMICS)
+ {
+ return &smb_data[pmic_index];
+ }
+
+ return NULL;
+}
diff --git a/dev/pmic/pmi8994/pm_smbchg_misc.c b/dev/pmic/pmi8994/pm_smbchg_misc.c
new file mode 100644
index 0000000..f92a89a
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_smbchg_misc.c
@@ -0,0 +1,451 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*===========================================================================
+
+ INCLUDE FILES
+
+===========================================================================*/
+#include "pm_smbchg_misc.h"
+#include "pm_smbchg_driver.h"
+#include "pm_resources_and_types.h"
+
+/*This API detects the type of chgarging port device is connected to*/
+pm_err_flag_type pm_smbchg_misc_chgr_port_detected(uint32 pmic_device, pm_smbchg_misc_src_detect_type *src_detected)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+ uint8 src_loc = 0x0;
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == src_detected)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type idev_sts = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->idev_sts;
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, idev_sts, &data, 0);
+ if (err_flag == PM_ERR_FLAG__SUCCESS)
+ {
+ while (src_loc < 0x08) //loop thru each bit
+ {
+ if (data & (0x80 >> src_loc))
+ {
+ break;
+ }
+ src_loc++;
+ }
+
+ *src_detected = (src_loc > 7) ? PM_SMBCHG_MISC_SRC_DETECT_INVALID : (pm_smbchg_misc_src_detect_type)src_loc;
+
+ }
+ }
+ return err_flag;
+}
+
+#ifndef LK
+/*This API restarts watchdog*/
+pm_err_flag_type pm_smbchg_misc_wdog_rst(uint32 pmic_device)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type wdog_rst = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->wdog_rst;
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, wdog_rst, 0x80, 0x80, 0);
+ }
+
+ return err_flag;
+}
+
+/*This API enables automatic fault protection */
+pm_err_flag_type pm_smbchg_misc_en_afp(uint32 pmic_device)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type afp_mode = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->afp_mode;
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, afp_mode, 0x80, 0x80, 0);
+ }
+
+ return err_flag;
+}
+
+
+/*This API configures the charger watchgod */
+pm_err_flag_type pm_smbchg_misc_config_wdog(uint32 pmic_device, pm_smbchg_misc_wdog_cfg_type *wd_cfg)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == wd_cfg)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (wd_cfg->sfty_timer >= PM_SMBCHG_MISC_SFTY_TIMER_AFTER_WDOG_INVALID || wd_cfg->wdog_timeout >= PM_SMBCHG_MISC_WD_TMOUT_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type wd_cfg_reg = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->wd_cfg;
+ data = (wd_cfg->afp_wdog_en << 0x7) | (wd_cfg->wdog_timeout << 0x5) | (wd_cfg->sfty_timer << 3) | (wd_cfg->wdog_irq_sfty_en << 2) | (wd_cfg->wdog_option_run_always << 1) | (wd_cfg->wdog_timer_en);
+ err_flag = pm_smbchg_misc_unlock_perph_write(smbchg_ptr);
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, wd_cfg_reg, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+/*This API reads the configurations for charger watchgod */
+pm_err_flag_type pm_smbchg_misc_get_wdog_config(uint32 pmic_device, pm_smbchg_misc_wdog_cfg_type *wd_cfg)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == wd_cfg)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type wd_cfg_reg = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->wd_cfg;
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, wd_cfg_reg, &data, 0);
+ }
+
+ if (err_flag == PM_ERR_FLAG__SUCCESS)
+ {
+ wd_cfg->wdog_timer_en = (data & 0x1) ? TRUE : FALSE;
+ wd_cfg->wdog_option_run_always = (data & 0x2) ? TRUE : FALSE;
+ wd_cfg->wdog_irq_sfty_en = (data & 0x4) ? TRUE : FALSE;
+ wd_cfg->sfty_timer = (pm_smbchg_misc_sfty_after_wdog_irq_type)((data & 0x18) >> 3);
+ wd_cfg->wdog_timeout = (pm_smbchg_wdog_timeout_type)((data & 0x60) >> 5);
+ wd_cfg->afp_wdog_en = (data & 0x80) ? TRUE : FALSE;
+ }
+
+ return err_flag;
+}
+
+
+
+pm_err_flag_type pm_smbchg_misc_enable_wdog(uint32 pmic_device, boolean enable_smbchg_wdog)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_misc_wdog_cfg_type wd_cfg;
+
+ err_flag = pm_smbchg_misc_get_wdog_config(pmic_device, &wd_cfg);
+
+ //Change needed bits and write it back
+ if (err_flag == PM_ERR_FLAG__SUCCESS)
+ {
+ wd_cfg.afp_wdog_en = enable_smbchg_wdog;
+
+ err_flag |= pm_smbchg_misc_config_wdog(pmic_device, &wd_cfg);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_misc_set_wdog_timeout(uint32 pmic_device, pm_smbchg_wdog_timeout_type wdog_timeout)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_misc_wdog_cfg_type wd_cfg;
+
+
+ err_flag = pm_smbchg_misc_get_wdog_config(pmic_device, &wd_cfg);
+
+ //change needed bits and write it back
+ if (err_flag == PM_ERR_FLAG__SUCCESS)
+ {
+ wd_cfg.wdog_timeout = wdog_timeout;
+ err_flag |= pm_smbchg_misc_config_wdog(pmic_device, &wd_cfg);
+ }
+
+ return err_flag;
+}
+
+
+/*This API configures VCHG output which is proportional to the input current or the charger/discharge current. This also configures SYSOK LDO function and PHY_ON */
+pm_err_flag_type pm_smbchg_misc_config_misc_fn(uint32 pmic_device, pm_smbchg_misc_misc_fn_cfg_type misc_cfg, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_MISC_FN__INVALID == misc_cfg)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type misc_cfg_reg = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->misc_cfg;
+
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, misc_cfg_reg, (0x1 << misc_cfg), (pm_register_data_type)(enable<<misc_cfg), 0);
+ }
+
+ return err_flag;
+}
+
+/*This API reads VCHG output configuration, SYSOK LDO function and PHY_ON */
+pm_err_flag_type pm_smbchg_misc_get_misc_fn_config(uint32 pmic_device, pm_smbchg_misc_misc_fn_cfg_type misc_cfg, boolean *enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_MISC_FN__INVALID == misc_cfg)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (NULL == enable)
+ {
+ err_flag = PM_ERR_FLAG__PAR3_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type misc_cfg_reg = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->misc_cfg;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, misc_cfg_reg, &data, 0);
+
+ *enable = (data & (0x1 << misc_cfg)) ? TRUE : FALSE;
+ }
+
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_misc_irq_enable(uint32 pmic_device, pm_smbchg_misc_irq_type irq, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type irq_reg;
+ pm_register_data_type data = 1 << irq;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_MISC_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ if (enable)
+ {
+ irq_reg = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_en_set;
+ }
+ else
+ {
+ irq_reg = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_en_clr;
+ }
+
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, irq_reg, data, 0);
+ }
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_misc_irq_clear(uint32 pmic_device, pm_smbchg_misc_irq_type irq)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 1 << irq;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_MISC_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type int_latched_clr = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_latched_clr;
+
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, int_latched_clr, data, 0);
+ }
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_misc_irq_set_trigger(uint32 pmic_device, pm_smbchg_misc_irq_type irq, pm_irq_trigger_type trigger)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ uint8 mask = 1 << irq;
+ pm_register_data_type set_type, polarity_high, polarity_low;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_MISC_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type int_set_type = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_set_type;
+ pm_register_address_type int_polarity_high = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_polarity_high;
+ pm_register_address_type int_polarity_low = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_polarity_low;
+
+ switch (trigger)
+ {
+ case PM_IRQ_TRIGGER_ACTIVE_LOW:
+ set_type = 0x00;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_ACTIVE_HIGH:
+ set_type = 0x00;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_RISING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_FALLING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_DUAL_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0xFF;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_set_type, mask, set_type, 0);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_high, mask, polarity_high, 0);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_low, mask, polarity_low, 0);
+ }
+
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_misc_irq_status(uint32 pmic_device, pm_smbchg_misc_irq_type irq, pm_irq_status_type type, boolean *status)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ uint8 mask = 1 << irq;
+ pm_register_address_type int_sts;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(pmic_device);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == status)
+ {
+ err_flag = PM_ERR_FLAG__PAR4_OUT_OF_RANGE;
+ }
+ else if (irq >= PM_SMBCHG_MISC_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ switch (type)
+ {
+ case PM_IRQ_STATUS_RT:
+ int_sts = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_rt_sts;
+ break;
+ case PM_IRQ_STATUS_LATCHED:
+ int_sts = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_latched_sts;
+ break;
+ case PM_IRQ_STATUS_PENDING:
+ int_sts = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->int_pending_sts;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_sts, mask, &data, 0);
+ *status = data ? TRUE : FALSE;
+ }
+
+ return err_flag;
+}
+
+
+static inline pm_err_flag_type pm_smbchg_misc_unlock_perph_write(pm_smbchg_data_type *smbchg_ptr)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type sec_access = smbchg_ptr->smbchg_register->misc_register->base_address + smbchg_ptr->smbchg_register->misc_register->sec_access;
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, sec_access, 0xA5, 0);
+ }
+
+ return err_flag;
+}
+#endif
\ No newline at end of file
diff --git a/dev/pmic/pmi8994/pm_smbchg_usb_chgpth.c b/dev/pmic/pmi8994/pm_smbchg_usb_chgpth.c
new file mode 100644
index 0000000..b508850
--- /dev/null
+++ b/dev/pmic/pmi8994/pm_smbchg_usb_chgpth.c
@@ -0,0 +1,928 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+/*=============================================================================
+
+ INCLUDE FILES
+
+===============================================================================*/
+
+#include "pm_smbchg_driver.h"
+#include "pm_smbchg_usb_chgpth.h"
+
+/*unlock peripheral for secured access write*/
+static inline pm_err_flag_type pm_smbchg_usb_chgpth_unlock_perph_write(pm_smbchg_data_type *smbchg_ptr);
+
+/*Find the nearest register value corresponding to input_data*/
+static void pm_smbchg_usb_chgpth_return_reg_value(uint32 input_data, uint32 *array, uint32 array_size, pm_register_data_type *reg_value);
+
+pm_err_flag_type pm_smbchg_usb_chgpth_icl_sts(uint32 device_index, input_current_limit_sts *icl_sts)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data1, data2;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ uint32 *icl_current = smbchg_ptr->chg_range_data->usbin_current_limits;
+
+ pm_register_address_type icl_sts1 = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->icl_sts_1;
+ pm_register_address_type icl_sts2 = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->icl_sts_2;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, icl_sts1, &data1, 0);
+ err_flag |= pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, icl_sts2, &data2, 0);
+
+ icl_sts->is_aicl_complete = (data1 & 0x20) ? TRUE : FALSE;
+ icl_sts->input_current_limit = icl_current[data1 & 0x1F];
+ icl_sts->icl_mode = (input_current_limit_mode)((data2 & 0x30) >> 4);
+ icl_sts->is_usbin_suspended = (data2 & 0x8) ? TRUE : FALSE;
+ icl_sts->is_dcin_suspended = (data2 & 0x4) ? TRUE : FALSE;
+ icl_sts->is_usbin_active_pwr_src = (data2 & 0x2) ? TRUE : FALSE;
+ icl_sts->is_dcin_active_pwr_src = (data2 & 0x1) ? TRUE : FALSE;
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_pwr_pth(uint32 device_index, pm_smbchg_usb_chgpth_pwr_pth_type *pwr_path)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type pwr_pth_sts = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->pwr_pth_sts;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, pwr_pth_sts, &data, 0);
+
+ *pwr_path = (pm_smbchg_usb_chgpth_pwr_pth_type)(data & 0x03);
+ }
+
+ return err_flag;
+}
+
+
+/*auto power source detection degitched status*/
+pm_err_flag_type pm_smbchg_usb_chgpth_apsd_dg_sts(uint32 device_index, pm_apsd_dg_sts_type apsd_dg_sts_type, boolean* status)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if ( NULL == status || PM_SMBCHG_USB_CHGPTH_DG_STS__INVALID == apsd_dg_sts_type)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type apsd_dg_sts_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->apsd_dg_sts;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, apsd_dg_sts_reg, &data, 0);
+
+ *status = (data & (0x1 << apsd_dg_sts_type))? TRUE : FALSE;
+ }
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_rid_sts(uint32 device_index, pm_smbchg_usb_chgpth_rid_sts_type *rid_sts)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type rid_sts_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->rid_sts;
+
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, rid_sts_reg, 0xF, &data, 0);
+
+ switch (data)
+ {
+ case 0x8: *rid_sts = PM_SMBCHG_USB_CHGPTH_RID__FLOAT; break;
+ case 0x4: *rid_sts = PM_SMBCHG_USB_CHGPTH_RID__A; break;
+ case 0x2: *rid_sts = PM_SMBCHG_USB_CHGPTH_RID__B; break;
+ case 0x1: *rid_sts = PM_SMBCHG_USB_CHGPTH_RID__C; break;
+ case 0x0: *rid_sts = PM_SMBCHG_USB_CHGPTH_RID__GND; break;
+ default: *rid_sts = PM_SMBCHG_USB_CHGPTH_RID__INVALID;
+ }
+ }
+
+ return err_flag;
+};
+
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_hvdcp_sts(uint32 device_index, pm_smbchg_usb_chgpth_hvdcp_sts_type hvdcp_sts, boolean *status)
+{
+
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == status || PM_SMBCHG_USB_CHGPTH__HVDCP_STS_INVALID == hvdcp_sts)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type hvdcp_sts_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->hvdcp_sts;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, hvdcp_sts_reg, &data, 0);
+
+ *status = (data & (0x1 << hvdcp_sts))? TRUE : FALSE;
+
+ }
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_usb_chgpth_input_sts(uint32 device_index, pm_smbchg_usb_chgpth_chgr_type chgr, pm_smbchg_usb_chgpth_input_sts_type *input_sts_type)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type input_sts = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->input_sts;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, input_sts, &data, 0);
+ if (PM_ERR_FLAG__SUCCESS == err_flag)
+ {
+ switch (chgr)
+ {
+ case PM_SMBCHG_CHAR_TYPE_USB:
+ data = (data & 0x38) >> 3; break;
+ case PM_SMBCHG_CHAR_TYPE_DC:
+ data = (data & 0x7); break;
+ default:
+ return PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+
+ switch (data)
+ {
+ case 0x00:
+ *input_sts_type = PM_SMBCHG_NO_CHGR_DETECTED; break;
+ case 0x01:
+ *input_sts_type = PM_SMBCHG_5V_9V_CHGR_DETECTED; break;
+ case 0x02:
+ *input_sts_type = PM_SMBCHG_UNREGULATED_CHGR_DETECTED; break;
+ case 0x04:
+ *input_sts_type = PM_SMBCHG_9V_CHGR_DETECTED; break;
+ default:
+ *input_sts_type = PM_SMBCHG_INVALID_DETECTED; break;
+ }
+ }
+
+ }
+
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_valid_usbid(uint32 device_index, uint16 *valid_id)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data1, data2;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type usbid_valid_id_7_0 = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->usbid_valid_id_7_0;
+ pm_register_address_type usbid_valid_id_11_8 = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->usbid_valid_id_11_8;
+
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, usbid_valid_id_7_0, &data1, 0);
+ err_flag |= pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, usbid_valid_id_11_8, 0x0F, &data2, 0);
+ if (PM_ERR_FLAG__SUCCESS == err_flag)
+ {
+ *valid_id = (uint16)((data2 << 8) | data1);
+ }
+
+ }
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_set_cmd_il(uint32 device_index, pm_smbchg_usb_chgpth_cmd_il_type chgpth_cmd_il, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ pm_register_data_type data;
+
+ if(NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if(PM_SMBCHG_USBCHGPTH_CMD_IL__INVALID == chgpth_cmd_il)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type cmd_il = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->cmd_il;
+
+ data = (enable) ? 0xFF : 0x00;
+
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, cmd_il, (0x1 << chgpth_cmd_il), data, 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_cmd_il(uint32 device_index, pm_smbchg_usb_chgpth_cmd_il_type chgpth_cmd_il, boolean *enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ pm_register_data_type data;
+ pm_register_address_type cmd_il;
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_USBCHGPTH_CMD_IL__INVALID == chgpth_cmd_il || NULL == enable)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ cmd_il = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->cmd_il;
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, cmd_il, &data, 0);
+ *enable = (data & (0x1 << chgpth_cmd_il))? TRUE : FALSE;
+ }
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_usb_chgpth_set_iusb_max(uint32 device_index, uint32 i_milli_amp)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type iusb_max = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->iusb_max;
+
+ if (i_milli_amp > 2500)
+ {
+ data = 0x19;
+ }
+ else if (i_milli_amp < 100)
+ {
+ data = 0x0;
+ }
+ else if (i_milli_amp > 100 && i_milli_amp <= 150)
+ {
+ data = 0x1;
+ }
+ else
+ {
+ /*IUSB_MAX = data * 100*/
+ data = (i_milli_amp + 50) / 100; //rounding
+ }
+
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, iusb_max, 0x1F, data, 0);
+ }
+
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_iusb_max(uint32 device_index, uint32 *i_milli_amp)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == i_milli_amp)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type iusb_max = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->iusb_max;
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, iusb_max, &data, 0);
+
+ if (PM_ERR_FLAG__SUCCESS == err_flag)
+ {
+ data &= 0x1F;
+ switch (data)
+ {
+ case 0:
+ *i_milli_amp = 100; break;
+ case 1:
+ *i_milli_amp = 150; break;
+ default:
+ *i_milli_amp = data * 100;
+ }
+ }
+ }
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_usb_chgpth_set_enum_timer_stop(uint32 device_index)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type enum_timer_stop = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->enum_timer_stop;
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, enum_timer_stop, 0x1, 0x1, 0);
+ }
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_set_usbin_adptr_allowance(uint32 device_index, pm_smbchg_usbin_adptr_allowance adptr_allowance)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (adptr_allowance >= PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type usbin_chgr_cfg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->usbin_chgr_cfg;
+ err_flag = pm_smbchg_usb_chgpth_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, usbin_chgr_cfg, 0x7, (pm_register_data_type)adptr_allowance, 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_usbin_adptr_allowance(uint32 device_index, pm_smbchg_usbin_adptr_allowance *adptr_allowance)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 0;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == adptr_allowance)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type usbin_chgr_cfg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->usbin_chgr_cfg;
+
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, usbin_chgr_cfg, 0x7, &data, 0);
+ /*valid adptr_allowance is only 0 to 5 but data read is 3 bits*/
+ *adptr_allowance = (data >=PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_INVALID)? PM_SMBCHG_USBIN_ADPTR_ALLOWANCE_INVALID :(pm_smbchg_usbin_adptr_allowance)data;
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_set_usbin_current_limit(uint32 device_index, uint32 current_ma)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data =0;
+
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ uint32 *usbin_icl = smbchg_ptr->chg_range_data->usbin_current_limits;
+ pm_register_address_type usbin_il_cfg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->usbin_il_cfg;
+
+ pm_smbchg_usb_chgpth_return_reg_value(current_ma, usbin_icl, USBIN_SIZE, &data);
+
+ err_flag = pm_smbchg_usb_chgpth_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, usbin_il_cfg, 0x1F, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_usbin_current_limit(uint32 device_index, uint32 *current_ma)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == current_ma)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ uint32 *usbin_icl = smbchg_ptr->chg_range_data->usbin_current_limits;
+ pm_register_address_type usbin_il_cfg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->usbin_il_cfg;
+ err_flag |= pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, usbin_il_cfg, 0x1F, &data, 0);
+ *current_ma = usbin_icl[data & 0x1F];
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_config_aicl(uint32 device_index, pm_smbchg_usb_chgpth_aicl_cfg_type usb_aicl_cfg, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_USB_CHGPTH_AICL_CFG__INVALID == usb_aicl_cfg)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type usb_aicl_cfg_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->usb_aicl_cfg;
+ err_flag = pm_smbchg_usb_chgpth_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, usb_aicl_cfg_reg, (0x1 << usb_aicl_cfg), (pm_register_data_type)(enable<<usb_aicl_cfg), 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_aicl_config(uint32 device_index, pm_smbchg_usb_chgpth_aicl_cfg_type usb_aicl_cfg, boolean* enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (PM_SMBCHG_USB_CHGPTH_AICL_CFG__INVALID == usb_aicl_cfg)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else if (NULL == enable)
+ {
+ err_flag = PM_ERR_FLAG__PAR3_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type usb_aicl_cfg_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->usb_aicl_cfg;
+
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, usb_aicl_cfg_reg, (0x1<<usb_aicl_cfg), &data, 0);
+
+ *enable = (data)? TRUE: FALSE;
+ }
+
+ return err_flag;
+}
+
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_config_usb_chgpth(uint32 device_index, pm_usb_chgpth_usb_cfg_type *usb_cfg_type)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ uint8 mask = 0x06;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == usb_cfg_type)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ data = ((usb_cfg_type->usb51ac_ctrl_type << 1) |(usb_cfg_type->usb51_cmd_pol_type << 2));
+
+ pm_register_address_type cfg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->cfg;
+ err_flag = pm_smbchg_usb_chgpth_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, cfg, mask, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_usb_chgpth_config(uint32 device_index, pm_usb_chgpth_usb_cfg_type *usb_cfg_type)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == usb_cfg_type)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type cfg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->cfg;
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, cfg, &data, 0);
+
+ usb_cfg_type->usb51ac_ctrl_type = (data & 0x1)? PM_SMBCHG_USB_CHGPTH_USB51AC_CTRL__PIN: PM_SMBCHG_USB_CHGPTH_USB51AC_CTRL__CMD;
+ usb_cfg_type->usb51_cmd_pol_type = (data & 0x2)? PM_SMBCHG_USB_CHGPTH_USB51_CMD_POL__CMD1_100: PM_SMBCHG_USB_CHGPTH_USB51_CMD_POL__CMD1_500;
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_config_apsd(uint32 device_index, pm_smbchg_usb_chgpth_apsd_cfg_type *apsd_cfg)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == apsd_cfg)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ data = (apsd_cfg->en_auto_src_detect) |(apsd_cfg->en_dcd_tmout_only << 1)|(apsd_cfg->set_rid_clk_2khz << 2)|(apsd_cfg->force_icl_500ma_vbat_low_sdp << 3)
+ |(apsd_cfg->sdp_suspend << 4)|(apsd_cfg->is_ocd_isel_hc << 5)|(apsd_cfg->usb_fail_pok_hv << 6)|(apsd_cfg->is_input_prority_usbin << 7 );
+
+ pm_register_address_type apsd_cfg_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->apsd_cfg;
+ err_flag = pm_smbchg_usb_chgpth_unlock_perph_write(smbchg_ptr);
+ err_flag |= pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, apsd_cfg_reg, data, 0);
+ }
+
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_get_apsd_config(uint32 device_index, pm_smbchg_usb_chgpth_apsd_cfg_type *apsd_cfg)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (NULL == apsd_cfg )
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ pm_register_address_type apsd_cfg_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->apsd_cfg;
+ err_flag = pm_comm_read_byte(smbchg_ptr->comm_ptr->slave_id, apsd_cfg_reg, &data, 0);
+
+ apsd_cfg->en_auto_src_detect = (data & 0x1) ? TRUE : FALSE;
+ apsd_cfg->en_dcd_tmout_only = (data & 0x2) ? TRUE : FALSE;
+ apsd_cfg->set_rid_clk_2khz = (data & 0x4) ? TRUE : FALSE;
+ apsd_cfg->force_icl_500ma_vbat_low_sdp = (data & 0x8) ? TRUE : FALSE;
+ apsd_cfg->sdp_suspend = (data & 0x10) ? TRUE : FALSE;
+ apsd_cfg->is_ocd_isel_hc = (data & 0x20) ? TRUE : FALSE;
+ apsd_cfg->usb_fail_pok_hv = (data & 0x40) ? TRUE : FALSE;
+ apsd_cfg->is_input_prority_usbin = (data & 0x80) ? TRUE : FALSE;
+ }
+ return err_flag;
+}
+
+
+
+pm_err_flag_type pm_smbchg_chgpth_set_input_priority(uint32 device_index, pm_smbchg_chgpth_input_priority_type chgpth_priority)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_smbchg_usb_chgpth_apsd_cfg_type apsd_cfg;
+
+ if (chgpth_priority >= PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ }
+ else
+ {
+ //Get the current configuration
+ err_flag = pm_smbchg_usb_chgpth_get_apsd_config(device_index, &apsd_cfg);
+
+ if (err_flag == PM_ERR_FLAG__SUCCESS)
+ {
+ switch (chgpth_priority)
+ {
+ case PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_DCIN:
+ {
+ apsd_cfg.is_input_prority_usbin = 0;
+ }
+ break;
+ case PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_USBIN:
+ {
+ apsd_cfg.is_input_prority_usbin = 1;
+ }
+ break;
+ default:
+ err_flag = PM_ERR_FLAG__PAR2_OUT_OF_RANGE;
+ break;
+ }
+
+ err_flag |= pm_smbchg_usb_chgpth_config_apsd(device_index, &apsd_cfg);
+ }
+ }
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_irq_enable(uint32 device_index, pm_smbchg_usb_chgpth_irq_type irq, boolean enable)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_address_type irq_reg;
+ pm_register_data_type data = 1 << irq;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_USB_CHGPTH_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ if (enable)
+ {
+ irq_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_en_set;
+ }
+ else
+ {
+ irq_reg = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_en_clr;
+ }
+
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, irq_reg, data, 0);
+ }
+
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_usb_chgpth_irq_clear(uint32 device_index, pm_smbchg_usb_chgpth_irq_type irq)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data = 1 << irq;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_USB_CHGPTH_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type int_latched_clr = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_latched_clr;
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, int_latched_clr, data, 0);
+ }
+ return err_flag;
+}
+
+
+pm_err_flag_type pm_smbchg_usb_chgpth_irq_set_trigger(uint32 device_index, pm_smbchg_usb_chgpth_irq_type irq, pm_irq_trigger_type trigger)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ uint8 mask = 1 << irq;
+ pm_register_data_type set_type, polarity_high, polarity_low;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_USB_CHGPTH_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type int_set_type = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_set_type;
+ pm_register_address_type int_polarity_high = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_polarity_high;
+ pm_register_address_type int_polarity_low = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_polarity_low;
+
+ switch (trigger)
+ {
+ case PM_IRQ_TRIGGER_ACTIVE_LOW:
+ set_type = 0x00;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_ACTIVE_HIGH:
+ set_type = 0x00;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_RISING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0x00;
+ break;
+ case PM_IRQ_TRIGGER_FALLING_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0x00;
+ polarity_low = 0xFF;
+ break;
+ case PM_IRQ_TRIGGER_DUAL_EDGE:
+ set_type = 0xFF;
+ polarity_high = 0xFF;
+ polarity_low = 0xFF;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ err_flag = pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_set_type, mask, set_type, 0);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_high, mask, polarity_high, 0);
+ err_flag |= pm_comm_write_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_polarity_low, mask, polarity_low, 0);
+ }
+
+ return err_flag;
+}
+
+pm_err_flag_type pm_smbchg_usb_chgpth_irq_status(uint32 device_index, pm_smbchg_usb_chgpth_irq_type irq, pm_irq_status_type type, boolean *status)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+ pm_register_data_type data;
+ uint8 mask = 1 << irq;
+ pm_register_address_type int_sts;
+ pm_smbchg_data_type *smbchg_ptr = pm_smbchg_get_data(device_index);
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else if (irq >= PM_SMBCHG_USB_CHGPTH_IRQ_INVALID)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ switch (type)
+ {
+ case PM_IRQ_STATUS_RT:
+ int_sts = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_rt_sts;
+ break;
+ case PM_IRQ_STATUS_LATCHED:
+ int_sts = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_latched_sts;
+ break;
+ case PM_IRQ_STATUS_PENDING:
+ int_sts = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->int_pending_sts;
+ break;
+ default:
+ return PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+
+ err_flag = pm_comm_read_byte_mask(smbchg_ptr->comm_ptr->slave_id, int_sts, mask, &data, 0);
+ *status = data ? TRUE : FALSE;
+ }
+ return err_flag;
+}
+
+
+static inline pm_err_flag_type pm_smbchg_usb_chgpth_unlock_perph_write(pm_smbchg_data_type *smbchg_ptr)
+{
+ pm_err_flag_type err_flag = PM_ERR_FLAG__SUCCESS;
+
+ if (NULL == smbchg_ptr)
+ {
+ err_flag = PM_ERR_FLAG__FEATURE_NOT_SUPPORTED;
+ }
+ else
+ {
+ pm_register_address_type sec_access = smbchg_ptr->smbchg_register->usb_chgpth_register->base_address + smbchg_ptr->smbchg_register->usb_chgpth_register->sec_access;
+ err_flag = pm_comm_write_byte(smbchg_ptr->comm_ptr->slave_id, sec_access, 0xA5, 0);
+ }
+
+ return err_flag;
+}
+
+
+/*Find the nearest register value corresponding to input_data*/
+static void pm_smbchg_usb_chgpth_return_reg_value(uint32 input_data, uint32 *array, uint32 array_size, pm_register_data_type *reg_value)
+{
+ uint32 loc = 0;
+
+ /*checking lower bound*/
+ input_data = (array[0]>input_data)? array[0]: input_data;
+
+ while (loc < array_size)
+ {
+ if (input_data < array[loc])
+ {
+ break;
+ }
+ else
+ {
+ loc++;
+ }
+ }
+
+ *reg_value = (loc) ? (loc - 1) : 0;
+
+ return;
+}
+
+
+
+/*@todo: need more info to implement below
+pm_smbchg_usb_chgpth_set_wi_pwr_options(uint32 device_index)
+pm_smbchg_usb_chgpth_get_wi_pwr_options(uint32 device_index)
+*/
diff --git a/dev/pmic/pmi8994/rules.mk b/dev/pmic/pmi8994/rules.mk
new file mode 100644
index 0000000..bbf41d0
--- /dev/null
+++ b/dev/pmic/pmi8994/rules.mk
@@ -0,0 +1,16 @@
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+INCLUDES += -I$(LOCAL_DIR)/include
+
+OBJS += \
+ $(LOCAL_DIR)/pm_app_smbchg.o \
+ $(LOCAL_DIR)/pm_config_target.o \
+ $(LOCAL_DIR)/pm_smbchg_bat_if.o \
+ $(LOCAL_DIR)/pm_smbchg_dc_chgpth.o\
+ $(LOCAL_DIR)/pm_smbchg_misc.o \
+ $(LOCAL_DIR)/pm_comm_spmi_lite.o \
+ $(LOCAL_DIR)/pm_fg_adc_usr.o \
+ $(LOCAL_DIR)/pm_fg_driver.o \
+ $(LOCAL_DIR)/pm_smbchg_chgr.o \
+ $(LOCAL_DIR)/pm_smbchg_driver.o \
+ $(LOCAL_DIR)/pm_smbchg_usb_chgpth.o
diff --git a/include/sys/types.h b/include/sys/types.h
index 9b26eeb..3ef3508 100644
--- a/include/sys/types.h
+++ b/include/sys/types.h
@@ -58,6 +58,23 @@
typedef unsigned long time_t;
typedef unsigned long long bigtime_t;
+typedef uint8_t uint8;
+typedef uint16_t uint16;
+typedef uint32_t uint32;
+typedef uint64_t uint64;
+typedef int boolean;
+typedef int8_t int8;
+typedef int16_t int16;
+typedef int32_t int32;
+typedef bool boolean;
+
+#ifndef TRUE
+#define TRUE true
+#endif
+#ifndef FALSE
+#define FALSE false
+#endif
+
#define INFINITE_TIME ULONG_MAX
#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
diff --git a/platform/mdmfermium/acpuclock.c b/platform/mdmfermium/acpuclock.c
new file mode 100644
index 0000000..7463222
--- /dev/null
+++ b/platform/mdmfermium/acpuclock.c
@@ -0,0 +1,47 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <err.h>
+#include <assert.h>
+#include <debug.h>
+#include <reg.h>
+#include <platform/timer.h>
+#include <platform/iomap.h>
+#include <clock.h>
+#include <platform/clock.h>
+#include <platform.h>
+
+void hsusb_clock_init(void)
+{
+
+}
+
+/* Configure UART clock based on the UART block id*/
+void clock_config_uart_dm(uint8_t id)
+{
+
+}
diff --git a/platform/mdmfermium/gpio.c b/platform/mdmfermium/gpio.c
new file mode 100644
index 0000000..fba2c76
--- /dev/null
+++ b/platform/mdmfermium/gpio.c
@@ -0,0 +1,77 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <debug.h>
+#include <reg.h>
+#include <platform/iomap.h>
+#include <platform/gpio.h>
+#include <blsp_qup.h>
+
+void gpio_tlmm_config(uint32_t gpio, uint8_t func,
+ uint8_t dir, uint8_t pull,
+ uint8_t drvstr, uint32_t enable)
+{
+ uint32_t val = 0;
+
+ val |= pull;
+ val |= func << 2;
+ val |= drvstr << 6;
+ val |= enable << 9;
+
+ writel(val, (uint32_t *)GPIO_CONFIG_ADDR(gpio));
+ return;
+}
+
+void gpio_set_dir(uint32_t gpio, uint32_t dir)
+{
+ writel(dir, (uint32_t *)GPIO_IN_OUT_ADDR(gpio));
+
+ return;
+}
+
+uint32_t gpio_get_state(uint32_t gpio)
+{
+ return readl(GPIO_IN_OUT_ADDR(gpio));
+}
+
+uint32_t gpio_status(uint32_t gpio)
+{
+ return readl(GPIO_IN_OUT_ADDR(gpio)) & GPIO_IN;
+}
+
+/* Configure gpio for blsp uart 2 */
+void gpio_config_uart_dm(uint8_t id)
+{
+ /* configure rx gpio */
+ gpio_tlmm_config(5, 2, GPIO_INPUT, GPIO_NO_PULL,
+ GPIO_8MA, GPIO_DISABLE);
+
+ /* configure tx gpio */
+ gpio_tlmm_config(4, 2, GPIO_OUTPUT, GPIO_NO_PULL,
+ GPIO_8MA, GPIO_DISABLE);
+}
diff --git a/platform/mdmfermium/include/platform/clock.h b/platform/mdmfermium/include/platform/clock.h
new file mode 100644
index 0000000..e3811ff
--- /dev/null
+++ b/platform/mdmfermium/include/platform/clock.h
@@ -0,0 +1,41 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MDMFERMIUM_CLOCK_H
+#define __MDMFERMIUM_CLOCK_H
+
+#include <clock.h>
+#include <clock_lib2.h>
+
+#define UART_DM_CLK_RX_TX_BIT_RATE 0xCC
+
+void platform_clock_init(void);
+
+void clock_config_uart_dm(uint8_t id);
+void hsusb_clock_init(void);
+#endif
diff --git a/platform/mdmfermium/include/platform/gpio.h b/platform/mdmfermium/include/platform/gpio.h
new file mode 100644
index 0000000..aa3a38e
--- /dev/null
+++ b/platform/mdmfermium/include/platform/gpio.h
@@ -0,0 +1,72 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __PLATFORM_MDMFERMIUM_GPIO_H
+#define __PLATFORM_MDMFERMIUM_GPIO_H
+
+#include <bits.h>
+#include <gpio.h>
+
+/* GPIO TLMM: Direction */
+#define GPIO_INPUT 0
+#define GPIO_OUTPUT 1
+
+/* GPIO TLMM: Pullup/Pulldown */
+#define GPIO_NO_PULL 0
+#define GPIO_PULL_DOWN 1
+#define GPIO_KEEPER 2
+#define GPIO_PULL_UP 3
+
+/* GPIO TLMM: Drive Strength */
+#define GPIO_2MA 0
+#define GPIO_4MA 1
+#define GPIO_6MA 2
+#define GPIO_8MA 3
+#define GPIO_10MA 4
+#define GPIO_12MA 5
+#define GPIO_14MA 6
+#define GPIO_16MA 7
+
+/* GPIO TLMM: Status */
+#define GPIO_ENABLE 0
+#define GPIO_DISABLE 1
+
+/* GPIO_IN_OUT register shifts. */
+#define GPIO_IN BIT(0)
+#define GPIO_OUT BIT(1)
+
+void gpio_config_uart_dm(uint8_t id);
+uint32_t gpio_status(uint32_t gpio);
+void gpio_set_dir(uint32_t gpio, uint32_t dir);
+void gpio_tlmm_config(uint32_t gpio,
+ uint8_t func,
+ uint8_t dir,
+ uint8_t pull,
+ uint8_t drvstr,
+ uint32_t enable);
+#endif
diff --git a/platform/mdmfermium/include/platform/iomap.h b/platform/mdmfermium/include/platform/iomap.h
new file mode 100644
index 0000000..852e5a9
--- /dev/null
+++ b/platform/mdmfermium/include/platform/iomap.h
@@ -0,0 +1,112 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _PLATFORM_MDMFERMIUM_IOMAP_H_
+#define _PLATFORM_MDMFERMIUM_IOMAP_H_
+
+#define MSM_IOMAP_BASE 0x00000000
+#define MSM_IOMAP_END 0x08000000
+
+#define A7_SS_BASE 0x0B000000
+#define A7_SS_END 0x0B200000
+
+#define SDRAM_START_ADDR 0x80000000
+
+#define SYSTEM_IMEM_BASE 0x08600000
+#define MSM_SHARED_BASE 0x87D00000
+#define MSM_SHARED_IMEM_BASE 0x08600000
+
+#define BS_INFO_OFFSET (0x6B0)
+#define BS_INFO_ADDR (MSM_SHARED_IMEM_BASE + BS_INFO_OFFSET)
+
+#define RESTART_REASON_ADDR (MSM_SHARED_IMEM_BASE + 0x65C)
+
+#define MSM_NAND_BASE 0x79B0000
+/* NAND BAM */
+#define MSM_NAND_BAM_BASE 0x7984000
+
+#define APPS_SS_BASE 0x0B000000
+
+#define MSM_GIC_DIST_BASE APPS_SS_BASE
+#define MSM_GIC_CPU_BASE (APPS_SS_BASE + 0x2000)
+#define APPS_APCS_QTMR_AC_BASE (APPS_SS_BASE + 0x00020000)
+#define APPS_APCS_F0_QTMR_V1_BASE (APPS_SS_BASE + 0x00021000)
+#define APCS_ALIAS0_IPC_INTERRUPT (APPS_SS_BASE + 0x00011008)
+#define QTMR_BASE APPS_APCS_F0_QTMR_V1_BASE
+
+#define PERIPH_SS_BASE 0x07800000
+
+
+#define BLSP1_UART0_BASE (PERIPH_SS_BASE + 0x000AF000)
+#define BLSP1_UART1_BASE (PERIPH_SS_BASE + 0x000B0000)
+#define MSM_USB_BASE (PERIPH_SS_BASE + 0x000D9000)
+
+#define CLK_CTL_BASE 0x1800000
+
+#define SPMI_BASE 0x02000000
+#define SPMI_GENI_BASE (SPMI_BASE + 0xA000)
+#define SPMI_PIC_BASE (SPMI_BASE + 0x01800000)
+#define PMIC_ARB_CORE 0x200F000
+
+#define TLMM_BASE_ADDR 0x1000000
+#define GPIO_CONFIG_ADDR(x) (TLMM_BASE_ADDR + (x)*0x1000)
+#define GPIO_IN_OUT_ADDR(x) (TLMM_BASE_ADDR + 0x00000004 + (x)*0x1000)
+
+#define MPM2_MPM_CTRL_BASE 0x004A0000
+#define MPM2_MPM_PS_HOLD 0x004AB000
+#define MPM2_MPM_SLEEP_TIMETICK_COUNT_VAL 0x004A3000
+
+/* CRYPTO ENGINE */
+#define MSM_CE1_BASE 0x073A000
+#define MSM_CE1_BAM_BASE 0x0704000
+
+
+/* GPLL */
+#define GPLL0_STATUS (CLK_CTL_BASE + 0x21024)
+#define APCS_GPLL_ENA_VOTE (CLK_CTL_BASE + 0x45000)
+#define APCS_CLOCK_BRANCH_ENA_VOTE (CLK_CTL_BASE + 0x45004)
+
+/* UART */
+#define BLSP1_AHB_CBCR (CLK_CTL_BASE + 0x1008)
+#define BLSP1_UART2_APPS_CBCR (CLK_CTL_BASE + 0x302C)
+#define BLSP1_UART2_APPS_CMD_RCGR (CLK_CTL_BASE + 0x3034)
+#define BLSP1_UART2_APPS_CFG_RCGR (CLK_CTL_BASE + 0x3038)
+#define BLSP1_UART2_APPS_M (CLK_CTL_BASE + 0x303C)
+#define BLSP1_UART2_APPS_N (CLK_CTL_BASE + 0x3040)
+#define BLSP1_UART2_APPS_D (CLK_CTL_BASE + 0x3044)
+
+/* USB */
+#define USB_HS_BCR (CLK_CTL_BASE + 0x41000)
+#define USB_HS_SYSTEM_CBCR (CLK_CTL_BASE + 0x41004)
+#define USB_HS_AHB_CBCR (CLK_CTL_BASE + 0x41008)
+#define USB_HS_SYSTEM_CMD_RCGR (CLK_CTL_BASE + 0x41010)
+#define USB_HS_SYSTEM_CFG_RCGR (CLK_CTL_BASE + 0x41014)
+
+#define TCSR_TZ_WONCE 0x193D000
+#define TCSR_BOOT_MISC_DETECT 0x193D100
+#endif
diff --git a/platform/mdmfermium/include/platform/irqs.h b/platform/mdmfermium/include/platform/irqs.h
new file mode 100644
index 0000000..8738b97
--- /dev/null
+++ b/platform/mdmfermium/include/platform/irqs.h
@@ -0,0 +1,64 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __IRQS_MDMFERMIUM_H
+#define __IRQS_MDMFERMIUM_H
+
+/* MSM ACPU Interrupt Numbers */
+
+/* 0-15: STI/SGI (software triggered/generated interrupts)
+ * 16-31: PPI (private peripheral interrupts)
+ * 32+: SPI (shared peripheral interrupts)
+ */
+
+#define GIC_PPI_START 16
+#define GIC_SPI_START 32
+
+#define INT_QTMR_NON_SECURE_PHY_TIMER_EXP (GIC_PPI_START + 3)
+#define INT_QTMR_VIRTUAL_TIMER_EXP (GIC_PPI_START + 4)
+
+#define INT_QTMR_FRM_0_PHYSICAL_TIMER_EXP (GIC_SPI_START + 7)
+
+#define USB1_HS_BAM_IRQ (GIC_SPI_START + 135)
+#define USB1_HS_IRQ (GIC_SPI_START + 134)
+
+/* Retrofit universal macro names */
+#define INT_USB_HS USB1_HS_IRQ
+
+#define EE0_KRAIT_HLOS_SPMI_PERIPH_IRQ (GIC_SPI_START + 190)
+
+#define SMD_IRQ (GIC_SPI_START + 168)
+
+#define NR_MSM_IRQS 256
+#define NR_GPIO_IRQS 173
+#define NR_BOARD_IRQS 0
+
+#define NR_IRQS (NR_MSM_IRQS + NR_GPIO_IRQS + \
+ NR_BOARD_IRQS)
+
+#endif /* __IRQS_MDMFERMIUM_H */
diff --git a/platform/mdmfermium/mdmfermium-clock.c b/platform/mdmfermium/mdmfermium-clock.c
new file mode 100644
index 0000000..235d40f
--- /dev/null
+++ b/platform/mdmfermium/mdmfermium-clock.c
@@ -0,0 +1,233 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <assert.h>
+#include <reg.h>
+#include <err.h>
+#include <clock.h>
+#include <clock_pll.h>
+#include <clock_lib2.h>
+#include <platform/clock.h>
+#include <platform/iomap.h>
+#include <platform.h>
+
+/* Mux source select values */
+#define cxo_source_val 0
+#define gpll0_source_val 1
+#define gpll4_source_val 2
+#define cxo_mm_source_val 0
+#define gpll0_mm_source_val 1
+
+struct clk_freq_tbl rcg_dummy_freq = F_END;
+
+
+/* Clock Operations */
+static struct clk_ops clk_ops_branch =
+{
+ .enable = clock_lib2_branch_clk_enable,
+ .disable = clock_lib2_branch_clk_disable,
+ .set_rate = clock_lib2_branch_set_rate,
+};
+
+static struct clk_ops clk_ops_rcg_mnd =
+{
+ .enable = clock_lib2_rcg_enable,
+ .set_rate = clock_lib2_rcg_set_rate,
+};
+
+static struct clk_ops clk_ops_rcg =
+{
+ .enable = clock_lib2_rcg_enable,
+ .set_rate = clock_lib2_rcg_set_rate,
+};
+
+static struct clk_ops clk_ops_cxo =
+{
+ .enable = cxo_clk_enable,
+ .disable = cxo_clk_disable,
+};
+
+static struct clk_ops clk_ops_pll_vote =
+{
+ .enable = pll_vote_clk_enable,
+ .disable = pll_vote_clk_disable,
+ .auto_off = pll_vote_clk_disable,
+ .is_enabled = pll_vote_clk_is_enabled,
+};
+
+static struct clk_ops clk_ops_vote =
+{
+ .enable = clock_lib2_vote_clk_enable,
+ .disable = clock_lib2_vote_clk_disable,
+};
+
+/* Clock Sources */
+static struct fixed_clk cxo_clk_src =
+{
+ .c = {
+ .rate = 19200000,
+ .dbg_name = "cxo_clk_src",
+ .ops = &clk_ops_cxo,
+ },
+};
+
+static struct pll_vote_clk gpll0_clk_src =
+{
+ .en_reg = (void *) APCS_GPLL_ENA_VOTE,
+ .en_mask = BIT(0),
+ .status_reg = (void *) GPLL0_STATUS,
+ .status_mask = BIT(17),
+ .parent = &cxo_clk_src.c,
+
+ .c = {
+ .rate = 800000000,
+ .dbg_name = "gpll0_clk_src",
+ .ops = &clk_ops_pll_vote,
+ },
+};
+
+/* UART Clocks */
+static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_2_apps_clk[] =
+{
+ F( 3686400, gpll0, 1, 72, 15625),
+ F( 7372800, gpll0, 1, 144, 15625),
+ F(14745600, gpll0, 1, 288, 15625),
+ F(16000000, gpll0, 10, 1, 5),
+ F(19200000, cxo, 1, 0, 0),
+ F(24000000, gpll0, 1, 3, 100),
+ F(25000000, gpll0, 16, 1, 2),
+ F(32000000, gpll0, 1, 1, 25),
+ F(40000000, gpll0, 1, 1, 20),
+ F(46400000, gpll0, 1, 29, 500),
+ F(48000000, gpll0, 1, 3, 50),
+ F(51200000, gpll0, 1, 8, 125),
+ F(56000000, gpll0, 1, 7, 100),
+ F(58982400, gpll0, 1,1152, 15625),
+ F(60000000, gpll0, 1, 3, 40),
+ F_END
+};
+
+static struct rcg_clk blsp1_uart2_apps_clk_src =
+{
+ .cmd_reg = (uint32_t *) BLSP1_UART2_APPS_CMD_RCGR,
+ .cfg_reg = (uint32_t *) BLSP1_UART2_APPS_CFG_RCGR,
+ .m_reg = (uint32_t *) BLSP1_UART2_APPS_M,
+ .n_reg = (uint32_t *) BLSP1_UART2_APPS_N,
+ .d_reg = (uint32_t *) BLSP1_UART2_APPS_D,
+
+ .set_rate = clock_lib2_rcg_set_rate_mnd,
+ .freq_tbl = ftbl_gcc_blsp1_2_uart1_2_apps_clk,
+ .current_freq = &rcg_dummy_freq,
+
+ .c = {
+ .dbg_name = "blsp1_uart2_apps_clk",
+ .ops = &clk_ops_rcg_mnd,
+ },
+};
+
+static struct branch_clk gcc_blsp1_uart2_apps_clk =
+{
+ .cbcr_reg = (uint32_t *) BLSP1_UART2_APPS_CBCR,
+ .parent = &blsp1_uart2_apps_clk_src.c,
+
+ .c = {
+ .dbg_name = "gcc_blsp1_uart2_apps_clk",
+ .ops = &clk_ops_branch,
+ },
+};
+
+static struct vote_clk gcc_blsp1_ahb_clk = {
+ .cbcr_reg = (uint32_t *) BLSP1_AHB_CBCR,
+ .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
+ .en_mask = BIT(10),
+
+ .c = {
+ .dbg_name = "gcc_blsp1_ahb_clk",
+ .ops = &clk_ops_vote,
+ },
+};
+
+/* USB Clocks */
+static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] =
+{
+ F(133330000, gpll0, 6, 0, 0),
+ F_END
+};
+
+static struct rcg_clk usb_hs_system_clk_src =
+{
+ .cmd_reg = (uint32_t *) USB_HS_SYSTEM_CMD_RCGR,
+ .cfg_reg = (uint32_t *) USB_HS_SYSTEM_CFG_RCGR,
+
+ .set_rate = clock_lib2_rcg_set_rate_hid,
+ .freq_tbl = ftbl_gcc_usb_hs_system_clk,
+ .current_freq = &rcg_dummy_freq,
+
+ .c = {
+ .dbg_name = "usb_hs_system_clk",
+ .ops = &clk_ops_rcg,
+ },
+};
+
+static struct branch_clk gcc_usb_hs_system_clk =
+{
+ .cbcr_reg = (uint32_t *) USB_HS_SYSTEM_CBCR,
+ .parent = &usb_hs_system_clk_src.c,
+
+ .c = {
+ .dbg_name = "gcc_usb_hs_system_clk",
+ .ops = &clk_ops_branch,
+ },
+};
+
+static struct branch_clk gcc_usb_hs_ahb_clk =
+{
+ .cbcr_reg = (uint32_t *) USB_HS_AHB_CBCR,
+ .has_sibling = 1,
+
+ .c = {
+ .dbg_name = "gcc_usb_hs_ahb_clk",
+ .ops = &clk_ops_branch,
+ },
+};
+
+/* Clock lookup table */
+static struct clk_lookup mdm_clocks_fermium[] =
+{
+ CLK_LOOKUP("uart2_iface_clk", gcc_blsp1_ahb_clk.c),
+ CLK_LOOKUP("uart2_core_clk", gcc_blsp1_uart2_apps_clk.c),
+
+ CLK_LOOKUP("usb_iface_clk", gcc_usb_hs_ahb_clk.c),
+ CLK_LOOKUP("usb_core_clk", gcc_usb_hs_system_clk.c),
+
+};
+
+void platform_clock_init(void)
+{
+ clk_init(mdm_clocks_fermium, ARRAY_SIZE(mdm_clocks_fermium));
+}
diff --git a/platform/mdmfermium/platform.c b/platform/mdmfermium/platform.c
new file mode 100644
index 0000000..7d05f04
--- /dev/null
+++ b/platform/mdmfermium/platform.c
@@ -0,0 +1,69 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <debug.h>
+#include <reg.h>
+#include <platform/iomap.h>
+#include <qgic.h>
+#include <qtimer.h>
+#include <mmu.h>
+#include <arch/arm/mmu.h>
+#include <smem.h>
+
+void platform_early_init(void)
+{
+ qgic_init();
+ qtimer_init();
+// scm_init();
+}
+
+void platform_init(void)
+{
+ dprintf(INFO, "platform_init()\n");
+}
+
+void platform_uninit(void)
+{
+ qtimer_uninit();
+}
+
+uint32_t platform_get_sclk_count(void)
+{
+ return readl(MPM2_MPM_SLEEP_TIMETICK_COUNT_VAL);
+}
+
+addr_t get_bs_info_addr()
+{
+ return ((addr_t)BS_INFO_ADDR);
+}
+
+int platform_use_identity_mmu_mappings(void)
+{
+ /* Use only the mappings specified in this file. */
+ return 1;
+}
diff --git a/platform/mdmfermium/rules.mk b/platform/mdmfermium/rules.mk
new file mode 100644
index 0000000..d5f789a
--- /dev/null
+++ b/platform/mdmfermium/rules.mk
@@ -0,0 +1,23 @@
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+ARCH := arm
+ARM_CPU := cortex-a8
+CPU := generic
+
+DEFINES += ARM_CPU_CORE_A7
+
+
+DEFINES += PERIPH_BLK_BLSP=1
+DEFINES += WITH_CPU_EARLY_INIT=0 WITH_CPU_WARM_BOOT=0
+
+INCLUDES += -I$(LOCAL_DIR)/include -I$(LK_TOP_DIR)/platform/msm_shared/include
+
+OBJS += \
+ $(LOCAL_DIR)/platform.o \
+ $(LOCAL_DIR)/acpuclock.o \
+ $(LOCAL_DIR)/gpio.o \
+ $(LOCAL_DIR)/mdmfermium-clock.o
+
+LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld
+
+include platform/msm_shared/rules.mk
diff --git a/platform/msm8996/include/platform/iomap.h b/platform/msm8996/include/platform/iomap.h
index 2244632..ea2a0bf 100644
--- a/platform/msm8996/include/platform/iomap.h
+++ b/platform/msm8996/include/platform/iomap.h
@@ -161,7 +161,7 @@
/* QSEECOM: Secure app region notification */
#define APP_REGION_ADDR 0x86600000
-#define APP_REGION_SIZE 0xd00000
+#define APP_REGION_SIZE 0x2200000
/* DRV strength for sdcc */
#define SDC1_HDRV_PULL_CTL (TLMM_BASE_ADDR + 0x0012C000)
@@ -527,9 +527,4 @@
#define QPNP_GREEN_LPG_CTRL_BASE 0xB200
#define QPNP_RED_LPG_CTRL_BASE 0xB300
-#define APSS_WDOG_BASE 0x9830000
-#define APPS_WDOG_BARK_VAL_REG (APSS_WDOG_BASE + 0x10)
-#define APPS_WDOG_BITE_VAL_REG (APSS_WDOG_BASE + 0x14)
-#define APPS_WDOG_RESET_REG (APSS_WDOG_BASE + 0x04)
-#define APPS_WDOG_CTL_REG (APSS_WDOG_BASE + 0x08)
#endif
diff --git a/platform/msm_shared/include/crypto_hash.h b/platform/msm_shared/include/crypto_hash.h
index 44e227a..4faca91 100644
--- a/platform/msm_shared/include/crypto_hash.h
+++ b/platform/msm_shared/include/crypto_hash.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,13 +29,12 @@
#ifndef __CRYPTO_HASH_H__
#define __CRYPYO_HASH_H__
+#include <sys/types.h>
+
#ifndef NULL
#define NULL 0
#endif
-#define TRUE 1
-#define FALSE 0
-
#define SHA256_INIT_VECTOR_SIZE 8
#define SHA1_INIT_VECTOR_SIZE 5
diff --git a/platform/msm_shared/include/glink_os_type.h b/platform/msm_shared/include/glink_os_type.h
index 091ad05..a129372 100644
--- a/platform/msm_shared/include/glink_os_type.h
+++ b/platform/msm_shared/include/glink_os_type.h
@@ -40,6 +40,7 @@
INCLUDE FILES
===========================================================================*/
+#include <sys/types.h>
#include <string.h>
#include <assert.h>
@@ -55,13 +56,6 @@
#define DALSYS_SYNC_OBJ_SIZE_BYTES 40
#define DALSYS_EVENT_OBJ_SIZE_BYTES 80
-typedef bool boolean;
-typedef uint64_t uint64;
-typedef uint32_t uint32;
-typedef long int32;
-#define TRUE 1
-#define FALSE 0
-
typedef struct DALSYSEventObj DALSYSEventObj;
struct DALSYSEventObj
diff --git a/platform/msm_shared/include/mmc_sdhci.h b/platform/msm_shared/include/mmc_sdhci.h
index 6ef404b..54f09ee 100644
--- a/platform/msm_shared/include/mmc_sdhci.h
+++ b/platform/msm_shared/include/mmc_sdhci.h
@@ -89,6 +89,7 @@
#define MMC_EXT_CSD_RST_N_FUNC 162
#define MMC_EXT_MMC_BUS_WIDTH 183
#define MMC_EXT_MMC_HS_TIMING 185
+#define MMC_EXT_CSD_REV 192
#define MMC_DEVICE_TYPE 196
#define MMC_EXT_MMC_DRV_STRENGTH 197
#define MMC_EXT_HC_WP_GRP_SIZE 221
@@ -102,6 +103,7 @@
#define MMC_ERASE_TIMEOUT_MULT 223
#define MMC_HC_ERASE_GRP_SIZE 224
#define MMC_PARTITION_CONFIG 179
+#define MMC_EXT_CSD_EN_RPMB_REL_WR 166 //emmc 5.1 and above
/* Values for ext csd fields */
#define MMC_HS_TIMING 0x1
diff --git a/platform/msm_shared/include/msm_panel.h b/platform/msm_shared/include/msm_panel.h
index 7a3b014..03c8ae9 100755
--- a/platform/msm_shared/include/msm_panel.h
+++ b/platform/msm_shared/include/msm_panel.h
@@ -30,12 +30,10 @@
#ifndef _PLATFORM_MSM_SHARED_MSM_PANEL_H_
#define _PLATFORM_MSM_SHARED_MSM_PANEL_H_
+#include <sys/types.h>
#include <stdint.h>
#include <dev/fbcon.h>
-#define TRUE 1
-#define FALSE 0
-
#define DFPS_MAX_FRAME_RATE 10
#define DFPS_PLL_CODES_SIZE 0x1000 /* One page */
diff --git a/platform/msm_shared/include/rpmb.h b/platform/msm_shared/include/rpmb.h
index 6cd7ecd..f954dfb 100644
--- a/platform/msm_shared/include/rpmb.h
+++ b/platform/msm_shared/include/rpmb.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -147,15 +147,15 @@
int write_device_info_rpmb(void *info, uint32_t sz);
/* Function Prototypes */
-int rpmb_write_emmc(struct mmc_device *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len);
+int rpmb_write_emmc(struct mmc_device *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t rel_wr_count, uint32_t *resp_buf, uint32_t *resp_len);
int rpmb_read_emmc(struct mmc_device *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len);
-int rpmb_write_ufs(struct ufs_dev *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len);
+int rpmb_write_ufs(struct ufs_dev *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t rel_wr_count, uint32_t *resp_buf, uint32_t *resp_len);
int rpmb_read_ufs(struct ufs_dev *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len);
/* APIs exposed to applications */
int rpmb_init();
int rpmb_uninit();
-int rpmb_write(uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len);
+int rpmb_write(uint32_t *req_buf, uint32_t blk_cnt, uint32_t rel_wr_count, uint32_t *resp_buf, uint32_t *resp_len);
int rpmb_read(uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len);
struct rpmb_init_info *rpmb_get_init_info();
int rpmb_get_app_handle();
diff --git a/platform/msm_shared/include/sdhci.h b/platform/msm_shared/include/sdhci.h
index c0b484d..64fb2b0 100644
--- a/platform/msm_shared/include/sdhci.h
+++ b/platform/msm_shared/include/sdhci.h
@@ -102,6 +102,7 @@
uint64_t cmd_timeout; /* Command timeout in us */
bool write_flag; /* Write flag, for reliable write cases */
struct mmc_data data; /* Data pointer */
+ uint8_t rel_write; /* Reliable write enable flag */
};
/*
diff --git a/platform/msm_shared/include/splash.h b/platform/msm_shared/include/splash.h
index 76e867d..badb8d0 100644
--- a/platform/msm_shared/include/splash.h
+++ b/platform/msm_shared/include/splash.h
@@ -8806,6 +8806,6452 @@
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
+
+#if ENABLE_WBC
+static char image_batt888[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05,
+ 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x05, 0x05, 0x05,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x05, 0x05, 0x05, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x05, 0x05,
+ 0x05, 0x05, 0x05, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x05,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08,
+ 0x07, 0x07, 0x07, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07,
+ 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07,
+ 0x07, 0x08, 0x07, 0x07, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x04, 0x04,
+ 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x02, 0x02, 0x00, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x02, 0x03, 0x04, 0x03,
+ 0x04, 0x04, 0x03, 0x07, 0x07, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x0a, 0x09, 0x0a,
+ 0x09, 0x09, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09,
+ 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x02, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x08, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x09,
+ 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x06, 0x06, 0x06, 0x05, 0x05,
+ 0x06, 0x05, 0x05, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x02, 0x03,
+ 0x01, 0x01, 0x02, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x02,
+ 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08,
+ 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09,
+ 0x0a, 0x09, 0x0a, 0x09, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x0a, 0x0a,
+ 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07,
+ 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x01,
+ 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x04, 0x03, 0x03, 0x03, 0x02, 0x02,
+ 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06,
+ 0x08, 0x09, 0x09, 0x07, 0x08, 0x08, 0x07, 0x08, 0x08, 0x08, 0x09, 0x09,
+ 0x08, 0x07, 0x08, 0x09, 0x07, 0x09, 0x08, 0x08, 0x09, 0x05, 0x07, 0x07,
+ 0x05, 0x06, 0x06, 0x07, 0x06, 0x07, 0x04, 0x04, 0x06, 0x04, 0x03, 0x03,
+ 0x06, 0x04, 0x05, 0x05, 0x03, 0x02, 0x05, 0x04, 0x01, 0x02, 0x02, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, 0x01, 0x00, 0x02,
+ 0x04, 0x01, 0x00, 0x04, 0x01, 0x00, 0x03, 0x02, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x01, 0x03, 0x00, 0x03,
+ 0x02, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x01, 0x03, 0x00,
+ 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01,
+ 0x01, 0x00, 0x03, 0x02, 0x00, 0x03, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+ 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x04, 0x05, 0x05, 0x06, 0x05, 0x05, 0x06, 0x06, 0x07, 0x08,
+ 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0b, 0x09, 0x0a, 0x0a,
+ 0x0a, 0x0b, 0x0b, 0x09, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x09, 0x0a, 0x0a,
+ 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
+ 0x08, 0x08, 0x08, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x03, 0x02, 0x02, 0x03, 0x01, 0x01, 0x05, 0x02, 0x02, 0x05, 0x02, 0x02,
+ 0x04, 0x03, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x07, 0x07, 0x07,
+ 0x05, 0x05, 0x05, 0x0a, 0x0a, 0x0a, 0x06, 0x08, 0x08, 0x07, 0x08, 0x08,
+ 0x0a, 0x0a, 0x0b, 0x07, 0x07, 0x08, 0x09, 0x08, 0x0a, 0x09, 0x08, 0x0a,
+ 0x05, 0x08, 0x07, 0x03, 0x07, 0x07, 0x07, 0x08, 0x09, 0x05, 0x05, 0x07,
+ 0x05, 0x03, 0x04, 0x09, 0x06, 0x07, 0x08, 0x05, 0x02, 0x07, 0x05, 0x01,
+ 0x03, 0x04, 0x00, 0x01, 0x02, 0x02, 0x00, 0x01, 0x03, 0x00, 0x01, 0x04,
+ 0x02, 0x01, 0x03, 0x06, 0x01, 0x00, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01,
+ 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01,
+ 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01,
+ 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x00, 0x02,
+ 0x05, 0x00, 0x04, 0x03, 0x00, 0x04, 0x01, 0x01, 0x01, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x00,
+ 0x02, 0x05, 0x00, 0x01, 0x01, 0x03, 0x01, 0x00, 0x05, 0x01, 0x01, 0x01,
+ 0x02, 0x03, 0x02, 0x02, 0x01, 0x05, 0x02, 0x00, 0x05, 0x01, 0x00, 0x02,
+ 0x02, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x02, 0x01, 0x03,
+ 0x02, 0x01, 0x03, 0x03, 0x02, 0x05, 0x06, 0x05, 0x07, 0x06, 0x06, 0x07,
+ 0x06, 0x08, 0x08, 0x05, 0x07, 0x08, 0x09, 0x0a, 0x0a, 0x0a, 0x0b, 0x0c,
+ 0x09, 0x0a, 0x0a, 0x0b, 0x0c, 0x0c, 0x09, 0x0a, 0x0a, 0x0b, 0x0d, 0x0c,
+ 0x0a, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x09, 0x09, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x03, 0x00, 0x02, 0x04, 0x02, 0x02, 0x04, 0x02, 0x02, 0x06, 0x03, 0x03,
+ 0x06, 0x02, 0x02, 0x04, 0x03, 0x03, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06,
+ 0x08, 0x08, 0x08, 0x04, 0x05, 0x05, 0x0a, 0x0c, 0x0c, 0x06, 0x09, 0x09,
+ 0x07, 0x09, 0x09, 0x0a, 0x0c, 0x0c, 0x07, 0x06, 0x08, 0x0a, 0x07, 0x0b,
+ 0x0a, 0x08, 0x0b, 0x04, 0x09, 0x08, 0x03, 0x09, 0x08, 0x08, 0x0a, 0x0b,
+ 0x06, 0x07, 0x09, 0x06, 0x03, 0x04, 0x0b, 0x08, 0x08, 0x0b, 0x07, 0x02,
+ 0x0a, 0x07, 0x00, 0x04, 0x06, 0x00, 0x01, 0x03, 0x02, 0x00, 0x02, 0x04,
+ 0x00, 0x02, 0x07, 0x04, 0x01, 0x04, 0x09, 0x02, 0x01, 0x09, 0x03, 0x00,
+ 0x06, 0x05, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00,
+ 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01,
+ 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01,
+ 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01,
+ 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03,
+ 0x07, 0x01, 0x03, 0x07, 0x01, 0x06, 0x04, 0x01, 0x05, 0x02, 0x02, 0x02,
+ 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00,
+ 0x01, 0x08, 0x00, 0x04, 0x07, 0x01, 0x02, 0x02, 0x04, 0x02, 0x01, 0x06,
+ 0x01, 0x02, 0x02, 0x03, 0x05, 0x03, 0x03, 0x01, 0x07, 0x03, 0x01, 0x08,
+ 0x02, 0x00, 0x04, 0x03, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04,
+ 0x03, 0x02, 0x04, 0x02, 0x01, 0x04, 0x03, 0x02, 0x06, 0x07, 0x06, 0x09,
+ 0x08, 0x07, 0x0a, 0x06, 0x08, 0x0a, 0x04, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0a, 0x0b, 0x0d, 0x08, 0x0b, 0x0b, 0x0c, 0x0e, 0x0e, 0x09, 0x0b, 0x0b,
+ 0x0d, 0x0f, 0x0e, 0x0a, 0x0c, 0x0c, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b,
+ 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x05,
+ 0x08, 0x08, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x02, 0x00, 0x02, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02,
+ 0x05, 0x03, 0x03, 0x05, 0x03, 0x03, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06,
+ 0x07, 0x07, 0x07, 0x08, 0x08, 0x09, 0x07, 0x07, 0x07, 0x0a, 0x0b, 0x0a,
+ 0x08, 0x0a, 0x09, 0x0a, 0x0c, 0x0b, 0x0b, 0x0c, 0x0c, 0x0a, 0x0a, 0x0b,
+ 0x0c, 0x0b, 0x0c, 0x0b, 0x0b, 0x0c, 0x06, 0x0e, 0x0a, 0x03, 0x0c, 0x09,
+ 0x06, 0x0c, 0x0a, 0x05, 0x0a, 0x09, 0x06, 0x07, 0x06, 0x0a, 0x0a, 0x07,
+ 0x0a, 0x09, 0x01, 0x08, 0x0a, 0x00, 0x03, 0x08, 0x00, 0x01, 0x06, 0x02,
+ 0x00, 0x05, 0x04, 0x00, 0x04, 0x07, 0x02, 0x04, 0x05, 0x06, 0x05, 0x01,
+ 0x07, 0x06, 0x00, 0x04, 0x07, 0x00, 0x02, 0x06, 0x00, 0x02, 0x06, 0x00,
+ 0x02, 0x06, 0x00, 0x01, 0x05, 0x00, 0x01, 0x05, 0x00, 0x01, 0x05, 0x00,
+ 0x01, 0x05, 0x00, 0x01, 0x05, 0x00, 0x01, 0x05, 0x00, 0x01, 0x05, 0x00,
+ 0x01, 0x05, 0x00, 0x01, 0x05, 0x00, 0x01, 0x05, 0x00, 0x01, 0x05, 0x00,
+ 0x01, 0x05, 0x00, 0x00, 0x05, 0x01, 0x00, 0x05, 0x01, 0x00, 0x05, 0x01,
+ 0x00, 0x05, 0x01, 0x00, 0x05, 0x01, 0x00, 0x05, 0x01, 0x00, 0x05, 0x01,
+ 0x00, 0x05, 0x01, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x01,
+ 0x00, 0x05, 0x01, 0x00, 0x05, 0x01, 0x00, 0x05, 0x01, 0x01, 0x06, 0x01,
+ 0x02, 0x05, 0x02, 0x05, 0x04, 0x02, 0x05, 0x03, 0x05, 0x03, 0x03, 0x04,
+ 0x02, 0x04, 0x01, 0x01, 0x09, 0x00, 0x01, 0x09, 0x00, 0x01, 0x08, 0x00,
+ 0x00, 0x08, 0x00, 0x01, 0x09, 0x00, 0x04, 0x09, 0x00, 0x03, 0x04, 0x03,
+ 0x02, 0x03, 0x05, 0x01, 0x05, 0x01, 0x02, 0x08, 0x02, 0x02, 0x04, 0x05,
+ 0x02, 0x04, 0x05, 0x01, 0x01, 0x03, 0x02, 0x00, 0x02, 0x02, 0x01, 0x03,
+ 0x03, 0x02, 0x03, 0x03, 0x02, 0x04, 0x03, 0x02, 0x05, 0x04, 0x03, 0x06,
+ 0x07, 0x06, 0x09, 0x08, 0x07, 0x0a, 0x07, 0x08, 0x0a, 0x07, 0x08, 0x0a,
+ 0x0a, 0x0a, 0x0a, 0x0b, 0x0c, 0x0c, 0x0b, 0x0d, 0x0c, 0x0f, 0x10, 0x0f,
+ 0x09, 0x0c, 0x0b, 0x0d, 0x0f, 0x0e, 0x0c, 0x0d, 0x0d, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+ 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05,
+ 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x09,
+ 0x09, 0x0a, 0x09, 0x0b, 0x0c, 0x0b, 0x0d, 0x0d, 0x0d, 0x0b, 0x0b, 0x0c,
+ 0x0f, 0x10, 0x0f, 0x0d, 0x0e, 0x0e, 0x0b, 0x0e, 0x0c, 0x09, 0x13, 0x0b,
+ 0x05, 0x10, 0x09, 0x04, 0x0f, 0x09, 0x05, 0x0e, 0x09, 0x06, 0x0b, 0x08,
+ 0x06, 0x0c, 0x04, 0x08, 0x0b, 0x01, 0x05, 0x0c, 0x00, 0x01, 0x0b, 0x00,
+ 0x00, 0x0a, 0x02, 0x00, 0x09, 0x04, 0x00, 0x08, 0x07, 0x01, 0x07, 0x05,
+ 0x03, 0x08, 0x01, 0x04, 0x08, 0x00, 0x02, 0x09, 0x00, 0x01, 0x08, 0x00,
+ 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x08, 0x00,
+ 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x08, 0x00,
+ 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x00, 0x09, 0x00,
+ 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x09, 0x01, 0x01, 0x08, 0x01, 0x03, 0x08, 0x02, 0x03, 0x07, 0x03,
+ 0x03, 0x07, 0x03, 0x02, 0x08, 0x02, 0x02, 0x0a, 0x00, 0x02, 0x0a, 0x00,
+ 0x02, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x0a, 0x00, 0x04, 0x0a, 0x00,
+ 0x05, 0x06, 0x03, 0x03, 0x07, 0x03, 0x01, 0x09, 0x01, 0x01, 0x0b, 0x01,
+ 0x01, 0x07, 0x02, 0x01, 0x07, 0x03, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x03, 0x06,
+ 0x05, 0x04, 0x07, 0x08, 0x07, 0x0a, 0x09, 0x08, 0x0a, 0x09, 0x09, 0x0a,
+ 0x0b, 0x0b, 0x0d, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0c, 0x0f, 0x10, 0x0f,
+ 0x11, 0x12, 0x11, 0x0a, 0x0c, 0x0a, 0x0e, 0x10, 0x0e, 0x0d, 0x0e, 0x0e,
+ 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0b, 0x0b, 0x0b, 0x09, 0x09, 0x09,
+ 0x09, 0x09, 0x09, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x04, 0x04, 0x04,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02,
+ 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04,
+ 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
+ 0x0c, 0x0c, 0x0a, 0x09, 0x09, 0x07, 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0d,
+ 0x09, 0x09, 0x0a, 0x0f, 0x10, 0x0e, 0x0f, 0x0f, 0x0f, 0x0c, 0x0d, 0x0b,
+ 0x0c, 0x15, 0x0c, 0x07, 0x11, 0x09, 0x03, 0x0e, 0x08, 0x06, 0x0f, 0x08,
+ 0x08, 0x0d, 0x09, 0x05, 0x0b, 0x03, 0x07, 0x0b, 0x00, 0x04, 0x0b, 0x01,
+ 0x01, 0x0b, 0x01, 0x00, 0x0a, 0x02, 0x00, 0x0a, 0x04, 0x00, 0x09, 0x07,
+ 0x00, 0x08, 0x06, 0x01, 0x08, 0x03, 0x03, 0x09, 0x02, 0x02, 0x08, 0x00,
+ 0x02, 0x08, 0x01, 0x02, 0x08, 0x01, 0x02, 0x08, 0x01, 0x02, 0x08, 0x01,
+ 0x02, 0x08, 0x01, 0x02, 0x08, 0x01, 0x02, 0x08, 0x01, 0x01, 0x08, 0x00,
+ 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x08, 0x00,
+ 0x02, 0x09, 0x01, 0x02, 0x09, 0x01, 0x02, 0x09, 0x01, 0x02, 0x08, 0x01,
+ 0x02, 0x08, 0x01, 0x02, 0x08, 0x01, 0x02, 0x08, 0x01, 0x02, 0x08, 0x01,
+ 0x02, 0x08, 0x01, 0x02, 0x08, 0x01, 0x02, 0x08, 0x01, 0x02, 0x09, 0x01,
+ 0x02, 0x09, 0x01, 0x02, 0x08, 0x01, 0x01, 0x08, 0x01, 0x01, 0x08, 0x01,
+ 0x01, 0x08, 0x01, 0x01, 0x08, 0x01, 0x00, 0x08, 0x00, 0x01, 0x09, 0x01,
+ 0x01, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x07, 0x02, 0x02, 0x09, 0x01,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x03, 0x02, 0x08, 0x03, 0x01, 0x08, 0x01,
+ 0x03, 0x08, 0x00, 0x04, 0x07, 0x02, 0x02, 0x07, 0x01, 0x00, 0x09, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03,
+ 0x03, 0x02, 0x05, 0x05, 0x03, 0x05, 0x07, 0x05, 0x07, 0x08, 0x07, 0x08,
+ 0x08, 0x07, 0x08, 0x0d, 0x0b, 0x0c, 0x0a, 0x09, 0x09, 0x0c, 0x0b, 0x0b,
+ 0x11, 0x11, 0x0f, 0x12, 0x13, 0x11, 0x0c, 0x0d, 0x0a, 0x0e, 0x0f, 0x0d,
+ 0x10, 0x10, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c,
+ 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07,
+ 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02,
+ 0x04, 0x03, 0x03, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a,
+ 0x08, 0x08, 0x09, 0x0b, 0x0c, 0x0b, 0x08, 0x09, 0x07, 0x0e, 0x0f, 0x0d,
+ 0x0d, 0x0e, 0x0d, 0x07, 0x07, 0x06, 0x0b, 0x09, 0x09, 0x10, 0x0c, 0x0e,
+ 0x0c, 0x09, 0x09, 0x0e, 0x11, 0x0b, 0x09, 0x0e, 0x09, 0x05, 0x0c, 0x07,
+ 0x07, 0x0d, 0x09, 0x0a, 0x0c, 0x0a, 0x07, 0x08, 0x05, 0x08, 0x09, 0x01,
+ 0x06, 0x09, 0x01, 0x02, 0x08, 0x02, 0x00, 0x07, 0x04, 0x00, 0x07, 0x06,
+ 0x00, 0x06, 0x08, 0x00, 0x06, 0x07, 0x03, 0x06, 0x05, 0x04, 0x06, 0x04,
+ 0x03, 0x04, 0x02, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03,
+ 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x05, 0x06, 0x03, 0x05, 0x06, 0x03,
+ 0x03, 0x04, 0x01, 0x03, 0x04, 0x01, 0x03, 0x04, 0x01, 0x03, 0x04, 0x01,
+ 0x03, 0x04, 0x01, 0x04, 0x05, 0x03, 0x04, 0x05, 0x03, 0x04, 0x05, 0x02,
+ 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03,
+ 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03,
+ 0x04, 0x05, 0x03, 0x04, 0x05, 0x03, 0x04, 0x04, 0x03, 0x03, 0x04, 0x02,
+ 0x03, 0x04, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x03, 0x00, 0x05, 0x01,
+ 0x00, 0x07, 0x00, 0x00, 0x07, 0x01, 0x01, 0x06, 0x03, 0x01, 0x05, 0x04,
+ 0x01, 0x06, 0x01, 0x01, 0x05, 0x04, 0x01, 0x04, 0x05, 0x02, 0x04, 0x05,
+ 0x01, 0x05, 0x03, 0x02, 0x05, 0x01, 0x03, 0x04, 0x01, 0x01, 0x04, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x02, 0x02, 0x03, 0x05, 0x03, 0x03,
+ 0x07, 0x05, 0x05, 0x07, 0x05, 0x06, 0x0b, 0x09, 0x0a, 0x09, 0x08, 0x08,
+ 0x0b, 0x0a, 0x0a, 0x0f, 0x0e, 0x0d, 0x10, 0x0f, 0x0d, 0x0c, 0x0b, 0x09,
+ 0x0e, 0x0d, 0x0c, 0x11, 0x10, 0x10, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f,
+ 0x0d, 0x0d, 0x0d, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09,
+ 0x07, 0x07, 0x07, 0x05, 0x05, 0x05, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x03, 0x02, 0x02, 0x04, 0x03, 0x03, 0x06, 0x06, 0x06, 0x08, 0x08, 0x08,
+ 0x0a, 0x0a, 0x0a, 0x08, 0x08, 0x08, 0x0b, 0x0c, 0x0b, 0x09, 0x0a, 0x08,
+ 0x0e, 0x0f, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x09, 0x08, 0x0d, 0x09, 0x0a,
+ 0x14, 0x0d, 0x10, 0x0e, 0x09, 0x0a, 0x10, 0x11, 0x0c, 0x0b, 0x10, 0x09,
+ 0x08, 0x0d, 0x08, 0x0a, 0x0e, 0x0a, 0x0c, 0x0f, 0x0c, 0x09, 0x0a, 0x07,
+ 0x0a, 0x0b, 0x03, 0x08, 0x0b, 0x03, 0x04, 0x0b, 0x03, 0x02, 0x0a, 0x07,
+ 0x01, 0x0a, 0x08, 0x01, 0x08, 0x09, 0x02, 0x08, 0x09, 0x05, 0x08, 0x07,
+ 0x06, 0x08, 0x06, 0x06, 0x06, 0x03, 0x07, 0x06, 0x05, 0x07, 0x06, 0x05,
+ 0x07, 0x06, 0x05, 0x07, 0x06, 0x05, 0x07, 0x06, 0x05, 0x08, 0x08, 0x06,
+ 0x08, 0x08, 0x06, 0x06, 0x06, 0x03, 0x06, 0x06, 0x03, 0x06, 0x06, 0x03,
+ 0x06, 0x06, 0x03, 0x06, 0x06, 0x03, 0x07, 0x06, 0x05, 0x07, 0x06, 0x05,
+ 0x07, 0x06, 0x04, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06,
+ 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06,
+ 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06,
+ 0x06, 0x06, 0x04, 0x06, 0x06, 0x05, 0x06, 0x06, 0x05, 0x05, 0x06, 0x05,
+ 0x03, 0x07, 0x03, 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02, 0x02, 0x09, 0x04,
+ 0x02, 0x07, 0x06, 0x02, 0x08, 0x04, 0x02, 0x07, 0x07, 0x02, 0x05, 0x09,
+ 0x04, 0x05, 0x08, 0x02, 0x06, 0x05, 0x02, 0x05, 0x02, 0x02, 0x05, 0x02,
+ 0x02, 0x04, 0x01, 0x03, 0x05, 0x02, 0x03, 0x04, 0x02, 0x03, 0x03, 0x02,
+ 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x03, 0x03,
+ 0x06, 0x03, 0x03, 0x07, 0x05, 0x05, 0x08, 0x06, 0x06, 0x0c, 0x0a, 0x0a,
+ 0x0b, 0x09, 0x09, 0x0e, 0x0c, 0x0b, 0x0f, 0x0e, 0x0c, 0x11, 0x10, 0x0d,
+ 0x11, 0x10, 0x0d, 0x11, 0x0f, 0x0e, 0x12, 0x13, 0x11, 0x0f, 0x0f, 0x0f,
+ 0x10, 0x10, 0x10, 0x0e, 0x0e, 0x0e, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b,
+ 0x0a, 0x0a, 0x0a, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x02, 0x02,
+ 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x07, 0x07, 0x07,
+ 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a, 0x09, 0x08, 0x09, 0x0e, 0x0d, 0x0c,
+ 0x0c, 0x0c, 0x0a, 0x0f, 0x0f, 0x0d, 0x14, 0x13, 0x12, 0x21, 0x20, 0x1e,
+ 0x24, 0x23, 0x22, 0x20, 0x20, 0x1c, 0x16, 0x1a, 0x12, 0x17, 0x25, 0x14,
+ 0x11, 0x24, 0x10, 0x0d, 0x22, 0x0e, 0x0e, 0x22, 0x0f, 0x10, 0x22, 0x11,
+ 0x0e, 0x1e, 0x0c, 0x0f, 0x1e, 0x09, 0x0d, 0x1f, 0x09, 0x09, 0x1f, 0x09,
+ 0x07, 0x1e, 0x0b, 0x06, 0x1e, 0x0c, 0x05, 0x1c, 0x0d, 0x06, 0x1c, 0x0d,
+ 0x09, 0x1b, 0x0c, 0x0a, 0x1c, 0x0c, 0x0b, 0x1b, 0x0a, 0x0c, 0x1b, 0x0b,
+ 0x0c, 0x1b, 0x0c, 0x0c, 0x1b, 0x0b, 0x0c, 0x1b, 0x0b, 0x0c, 0x1b, 0x0c,
+ 0x0d, 0x1d, 0x0c, 0x0d, 0x1d, 0x0c, 0x0c, 0x1c, 0x0a, 0x0b, 0x1c, 0x0a,
+ 0x0b, 0x1c, 0x0a, 0x0b, 0x1c, 0x0a, 0x0c, 0x1d, 0x0b, 0x0c, 0x1c, 0x0d,
+ 0x0c, 0x1c, 0x0d, 0x0d, 0x1d, 0x0c, 0x0e, 0x1c, 0x0d, 0x0d, 0x1c, 0x0d,
+ 0x0e, 0x1d, 0x0e, 0x0e, 0x1d, 0x0e, 0x0e, 0x1d, 0x0e, 0x0e, 0x1d, 0x0e,
+ 0x0e, 0x1d, 0x0e, 0x0e, 0x1d, 0x0e, 0x0e, 0x1d, 0x0e, 0x0d, 0x1c, 0x0d,
+ 0x0e, 0x1c, 0x0d, 0x0d, 0x1c, 0x0c, 0x0d, 0x1c, 0x0d, 0x0d, 0x1c, 0x0d,
+ 0x0c, 0x1c, 0x0d, 0x0a, 0x1d, 0x0a, 0x0a, 0x1f, 0x09, 0x0b, 0x1f, 0x09,
+ 0x0b, 0x1e, 0x0c, 0x0b, 0x1c, 0x0d, 0x0b, 0x1d, 0x0a, 0x0c, 0x1b, 0x0d,
+ 0x0c, 0x19, 0x0f, 0x0d, 0x19, 0x0f, 0x0c, 0x1b, 0x0d, 0x0b, 0x19, 0x09,
+ 0x0b, 0x18, 0x0a, 0x0a, 0x13, 0x08, 0x0f, 0x11, 0x0b, 0x12, 0x0f, 0x0d,
+ 0x12, 0x0e, 0x0c, 0x11, 0x0f, 0x0d, 0x0e, 0x0d, 0x0c, 0x0d, 0x0e, 0x0c,
+ 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0e, 0x0d, 0x0c,
+ 0x0e, 0x0e, 0x0d, 0x10, 0x0e, 0x0e, 0x12, 0x10, 0x10, 0x13, 0x11, 0x10,
+ 0x15, 0x13, 0x13, 0x17, 0x14, 0x14, 0x1a, 0x18, 0x17, 0x19, 0x18, 0x15,
+ 0x1f, 0x1e, 0x1a, 0x28, 0x26, 0x22, 0x25, 0x23, 0x21, 0x18, 0x18, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x0f, 0x0f, 0x0b, 0x0b, 0x0b,
+ 0x0c, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x08, 0x08, 0x08, 0x06, 0x06, 0x06,
+ 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x02, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x04, 0x03, 0x05, 0x05,
+ 0x07, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x09, 0x09,
+ 0x0f, 0x0e, 0x0e, 0x0f, 0x0e, 0x0d, 0x0f, 0x0e, 0x0b, 0x1b, 0x1b, 0x18,
+ 0x3c, 0x3b, 0x38, 0x41, 0x44, 0x3d, 0x2f, 0x38, 0x2a, 0x20, 0x31, 0x1c,
+ 0x1f, 0x3d, 0x1c, 0x18, 0x3c, 0x17, 0x13, 0x3c, 0x15, 0x12, 0x3a, 0x15,
+ 0x15, 0x3a, 0x17, 0x13, 0x36, 0x13, 0x13, 0x37, 0x11, 0x12, 0x38, 0x10,
+ 0x0f, 0x38, 0x10, 0x0d, 0x37, 0x12, 0x0d, 0x36, 0x12, 0x0b, 0x35, 0x13,
+ 0x0b, 0x35, 0x13, 0x0d, 0x34, 0x12, 0x0e, 0x36, 0x11, 0x11, 0x35, 0x12,
+ 0x11, 0x35, 0x12, 0x11, 0x36, 0x13, 0x11, 0x36, 0x12, 0x11, 0x36, 0x12,
+ 0x12, 0x36, 0x14, 0x12, 0x36, 0x13, 0x12, 0x36, 0x13, 0x13, 0x38, 0x14,
+ 0x12, 0x37, 0x14, 0x12, 0x37, 0x14, 0x12, 0x37, 0x14, 0x13, 0x39, 0x15,
+ 0x13, 0x38, 0x15, 0x13, 0x38, 0x15, 0x14, 0x39, 0x15, 0x15, 0x38, 0x15,
+ 0x14, 0x38, 0x15, 0x16, 0x39, 0x16, 0x16, 0x39, 0x16, 0x16, 0x39, 0x16,
+ 0x16, 0x39, 0x16, 0x16, 0x39, 0x16, 0x16, 0x39, 0x16, 0x16, 0x39, 0x16,
+ 0x14, 0x38, 0x15, 0x15, 0x38, 0x15, 0x15, 0x38, 0x15, 0x15, 0x38, 0x15,
+ 0x15, 0x38, 0x15, 0x13, 0x37, 0x15, 0x13, 0x38, 0x14, 0x14, 0x3a, 0x12,
+ 0x16, 0x39, 0x12, 0x16, 0x38, 0x14, 0x17, 0x36, 0x15, 0x17, 0x36, 0x13,
+ 0x17, 0x34, 0x14, 0x19, 0x32, 0x16, 0x1a, 0x33, 0x18, 0x18, 0x34, 0x15,
+ 0x15, 0x31, 0x12, 0x16, 0x2f, 0x13, 0x14, 0x25, 0x11, 0x1e, 0x21, 0x16,
+ 0x23, 0x1f, 0x19, 0x23, 0x1d, 0x19, 0x22, 0x1e, 0x19, 0x1b, 0x1b, 0x18,
+ 0x1a, 0x1b, 0x19, 0x1a, 0x1b, 0x1a, 0x1a, 0x1b, 0x1a, 0x1b, 0x1b, 0x1a,
+ 0x1c, 0x1a, 0x19, 0x1b, 0x1b, 0x1a, 0x1d, 0x1b, 0x1c, 0x1f, 0x1d, 0x1d,
+ 0x21, 0x1f, 0x1e, 0x21, 0x1f, 0x1e, 0x25, 0x23, 0x22, 0x29, 0x27, 0x26,
+ 0x25, 0x23, 0x21, 0x30, 0x2d, 0x2b, 0x42, 0x40, 0x3c, 0x3c, 0x3a, 0x37,
+ 0x1f, 0x1f, 0x1e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0f, 0x0f, 0x0f,
+ 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0d, 0x0c, 0x0c, 0x0c, 0x09, 0x09, 0x09,
+ 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x01, 0x00, 0x02, 0x02, 0x00, 0x03, 0x03, 0x01, 0x04, 0x04,
+ 0x03, 0x06, 0x06, 0x07, 0x08, 0x08, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08,
+ 0x0b, 0x0a, 0x0a, 0x10, 0x0f, 0x0f, 0x11, 0x10, 0x0f, 0x0f, 0x0f, 0x0c,
+ 0x26, 0x25, 0x21, 0x56, 0x56, 0x51, 0x5b, 0x62, 0x57, 0x3c, 0x52, 0x39,
+ 0x2f, 0x53, 0x2d, 0x2f, 0x65, 0x2d, 0x26, 0x65, 0x26, 0x20, 0x67, 0x24,
+ 0x1e, 0x64, 0x23, 0x20, 0x63, 0x23, 0x20, 0x62, 0x22, 0x1f, 0x62, 0x1f,
+ 0x1e, 0x63, 0x1e, 0x1b, 0x63, 0x1d, 0x1a, 0x63, 0x1e, 0x19, 0x62, 0x1e,
+ 0x18, 0x60, 0x1f, 0x18, 0x60, 0x1f, 0x18, 0x60, 0x1e, 0x1a, 0x61, 0x1e,
+ 0x1c, 0x62, 0x20, 0x1c, 0x61, 0x1f, 0x1c, 0x62, 0x20, 0x1c, 0x63, 0x20,
+ 0x1c, 0x63, 0x20, 0x1d, 0x63, 0x21, 0x1d, 0x63, 0x21, 0x1d, 0x63, 0x21,
+ 0x1f, 0x65, 0x23, 0x1f, 0x65, 0x23, 0x1f, 0x65, 0x23, 0x1f, 0x65, 0x23,
+ 0x20, 0x66, 0x24, 0x20, 0x66, 0x24, 0x20, 0x66, 0x24, 0x21, 0x67, 0x24,
+ 0x23, 0x66, 0x23, 0x22, 0x66, 0x23, 0x23, 0x68, 0x25, 0x23, 0x67, 0x25,
+ 0x24, 0x68, 0x25, 0x24, 0x68, 0x25, 0x24, 0x68, 0x25, 0x24, 0x68, 0x25,
+ 0x23, 0x68, 0x25, 0x22, 0x66, 0x23, 0x23, 0x66, 0x23, 0x23, 0x66, 0x24,
+ 0x22, 0x66, 0x24, 0x22, 0x66, 0x24, 0x21, 0x65, 0x24, 0x22, 0x66, 0x23,
+ 0x23, 0x67, 0x22, 0x25, 0x66, 0x22, 0x24, 0x65, 0x23, 0x24, 0x64, 0x22,
+ 0x23, 0x65, 0x21, 0x24, 0x62, 0x22, 0x26, 0x60, 0x24, 0x26, 0x5f, 0x26,
+ 0x24, 0x61, 0x23, 0x21, 0x5c, 0x21, 0x22, 0x57, 0x22, 0x1c, 0x3d, 0x1a,
+ 0x27, 0x2d, 0x1f, 0x2f, 0x27, 0x25, 0x2f, 0x25, 0x25, 0x2d, 0x26, 0x25,
+ 0x26, 0x24, 0x22, 0x25, 0x26, 0x22, 0x25, 0x26, 0x24, 0x24, 0x26, 0x24,
+ 0x25, 0x26, 0x24, 0x26, 0x25, 0x23, 0x26, 0x26, 0x24, 0x28, 0x27, 0x27,
+ 0x2a, 0x28, 0x28, 0x2c, 0x2b, 0x2a, 0x2b, 0x29, 0x28, 0x31, 0x2e, 0x2d,
+ 0x37, 0x34, 0x33, 0x33, 0x31, 0x2e, 0x43, 0x3f, 0x3c, 0x5d, 0x5a, 0x56,
+ 0x55, 0x53, 0x4f, 0x29, 0x29, 0x28, 0x15, 0x15, 0x15, 0x12, 0x12, 0x12,
+ 0x11, 0x11, 0x11, 0x0e, 0x0e, 0x0e, 0x0d, 0x0d, 0x0d, 0x0c, 0x0c, 0x0c,
+ 0x0a, 0x0a, 0x0a, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x02, 0x02,
+ 0x01, 0x03, 0x03, 0x04, 0x07, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0a,
+ 0x0a, 0x0a, 0x0a, 0x0c, 0x0c, 0x0c, 0x10, 0x0e, 0x0e, 0x11, 0x10, 0x0f,
+ 0x11, 0x11, 0x0d, 0x2f, 0x2e, 0x2a, 0x62, 0x62, 0x5c, 0x65, 0x70, 0x61,
+ 0x42, 0x62, 0x41, 0x3d, 0x71, 0x3c, 0x3f, 0x87, 0x3d, 0x34, 0x89, 0x34,
+ 0x2f, 0x8e, 0x32, 0x2c, 0x8b, 0x31, 0x2c, 0x89, 0x32, 0x2e, 0x8a, 0x32,
+ 0x2d, 0x89, 0x2e, 0x2c, 0x8b, 0x2c, 0x29, 0x8c, 0x2a, 0x28, 0x8c, 0x2a,
+ 0x26, 0x8c, 0x2a, 0x24, 0x8b, 0x2b, 0x26, 0x8a, 0x2c, 0x26, 0x8b, 0x2a,
+ 0x28, 0x8a, 0x2b, 0x29, 0x8b, 0x2c, 0x29, 0x8a, 0x2c, 0x29, 0x8a, 0x2d,
+ 0x29, 0x8c, 0x2d, 0x29, 0x8c, 0x2d, 0x29, 0x8c, 0x2e, 0x2a, 0x8c, 0x2e,
+ 0x2a, 0x8c, 0x2e, 0x2c, 0x8e, 0x30, 0x2b, 0x8e, 0x2f, 0x2c, 0x8e, 0x31,
+ 0x2c, 0x8e, 0x31, 0x2d, 0x8f, 0x30, 0x2d, 0x8f, 0x32, 0x2d, 0x8f, 0x32,
+ 0x2e, 0x90, 0x32, 0x2f, 0x91, 0x31, 0x2f, 0x91, 0x31, 0x30, 0x91, 0x32,
+ 0x30, 0x90, 0x31, 0x30, 0x92, 0x33, 0x30, 0x92, 0x33, 0x30, 0x92, 0x33,
+ 0x30, 0x92, 0x33, 0x30, 0x91, 0x31, 0x2f, 0x91, 0x31, 0x2f, 0x91, 0x31,
+ 0x2f, 0x91, 0x32, 0x2f, 0x8f, 0x32, 0x2f, 0x8f, 0x32, 0x2e, 0x8f, 0x32,
+ 0x2e, 0x8f, 0x31, 0x2e, 0x90, 0x30, 0x2e, 0x90, 0x30, 0x2d, 0x8f, 0x2f,
+ 0x2d, 0x8f, 0x2f, 0x29, 0x91, 0x2d, 0x2a, 0x8e, 0x2e, 0x2e, 0x8c, 0x31,
+ 0x2e, 0x8a, 0x33, 0x2a, 0x8b, 0x2f, 0x28, 0x85, 0x2e, 0x29, 0x7a, 0x2f,
+ 0x1e, 0x50, 0x21, 0x24, 0x31, 0x22, 0x2d, 0x26, 0x29, 0x30, 0x23, 0x2a,
+ 0x2d, 0x23, 0x29, 0x29, 0x25, 0x26, 0x27, 0x28, 0x24, 0x27, 0x28, 0x26,
+ 0x27, 0x28, 0x26, 0x28, 0x28, 0x26, 0x29, 0x27, 0x27, 0x2a, 0x28, 0x27,
+ 0x2c, 0x2a, 0x2a, 0x2d, 0x2b, 0x2b, 0x30, 0x2e, 0x2e, 0x2f, 0x2d, 0x2c,
+ 0x35, 0x32, 0x30, 0x3d, 0x39, 0x37, 0x3c, 0x39, 0x35, 0x4d, 0x4a, 0x46,
+ 0x6b, 0x68, 0x63, 0x63, 0x60, 0x5c, 0x32, 0x32, 0x31, 0x19, 0x19, 0x19,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x0e, 0x0e, 0x0e,
+ 0x0b, 0x0b, 0x0b, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x06, 0x06, 0x06,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x02, 0x00, 0x01, 0x01,
+ 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x04, 0x07, 0x07, 0x08, 0x09, 0x09,
+ 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0d, 0x0d, 0x0d, 0x0f, 0x0f, 0x0e,
+ 0x11, 0x11, 0x0f, 0x13, 0x13, 0x0f, 0x35, 0x35, 0x30, 0x68, 0x68, 0x61,
+ 0x68, 0x77, 0x63, 0x43, 0x70, 0x44, 0x47, 0x8e, 0x48, 0x4b, 0xa9, 0x4b,
+ 0x3e, 0xac, 0x40, 0x39, 0xb3, 0x3e, 0x35, 0xb0, 0x3c, 0x34, 0xad, 0x3d,
+ 0x39, 0xb0, 0x3f, 0x37, 0xb0, 0x39, 0x36, 0xb1, 0x36, 0x32, 0xb3, 0x34,
+ 0x31, 0xb3, 0x34, 0x2f, 0xb3, 0x34, 0x2e, 0xb3, 0x35, 0x2f, 0xb1, 0x36,
+ 0x30, 0xb2, 0x34, 0x32, 0xb1, 0x35, 0x31, 0xb2, 0x36, 0x31, 0xb0, 0x36,
+ 0x31, 0xb0, 0x36, 0x31, 0xb3, 0x37, 0x31, 0xb3, 0x37, 0x31, 0xb3, 0x37,
+ 0x32, 0xb4, 0x38, 0x32, 0xb4, 0x38, 0x34, 0xb5, 0x3a, 0x34, 0xb5, 0x39,
+ 0x35, 0xb6, 0x3b, 0x35, 0xb6, 0x3b, 0x35, 0xb6, 0x3a, 0x36, 0xb6, 0x3c,
+ 0x36, 0xb6, 0x3c, 0x36, 0xb7, 0x3c, 0x38, 0xb8, 0x3c, 0x38, 0xb8, 0x3c,
+ 0x38, 0xb7, 0x3c, 0x38, 0xb7, 0x3b, 0x39, 0xba, 0x3d, 0x39, 0xba, 0x3d,
+ 0x39, 0xba, 0x3d, 0x39, 0xba, 0x3d, 0x38, 0xb8, 0x3b, 0x38, 0xb8, 0x3c,
+ 0x38, 0xb8, 0x3c, 0x38, 0xb8, 0x3c, 0x37, 0xb6, 0x3c, 0x37, 0xb6, 0x3c,
+ 0x37, 0xb6, 0x3c, 0x37, 0xb6, 0x3c, 0x36, 0xb7, 0x3c, 0x35, 0xb7, 0x3c,
+ 0x34, 0xb6, 0x3a, 0x33, 0xb7, 0x39, 0x2e, 0xba, 0x36, 0x2f, 0xb7, 0x38,
+ 0x33, 0xb5, 0x3b, 0x32, 0xb2, 0x3d, 0x2d, 0xb3, 0x39, 0x2d, 0xac, 0x39,
+ 0x2f, 0x9d, 0x3a, 0x1f, 0x62, 0x25, 0x21, 0x34, 0x22, 0x2a, 0x23, 0x29,
+ 0x2d, 0x1f, 0x2b, 0x2c, 0x20, 0x29, 0x28, 0x24, 0x25, 0x26, 0x27, 0x24,
+ 0x26, 0x27, 0x25, 0x27, 0x27, 0x26, 0x28, 0x27, 0x26, 0x29, 0x27, 0x27,
+ 0x2a, 0x28, 0x27, 0x2c, 0x2b, 0x2a, 0x2e, 0x2c, 0x2c, 0x31, 0x2f, 0x2e,
+ 0x30, 0x2e, 0x2c, 0x35, 0x33, 0x30, 0x3f, 0x3c, 0x39, 0x42, 0x3f, 0x3a,
+ 0x54, 0x51, 0x4c, 0x72, 0x6f, 0x6a, 0x6b, 0x68, 0x64, 0x39, 0x3a, 0x38,
+ 0x1c, 0x1d, 0x1d, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11,
+ 0x0e, 0x0e, 0x0e, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01,
+ 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x03, 0x04, 0x05, 0x05, 0x07, 0x08,
+ 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0e, 0x0e, 0x0d,
+ 0x0f, 0x0e, 0x0d, 0x11, 0x11, 0x0e, 0x16, 0x17, 0x12, 0x36, 0x37, 0x31,
+ 0x54, 0x56, 0x4e, 0x4d, 0x63, 0x4a, 0x35, 0x76, 0x39, 0x43, 0xac, 0x49,
+ 0x47, 0xc9, 0x4b, 0x39, 0xcb, 0x3f, 0x34, 0xd1, 0x3d, 0x2f, 0xcf, 0x3b,
+ 0x2f, 0xcd, 0x3c, 0x33, 0xcf, 0x3e, 0x32, 0xcf, 0x38, 0x30, 0xd0, 0x36,
+ 0x2d, 0xd1, 0x34, 0x2c, 0xd1, 0x33, 0x2a, 0xd1, 0x33, 0x29, 0xd1, 0x34,
+ 0x2a, 0xd0, 0x35, 0x2b, 0xd0, 0x33, 0x2c, 0xd0, 0x34, 0x2b, 0xd0, 0x35,
+ 0x2b, 0xcf, 0x35, 0x2b, 0xcf, 0x35, 0x2b, 0xd1, 0x36, 0x2b, 0xd1, 0x36,
+ 0x2c, 0xd1, 0x36, 0x2c, 0xd1, 0x37, 0x2c, 0xd1, 0x37, 0x2c, 0xd2, 0x37,
+ 0x2c, 0xd2, 0x37, 0x2d, 0xd3, 0x38, 0x2d, 0xd3, 0x38, 0x2d, 0xd3, 0x37,
+ 0x2e, 0xd3, 0x38, 0x2e, 0xd3, 0x38, 0x2e, 0xd3, 0x38, 0x30, 0xd5, 0x39,
+ 0x30, 0xd5, 0x39, 0x30, 0xd4, 0x39, 0x30, 0xd4, 0x38, 0x31, 0xd6, 0x3a,
+ 0x31, 0xd6, 0x3a, 0x31, 0xd6, 0x3a, 0x31, 0xd6, 0x3a, 0x30, 0xd4, 0x38,
+ 0x30, 0xd5, 0x39, 0x30, 0xd5, 0x39, 0x30, 0xd5, 0x39, 0x2f, 0xd3, 0x38,
+ 0x2f, 0xd3, 0x38, 0x2f, 0xd3, 0x38, 0x31, 0xd3, 0x39, 0x31, 0xd3, 0x39,
+ 0x32, 0xd4, 0x39, 0x30, 0xd3, 0x37, 0x2e, 0xd3, 0x36, 0x29, 0xd5, 0x34,
+ 0x2a, 0xd4, 0x35, 0x2e, 0xd3, 0x37, 0x2d, 0xd1, 0x38, 0x28, 0xd1, 0x37,
+ 0x29, 0xcc, 0x38, 0x2c, 0xbb, 0x39, 0x19, 0x72, 0x21, 0x16, 0x31, 0x17,
+ 0x1c, 0x1b, 0x1c, 0x1f, 0x17, 0x1d, 0x1f, 0x17, 0x1c, 0x1c, 0x1a, 0x19,
+ 0x1a, 0x1b, 0x18, 0x1b, 0x1c, 0x1a, 0x1d, 0x1d, 0x1c, 0x1d, 0x1d, 0x1c,
+ 0x1e, 0x1d, 0x1d, 0x1f, 0x1e, 0x1d, 0x22, 0x21, 0x20, 0x23, 0x22, 0x21,
+ 0x26, 0x24, 0x23, 0x27, 0x25, 0x24, 0x2c, 0x2a, 0x27, 0x36, 0x33, 0x30,
+ 0x3e, 0x3c, 0x38, 0x4b, 0x49, 0x45, 0x5e, 0x5c, 0x57, 0x5a, 0x58, 0x54,
+ 0x3b, 0x3c, 0x3b, 0x1f, 0x20, 0x20, 0x15, 0x15, 0x15, 0x14, 0x14, 0x14,
+ 0x12, 0x12, 0x12, 0x0e, 0x0e, 0x0e, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a,
+ 0x09, 0x09, 0x09, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x03, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x06,
+ 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0d, 0x0d, 0x0d,
+ 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0d, 0x0f, 0x10, 0x0e, 0x18, 0x1a, 0x15,
+ 0x35, 0x36, 0x31, 0x41, 0x46, 0x3d, 0x35, 0x51, 0x34, 0x29, 0x79, 0x30,
+ 0x3d, 0xc0, 0x46, 0x41, 0xdd, 0x48, 0x34, 0xe0, 0x3c, 0x2e, 0xe3, 0x3a,
+ 0x29, 0xe2, 0x39, 0x29, 0xe1, 0x39, 0x2d, 0xe2, 0x3b, 0x2b, 0xe2, 0x37,
+ 0x2b, 0xe3, 0x35, 0x28, 0xe3, 0x32, 0x27, 0xe3, 0x31, 0x25, 0xe3, 0x31,
+ 0x24, 0xe3, 0x32, 0x25, 0xe2, 0x32, 0x25, 0xe3, 0x31, 0x26, 0xe2, 0x32,
+ 0x24, 0xe3, 0x32, 0x25, 0xe2, 0x32, 0x25, 0xe2, 0x32, 0x25, 0xe3, 0x33,
+ 0x25, 0xe3, 0x33, 0x25, 0xe3, 0x33, 0x26, 0xe4, 0x34, 0x26, 0xe4, 0x34,
+ 0x25, 0xe4, 0x34, 0x25, 0xe4, 0x33, 0x25, 0xe4, 0x34, 0x25, 0xe4, 0x34,
+ 0x26, 0xe4, 0x34, 0x26, 0xe5, 0x34, 0x26, 0xe5, 0x34, 0x26, 0xe5, 0x34,
+ 0x28, 0xe6, 0x35, 0x28, 0xe6, 0x35, 0x28, 0xe5, 0x35, 0x28, 0xe5, 0x35,
+ 0x28, 0xe6, 0x35, 0x28, 0xe6, 0x35, 0x28, 0xe6, 0x35, 0x28, 0xe6, 0x35,
+ 0x28, 0xe5, 0x35, 0x28, 0xe6, 0x35, 0x28, 0xe6, 0x35, 0x28, 0xe6, 0x35,
+ 0x27, 0xe5, 0x34, 0x27, 0xe5, 0x34, 0x27, 0xe5, 0x34, 0x2a, 0xe5, 0x35,
+ 0x2b, 0xe5, 0x34, 0x2c, 0xe5, 0x35, 0x2b, 0xe5, 0x33, 0x29, 0xe5, 0x32,
+ 0x24, 0xe6, 0x30, 0x25, 0xe5, 0x31, 0x29, 0xe4, 0x33, 0x28, 0xe3, 0x34,
+ 0x23, 0xe3, 0x33, 0x25, 0xe0, 0x35, 0x29, 0xcf, 0x36, 0x14, 0x7d, 0x1c,
+ 0x0d, 0x30, 0x0f, 0x11, 0x16, 0x11, 0x14, 0x12, 0x12, 0x15, 0x11, 0x11,
+ 0x12, 0x11, 0x0f, 0x11, 0x12, 0x0f, 0x11, 0x12, 0x11, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x13, 0x14, 0x14, 0x14, 0x16, 0x15, 0x14, 0x19, 0x18, 0x17,
+ 0x1a, 0x19, 0x18, 0x1b, 0x1a, 0x19, 0x1f, 0x1d, 0x1c, 0x23, 0x22, 0x1e,
+ 0x2c, 0x2b, 0x28, 0x3a, 0x38, 0x35, 0x43, 0x41, 0x3e, 0x4d, 0x4b, 0x47,
+ 0x4a, 0x49, 0x46, 0x3c, 0x3d, 0x3c, 0x21, 0x21, 0x22, 0x16, 0x16, 0x16,
+ 0x15, 0x15, 0x15, 0x12, 0x12, 0x12, 0x0e, 0x0e, 0x0e, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x02, 0x00, 0x02, 0x03, 0x00, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04,
+ 0x06, 0x04, 0x07, 0x08, 0x07, 0x09, 0x0a, 0x09, 0x0a, 0x0a, 0x0a, 0x0b,
+ 0x0d, 0x0d, 0x0e, 0x0f, 0x0f, 0x0e, 0x0f, 0x0f, 0x0c, 0x0f, 0x10, 0x0d,
+ 0x1c, 0x1e, 0x19, 0x34, 0x36, 0x30, 0x2d, 0x32, 0x28, 0x1a, 0x3c, 0x19,
+ 0x1b, 0x7e, 0x24, 0x38, 0xda, 0x45, 0x3a, 0xf7, 0x46, 0x2c, 0xfa, 0x38,
+ 0x25, 0xfa, 0x36, 0x20, 0xf9, 0x34, 0x20, 0xf9, 0x35, 0x23, 0xf9, 0x37,
+ 0x23, 0xf9, 0x34, 0x22, 0xf9, 0x32, 0x1f, 0xfa, 0x2e, 0x1e, 0xf9, 0x2d,
+ 0x1e, 0xf9, 0x2d, 0x1c, 0xfa, 0x2e, 0x1d, 0xf9, 0x2e, 0x1d, 0xf9, 0x2e,
+ 0x1d, 0xf9, 0x2e, 0x1c, 0xf9, 0x2e, 0x1c, 0xf9, 0x2e, 0x1c, 0xf9, 0x2e,
+ 0x1c, 0xf9, 0x2e, 0x1c, 0xf9, 0x2e, 0x1d, 0xf9, 0x2f, 0x1d, 0xf9, 0x2f,
+ 0x1d, 0xf9, 0x2f, 0x1a, 0xf9, 0x2e, 0x1a, 0xf9, 0x2e, 0x1a, 0xf9, 0x2e,
+ 0x1a, 0xf9, 0x2e, 0x1b, 0xf9, 0x2e, 0x1b, 0xfa, 0x2d, 0x1b, 0xfa, 0x2d,
+ 0x1b, 0xfa, 0x2d, 0x1d, 0xfa, 0x2f, 0x1d, 0xfa, 0x2f, 0x1d, 0xfa, 0x2f,
+ 0x1d, 0xfa, 0x2f, 0x1d, 0xfa, 0x2f, 0x1d, 0xfa, 0x2f, 0x1d, 0xfa, 0x2f,
+ 0x1d, 0xfa, 0x2f, 0x1d, 0xfa, 0x2f, 0x1d, 0xfa, 0x2f, 0x1d, 0xfa, 0x2f,
+ 0x1d, 0xfa, 0x2f, 0x1c, 0xfa, 0x2d, 0x1c, 0xfa, 0x2d, 0x1d, 0xfa, 0x2d,
+ 0x20, 0xf9, 0x2f, 0x23, 0xfa, 0x2e, 0x25, 0xfa, 0x2f, 0x24, 0xfa, 0x2e,
+ 0x21, 0xfa, 0x2c, 0x1d, 0xfa, 0x2b, 0x1e, 0xfa, 0x2b, 0x21, 0xfa, 0x2c,
+ 0x21, 0xf9, 0x2d, 0x1c, 0xfa, 0x2e, 0x20, 0xf9, 0x31, 0x25, 0xe8, 0x32,
+ 0x0e, 0x89, 0x16, 0x03, 0x2c, 0x05, 0x03, 0x0f, 0x03, 0x06, 0x0a, 0x03,
+ 0x08, 0x09, 0x03, 0x05, 0x06, 0x03, 0x04, 0x05, 0x03, 0x05, 0x06, 0x05,
+ 0x07, 0x08, 0x07, 0x08, 0x09, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x09,
+ 0x0d, 0x0d, 0x0b, 0x0e, 0x0e, 0x0c, 0x10, 0x0e, 0x0e, 0x15, 0x14, 0x13,
+ 0x19, 0x18, 0x15, 0x22, 0x22, 0x1f, 0x37, 0x36, 0x33, 0x3a, 0x39, 0x36,
+ 0x37, 0x36, 0x32, 0x38, 0x37, 0x34, 0x3d, 0x3e, 0x3d, 0x24, 0x24, 0x24,
+ 0x17, 0x17, 0x17, 0x14, 0x14, 0x14, 0x12, 0x12, 0x12, 0x0e, 0x0e, 0x0e,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x08, 0x08, 0x08,
+ 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x03, 0x00, 0x03, 0x03, 0x03,
+ 0x04, 0x04, 0x04, 0x06, 0x04, 0x07, 0x08, 0x07, 0x09, 0x0a, 0x09, 0x0a,
+ 0x0a, 0x0a, 0x0b, 0x0d, 0x0d, 0x0d, 0x0f, 0x0f, 0x0f, 0x10, 0x11, 0x0e,
+ 0x12, 0x13, 0x10, 0x20, 0x22, 0x1d, 0x35, 0x37, 0x30, 0x2b, 0x30, 0x25,
+ 0x1a, 0x3c, 0x19, 0x1d, 0x82, 0x24, 0x3b, 0xe2, 0x46, 0x38, 0xfc, 0x42,
+ 0x29, 0xfe, 0x35, 0x20, 0xfd, 0x31, 0x1a, 0xf9, 0x2f, 0x1a, 0xf8, 0x2f,
+ 0x1b, 0xf6, 0x30, 0x1c, 0xf7, 0x2d, 0x1c, 0xf8, 0x2c, 0x19, 0xfa, 0x29,
+ 0x18, 0xf9, 0x29, 0x18, 0xf9, 0x29, 0x16, 0xfa, 0x29, 0x17, 0xf8, 0x29,
+ 0x17, 0xf8, 0x29, 0x17, 0xf8, 0x2a, 0x15, 0xf8, 0x29, 0x15, 0xf8, 0x29,
+ 0x15, 0xf8, 0x29, 0x15, 0xf8, 0x29, 0x15, 0xf8, 0x29, 0x16, 0xf8, 0x2a,
+ 0x16, 0xf8, 0x2a, 0x16, 0xf8, 0x2a, 0x15, 0xf8, 0x29, 0x15, 0xf8, 0x29,
+ 0x15, 0xf8, 0x29, 0x15, 0xf8, 0x29, 0x16, 0xf8, 0x29, 0x16, 0xf8, 0x29,
+ 0x16, 0xf8, 0x29, 0x16, 0xf8, 0x29, 0x17, 0xf8, 0x2a, 0x16, 0xf8, 0x2a,
+ 0x16, 0xf8, 0x2a, 0x16, 0xf8, 0x2a, 0x16, 0xf8, 0x2a, 0x16, 0xf8, 0x2a,
+ 0x16, 0xf8, 0x2a, 0x16, 0xf8, 0x2a, 0x17, 0xf8, 0x2a, 0x17, 0xf8, 0x2a,
+ 0x16, 0xf8, 0x2a, 0x16, 0xf8, 0x2a, 0x16, 0xf8, 0x29, 0x16, 0xf8, 0x29,
+ 0x16, 0xf8, 0x29, 0x19, 0xf8, 0x2a, 0x1a, 0xf8, 0x2a, 0x1c, 0xf8, 0x2b,
+ 0x1b, 0xf8, 0x29, 0x19, 0xf9, 0x28, 0x16, 0xfa, 0x27, 0x17, 0xf9, 0x27,
+ 0x1a, 0xf9, 0x28, 0x1a, 0xf9, 0x28, 0x16, 0xfb, 0x2a, 0x1a, 0xfc, 0x2e,
+ 0x21, 0xed, 0x31, 0x0c, 0x8e, 0x17, 0x01, 0x2a, 0x03, 0x00, 0x0c, 0x00,
+ 0x02, 0x08, 0x00, 0x04, 0x05, 0x00, 0x02, 0x02, 0x00, 0x01, 0x02, 0x00,
+ 0x02, 0x03, 0x02, 0x04, 0x05, 0x03, 0x05, 0x05, 0x04, 0x06, 0x06, 0x06,
+ 0x08, 0x09, 0x07, 0x0b, 0x0b, 0x09, 0x0c, 0x0c, 0x0a, 0x0d, 0x0d, 0x0c,
+ 0x13, 0x13, 0x12, 0x18, 0x17, 0x15, 0x23, 0x22, 0x20, 0x3c, 0x3c, 0x39,
+ 0x3c, 0x3c, 0x39, 0x31, 0x32, 0x2e, 0x33, 0x33, 0x30, 0x3e, 0x3f, 0x3e,
+ 0x28, 0x28, 0x28, 0x19, 0x19, 0x19, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13,
+ 0x0f, 0x0f, 0x0f, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a,
+ 0x08, 0x08, 0x08, 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x00,
+ 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x04, 0x07, 0x09, 0x08, 0x09,
+ 0x0a, 0x0a, 0x0a, 0x0b, 0x09, 0x0b, 0x0c, 0x0b, 0x0c, 0x10, 0x10, 0x10,
+ 0x13, 0x14, 0x11, 0x15, 0x16, 0x13, 0x24, 0x27, 0x20, 0x36, 0x38, 0x31,
+ 0x2d, 0x32, 0x28, 0x20, 0x42, 0x1e, 0x22, 0x86, 0x28, 0x40, 0xe7, 0x48,
+ 0x37, 0xfb, 0x3f, 0x27, 0xfd, 0x32, 0x1b, 0xfa, 0x2c, 0x14, 0xf5, 0x28,
+ 0x13, 0xf2, 0x29, 0x13, 0xee, 0x29, 0x16, 0xef, 0x28, 0x16, 0xf1, 0x27,
+ 0x14, 0xf4, 0x24, 0x13, 0xf4, 0x24, 0x13, 0xf4, 0x24, 0x11, 0xf4, 0x24,
+ 0x12, 0xf2, 0x24, 0x12, 0xf2, 0x24, 0x12, 0xf1, 0x25, 0x10, 0xf0, 0x24,
+ 0x10, 0xf0, 0x24, 0x10, 0xf0, 0x24, 0x10, 0xf0, 0x24, 0x10, 0xf0, 0x24,
+ 0x10, 0xf0, 0x25, 0x10, 0xf0, 0x25, 0x10, 0xf0, 0x25, 0x11, 0xf2, 0x24,
+ 0x11, 0xf2, 0x24, 0x11, 0xf2, 0x24, 0x11, 0xf2, 0x24, 0x11, 0xf2, 0x24,
+ 0x11, 0xf2, 0x24, 0x11, 0xf2, 0x24, 0x11, 0xf2, 0x24, 0x12, 0xf2, 0x25,
+ 0x11, 0xf2, 0x25, 0x11, 0xf2, 0x25, 0x11, 0xf2, 0x25, 0x11, 0xf2, 0x25,
+ 0x11, 0xf2, 0x25, 0x11, 0xf2, 0x25, 0x11, 0xf2, 0x25, 0x12, 0xf2, 0x25,
+ 0x12, 0xf2, 0x25, 0x11, 0xf2, 0x25, 0x11, 0xf2, 0x25, 0x11, 0xf2, 0x24,
+ 0x11, 0xf2, 0x24, 0x11, 0xf2, 0x24, 0x12, 0xf1, 0x25, 0x11, 0xf2, 0x27,
+ 0x13, 0xf2, 0x27, 0x12, 0xf2, 0x24, 0x12, 0xf3, 0x24, 0x10, 0xf6, 0x24,
+ 0x10, 0xf4, 0x24, 0x13, 0xf2, 0x24, 0x13, 0xf3, 0x24, 0x10, 0xf6, 0x25,
+ 0x14, 0xf8, 0x2a, 0x1c, 0xed, 0x2f, 0x0b, 0x90, 0x18, 0x01, 0x28, 0x03,
+ 0x00, 0x0b, 0x00, 0x01, 0x07, 0x00, 0x02, 0x03, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x03, 0x01, 0x03, 0x04, 0x02,
+ 0x05, 0x05, 0x06, 0x08, 0x08, 0x08, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b,
+ 0x0d, 0x0d, 0x0d, 0x14, 0x14, 0x13, 0x19, 0x18, 0x17, 0x25, 0x26, 0x23,
+ 0x43, 0x44, 0x40, 0x41, 0x42, 0x3e, 0x31, 0x32, 0x2d, 0x33, 0x33, 0x2f,
+ 0x40, 0x40, 0x3f, 0x2b, 0x2b, 0x2b, 0x1b, 0x1b, 0x1b, 0x15, 0x15, 0x15,
+ 0x14, 0x14, 0x14, 0x10, 0x10, 0x10, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
+ 0x02, 0x03, 0x00, 0x03, 0x02, 0x03, 0x04, 0x04, 0x04, 0x06, 0x04, 0x07,
+ 0x09, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x09, 0x0c, 0x0c, 0x0b, 0x0c,
+ 0x0f, 0x0f, 0x0f, 0x14, 0x15, 0x13, 0x19, 0x1a, 0x17, 0x28, 0x2b, 0x24,
+ 0x35, 0x37, 0x31, 0x33, 0x38, 0x2e, 0x27, 0x4a, 0x24, 0x2b, 0x8e, 0x2e,
+ 0x45, 0xe9, 0x4a, 0x34, 0xf5, 0x38, 0x25, 0xfa, 0x2e, 0x17, 0xf8, 0x26,
+ 0x0f, 0xf0, 0x22, 0x0e, 0xec, 0x23, 0x0e, 0xe8, 0x23, 0x11, 0xe8, 0x23,
+ 0x11, 0xea, 0x22, 0x0f, 0xed, 0x20, 0x0f, 0xed, 0x20, 0x0f, 0xed, 0x20,
+ 0x0d, 0xec, 0x20, 0x0d, 0xea, 0x21, 0x0e, 0xe9, 0x20, 0x0e, 0xe8, 0x22,
+ 0x0c, 0xe9, 0x21, 0x0c, 0xe9, 0x20, 0x0c, 0xe9, 0x20, 0x0c, 0xe9, 0x20,
+ 0x0c, 0xe9, 0x20, 0x0c, 0xe9, 0x20, 0x0c, 0xe9, 0x20, 0x0c, 0xe9, 0x20,
+ 0x0e, 0xea, 0x20, 0x0e, 0xea, 0x20, 0x0e, 0xea, 0x20, 0x0e, 0xea, 0x20,
+ 0x0e, 0xea, 0x20, 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20,
+ 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20,
+ 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20,
+ 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20, 0x0d, 0xea, 0x20,
+ 0x0e, 0xea, 0x20, 0x0e, 0xea, 0x20, 0x0e, 0xeb, 0x20, 0x0d, 0xe9, 0x21,
+ 0x0b, 0xea, 0x23, 0x0b, 0xea, 0x23, 0x0b, 0xea, 0x20, 0x0b, 0xec, 0x20,
+ 0x0a, 0xef, 0x20, 0x0c, 0xed, 0x20, 0x10, 0xea, 0x20, 0x10, 0xea, 0x20,
+ 0x0b, 0xee, 0x21, 0x0f, 0xf0, 0x26, 0x19, 0xeb, 0x2c, 0x0c, 0x93, 0x18,
+ 0x02, 0x27, 0x04, 0x02, 0x0a, 0x02, 0x01, 0x06, 0x01, 0x00, 0x02, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01,
+ 0x03, 0x03, 0x02, 0x05, 0x04, 0x05, 0x07, 0x07, 0x07, 0x09, 0x0a, 0x0a,
+ 0x0a, 0x0a, 0x0a, 0x0d, 0x0d, 0x0d, 0x12, 0x13, 0x13, 0x18, 0x19, 0x18,
+ 0x27, 0x28, 0x26, 0x48, 0x4a, 0x46, 0x49, 0x4b, 0x47, 0x37, 0x3a, 0x36,
+ 0x3a, 0x3c, 0x39, 0x42, 0x43, 0x41, 0x30, 0x30, 0x30, 0x1f, 0x1f, 0x1f,
+ 0x17, 0x17, 0x17, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x07, 0x07, 0x07,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x03, 0x02, 0x01, 0x03, 0x02, 0x01, 0x05, 0x03, 0x03, 0x06, 0x04, 0x04,
+ 0x07, 0x04, 0x07, 0x09, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0c, 0x0a, 0x0b,
+ 0x0d, 0x0d, 0x0d, 0x0e, 0x0f, 0x0e, 0x13, 0x15, 0x11, 0x1c, 0x1e, 0x1a,
+ 0x2a, 0x2f, 0x26, 0x33, 0x37, 0x2e, 0x39, 0x40, 0x33, 0x2c, 0x50, 0x29,
+ 0x33, 0x98, 0x36, 0x47, 0xe8, 0x4a, 0x2e, 0xec, 0x31, 0x23, 0xf7, 0x2a,
+ 0x15, 0xf6, 0x24, 0x0d, 0xed, 0x20, 0x0e, 0xec, 0x22, 0x0e, 0xe7, 0x23,
+ 0x10, 0xe4, 0x21, 0x10, 0xe5, 0x21, 0x0e, 0xe8, 0x1f, 0x0e, 0xe8, 0x1f,
+ 0x0e, 0xe8, 0x1f, 0x0c, 0xe7, 0x1f, 0x0c, 0xe4, 0x20, 0x0d, 0xe3, 0x1f,
+ 0x0d, 0xe3, 0x20, 0x0c, 0xe6, 0x20, 0x0c, 0xe7, 0x1f, 0x0c, 0xe6, 0x1f,
+ 0x0c, 0xe7, 0x1f, 0x0c, 0xe5, 0x1f, 0x0c, 0xe5, 0x1f, 0x0c, 0xe5, 0x1f,
+ 0x0c, 0xe5, 0x1f, 0x0d, 0xe6, 0x1f, 0x0d, 0xe6, 0x1f, 0x0d, 0xe6, 0x1f,
+ 0x0d, 0xe6, 0x1f, 0x0d, 0xe6, 0x1f, 0x0c, 0xe6, 0x1e, 0x0c, 0xe6, 0x1e,
+ 0x0c, 0xe6, 0x1e, 0x0c, 0xe6, 0x1e, 0x0c, 0xe6, 0x1f, 0x0c, 0xe6, 0x1f,
+ 0x0c, 0xe6, 0x1f, 0x0c, 0xe6, 0x1f, 0x0c, 0xe6, 0x1f, 0x0c, 0xe6, 0x1f,
+ 0x0c, 0xe6, 0x1f, 0x0c, 0xe6, 0x1e, 0x0c, 0xe6, 0x1e, 0x0c, 0xe6, 0x1f,
+ 0x0c, 0xe6, 0x1f, 0x0d, 0xe6, 0x1f, 0x0d, 0xe6, 0x1f, 0x0d, 0xe7, 0x1f,
+ 0x0b, 0xe5, 0x20, 0x08, 0xe6, 0x21, 0x08, 0xe6, 0x21, 0x0a, 0xe6, 0x1f,
+ 0x0a, 0xe7, 0x1f, 0x09, 0xe8, 0x1f, 0x0c, 0xe7, 0x1f, 0x13, 0xe3, 0x1e,
+ 0x12, 0xe3, 0x1f, 0x0b, 0xe7, 0x1e, 0x0c, 0xe8, 0x21, 0x19, 0xe8, 0x29,
+ 0x0e, 0x94, 0x17, 0x03, 0x27, 0x04, 0x03, 0x09, 0x03, 0x03, 0x05, 0x01,
+ 0x01, 0x01, 0x00, 0x03, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x02,
+ 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06,
+ 0x08, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0d, 0x0e, 0x0e, 0x0f, 0x10, 0x10,
+ 0x16, 0x17, 0x17, 0x25, 0x27, 0x26, 0x47, 0x4a, 0x46, 0x4f, 0x53, 0x4e,
+ 0x42, 0x47, 0x42, 0x47, 0x49, 0x47, 0x43, 0x46, 0x43, 0x34, 0x35, 0x34,
+ 0x22, 0x22, 0x22, 0x18, 0x18, 0x18, 0x15, 0x15, 0x15, 0x12, 0x11, 0x11,
+ 0x0c, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09,
+ 0x06, 0x07, 0x07, 0x03, 0x03, 0x03, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x04, 0x02, 0x01, 0x04, 0x01, 0x01, 0x06, 0x03, 0x03,
+ 0x07, 0x04, 0x04, 0x08, 0x04, 0x07, 0x0a, 0x08, 0x0a, 0x0a, 0x0a, 0x0b,
+ 0x0c, 0x0b, 0x0c, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0e, 0x13, 0x15, 0x11,
+ 0x1e, 0x21, 0x1d, 0x2c, 0x31, 0x29, 0x38, 0x3c, 0x34, 0x48, 0x50, 0x43,
+ 0x38, 0x5d, 0x35, 0x3c, 0xa0, 0x3f, 0x4b, 0xe8, 0x4e, 0x2e, 0xe5, 0x30,
+ 0x26, 0xf3, 0x2a, 0x18, 0xf3, 0x25, 0x10, 0xea, 0x22, 0x12, 0xec, 0x25,
+ 0x12, 0xe6, 0x25, 0x12, 0xe2, 0x23, 0x13, 0xe2, 0x22, 0x11, 0xe4, 0x20,
+ 0x11, 0xe4, 0x20, 0x11, 0xe4, 0x20, 0x0f, 0xe3, 0x20, 0x0f, 0xdf, 0x22,
+ 0x10, 0xde, 0x22, 0x10, 0xdf, 0x22, 0x10, 0xe3, 0x22, 0x10, 0xe4, 0x20,
+ 0x10, 0xe4, 0x20, 0x10, 0xe4, 0x20, 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20,
+ 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20,
+ 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x21, 0x0f, 0xe2, 0x1f,
+ 0x0f, 0xe2, 0x1f, 0x0f, 0xe2, 0x1f, 0x0f, 0xe2, 0x20, 0x10, 0xe3, 0x20,
+ 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20,
+ 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20, 0x0f, 0xe2, 0x1f, 0x0f, 0xe2, 0x1f,
+ 0x10, 0xe3, 0x21, 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20, 0x10, 0xe3, 0x20,
+ 0x10, 0xe4, 0x20, 0x0e, 0xe3, 0x22, 0x0b, 0xe2, 0x22, 0x0b, 0xe2, 0x22,
+ 0x0d, 0xe2, 0x21, 0x0e, 0xe3, 0x21, 0x0c, 0xe4, 0x20, 0x11, 0xe2, 0x21,
+ 0x18, 0xdf, 0x20, 0x18, 0xde, 0x20, 0x0e, 0xe1, 0x1f, 0x0f, 0xe1, 0x21,
+ 0x1d, 0xe6, 0x2a, 0x14, 0x97, 0x1a, 0x07, 0x2b, 0x08, 0x08, 0x0d, 0x07,
+ 0x07, 0x08, 0x05, 0x05, 0x05, 0x04, 0x07, 0x05, 0x04, 0x08, 0x06, 0x05,
+ 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08,
+ 0x08, 0x09, 0x09, 0x0b, 0x0b, 0x0c, 0x0d, 0x0d, 0x0d, 0x10, 0x12, 0x12,
+ 0x11, 0x12, 0x13, 0x19, 0x1b, 0x1a, 0x29, 0x2b, 0x2a, 0x4b, 0x4f, 0x4a,
+ 0x57, 0x5c, 0x57, 0x53, 0x59, 0x55, 0x5a, 0x5d, 0x5b, 0x4a, 0x4d, 0x4a,
+ 0x39, 0x39, 0x38, 0x26, 0x26, 0x26, 0x19, 0x19, 0x19, 0x16, 0x16, 0x16,
+ 0x13, 0x12, 0x12, 0x0d, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a,
+ 0x09, 0x09, 0x09, 0x06, 0x07, 0x07, 0x03, 0x03, 0x03, 0x02, 0x01, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x01, 0x03, 0x01, 0x00,
+ 0x06, 0x03, 0x02, 0x07, 0x04, 0x03, 0x07, 0x05, 0x06, 0x09, 0x09, 0x0a,
+ 0x09, 0x0a, 0x0b, 0x0b, 0x0b, 0x0c, 0x0e, 0x0f, 0x0f, 0x11, 0x11, 0x11,
+ 0x13, 0x16, 0x14, 0x1f, 0x22, 0x1f, 0x30, 0x33, 0x2e, 0x57, 0x5a, 0x54,
+ 0x7c, 0x83, 0x77, 0x60, 0x83, 0x5d, 0x4a, 0xa6, 0x4c, 0x59, 0xe7, 0x5c,
+ 0x42, 0xe4, 0x43, 0x3b, 0xee, 0x3d, 0x30, 0xef, 0x39, 0x27, 0xe8, 0x34,
+ 0x28, 0xea, 0x37, 0x26, 0xe3, 0x36, 0x26, 0xe0, 0x33, 0x27, 0xe1, 0x33,
+ 0x26, 0xe3, 0x30, 0x26, 0xe3, 0x2f, 0x26, 0xe3, 0x2f, 0x24, 0xe3, 0x2f,
+ 0x24, 0xe0, 0x31, 0x24, 0xde, 0x32, 0x24, 0xdf, 0x32, 0x24, 0xe2, 0x31,
+ 0x24, 0xe4, 0x30, 0x24, 0xe3, 0x30, 0x24, 0xe4, 0x30, 0x24, 0xe2, 0x30,
+ 0x24, 0xe2, 0x30, 0x24, 0xe2, 0x30, 0x25, 0xe2, 0x30, 0x24, 0xe1, 0x2f,
+ 0x24, 0xe1, 0x2f, 0x24, 0xe1, 0x2f, 0x24, 0xe1, 0x2f, 0x24, 0xe1, 0x30,
+ 0x23, 0xe1, 0x2f, 0x23, 0xe1, 0x2f, 0x23, 0xe1, 0x2f, 0x24, 0xe2, 0x30,
+ 0x24, 0xe2, 0x30, 0x24, 0xe2, 0x30, 0x24, 0xe2, 0x30, 0x24, 0xe2, 0x30,
+ 0x24, 0xe2, 0x30, 0x24, 0xe2, 0x30, 0x25, 0xe2, 0x30, 0x23, 0xe1, 0x2f,
+ 0x23, 0xe1, 0x2f, 0x24, 0xe1, 0x30, 0x24, 0xe1, 0x2f, 0x25, 0xe2, 0x30,
+ 0x24, 0xe2, 0x30, 0x24, 0xe3, 0x30, 0x24, 0xe2, 0x31, 0x22, 0xe2, 0x30,
+ 0x22, 0xe2, 0x30, 0x23, 0xe0, 0x31, 0x24, 0xe1, 0x31, 0x24, 0xe2, 0x30,
+ 0x26, 0xe1, 0x30, 0x2a, 0xdf, 0x2f, 0x29, 0xde, 0x30, 0x23, 0xdf, 0x2f,
+ 0x25, 0xe2, 0x32, 0x30, 0xe5, 0x38, 0x27, 0xa2, 0x2a, 0x18, 0x3f, 0x17,
+ 0x1c, 0x22, 0x19, 0x1b, 0x1b, 0x17, 0x1a, 0x18, 0x17, 0x19, 0x18, 0x16,
+ 0x1a, 0x18, 0x17, 0x1a, 0x19, 0x18, 0x1b, 0x1a, 0x19, 0x1c, 0x1a, 0x19,
+ 0x1d, 0x1b, 0x19, 0x1e, 0x1c, 0x1a, 0x21, 0x1f, 0x1d, 0x22, 0x21, 0x1f,
+ 0x25, 0x26, 0x24, 0x26, 0x27, 0x26, 0x2e, 0x31, 0x2d, 0x3e, 0x41, 0x3e,
+ 0x5f, 0x62, 0x5d, 0x68, 0x6b, 0x65, 0x7c, 0x7f, 0x7b, 0x8c, 0x8e, 0x8c,
+ 0x69, 0x69, 0x67, 0x3d, 0x3c, 0x3b, 0x28, 0x27, 0x27, 0x1b, 0x1b, 0x1b,
+ 0x15, 0x17, 0x16, 0x11, 0x13, 0x12, 0x0c, 0x0d, 0x0c, 0x0b, 0x0b, 0x0b,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x07, 0x07, 0x07, 0x04, 0x03, 0x03,
+ 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x00,
+ 0x03, 0x01, 0x00, 0x06, 0x03, 0x02, 0x07, 0x03, 0x03, 0x07, 0x06, 0x06,
+ 0x09, 0x09, 0x09, 0x09, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0d, 0x0e, 0x0f,
+ 0x12, 0x13, 0x14, 0x14, 0x16, 0x16, 0x1f, 0x22, 0x20, 0x33, 0x36, 0x32,
+ 0x71, 0x73, 0x6d, 0xa5, 0xac, 0xa0, 0x7f, 0xa2, 0x7d, 0x53, 0xab, 0x56,
+ 0x63, 0xe7, 0x67, 0x52, 0xe5, 0x54, 0x4b, 0xea, 0x4d, 0x42, 0xec, 0x48,
+ 0x3a, 0xe6, 0x42, 0x3a, 0xe9, 0x44, 0x36, 0xe2, 0x42, 0x36, 0xe0, 0x40,
+ 0x36, 0xe1, 0x40, 0x37, 0xe3, 0x3d, 0x36, 0xe4, 0x3c, 0x36, 0xe4, 0x3c,
+ 0x36, 0xe3, 0x3c, 0x36, 0xe1, 0x3d, 0x35, 0xdf, 0x3f, 0x35, 0xe0, 0x3f,
+ 0x35, 0xe2, 0x3e, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c,
+ 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c,
+ 0x34, 0xe1, 0x3c, 0x34, 0xe1, 0x3c, 0x34, 0xe1, 0x3c, 0x34, 0xe1, 0x3c,
+ 0x34, 0xe1, 0x3c, 0x34, 0xe0, 0x3b, 0x34, 0xe0, 0x3b, 0x34, 0xe0, 0x3b,
+ 0x35, 0xe2, 0x3d, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c,
+ 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c,
+ 0x34, 0xe0, 0x3b, 0x34, 0xe0, 0x3b, 0x34, 0xe1, 0x3c, 0x34, 0xe1, 0x3c,
+ 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c, 0x35, 0xe3, 0x3c, 0x34, 0xe3, 0x3d,
+ 0x34, 0xe2, 0x3b, 0x34, 0xe2, 0x3c, 0x34, 0xe0, 0x3e, 0x37, 0xe0, 0x3e,
+ 0x37, 0xe1, 0x3c, 0x39, 0xe0, 0x3c, 0x39, 0xe0, 0x3b, 0x37, 0xdf, 0x3c,
+ 0x33, 0xe0, 0x3c, 0x38, 0xe5, 0x3f, 0x3f, 0xe5, 0x43, 0x37, 0xab, 0x37,
+ 0x26, 0x51, 0x23, 0x2a, 0x33, 0x26, 0x29, 0x2b, 0x25, 0x2a, 0x28, 0x25,
+ 0x28, 0x28, 0x24, 0x29, 0x27, 0x26, 0x29, 0x28, 0x26, 0x2b, 0x29, 0x27,
+ 0x2c, 0x2a, 0x27, 0x2e, 0x2b, 0x28, 0x2f, 0x2c, 0x29, 0x32, 0x2f, 0x2c,
+ 0x33, 0x31, 0x2e, 0x35, 0x35, 0x31, 0x37, 0x39, 0x35, 0x40, 0x43, 0x3e,
+ 0x50, 0x53, 0x4e, 0x6f, 0x71, 0x6c, 0x74, 0x76, 0x70, 0x9c, 0x9d, 0x97,
+ 0xb2, 0xb3, 0xb1, 0x82, 0x80, 0x7e, 0x40, 0x3e, 0x3d, 0x29, 0x28, 0x28,
+ 0x1c, 0x1c, 0x1c, 0x15, 0x17, 0x17, 0x11, 0x13, 0x13, 0x0c, 0x0d, 0x0d,
+ 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x08, 0x07, 0x07,
+ 0x05, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x03, 0x01, 0x07, 0x04, 0x02,
+ 0x07, 0x08, 0x05, 0x09, 0x0a, 0x09, 0x09, 0x0b, 0x0b, 0x0a, 0x0c, 0x0b,
+ 0x0d, 0x0e, 0x0e, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x20, 0x22, 0x22,
+ 0x39, 0x39, 0x38, 0x94, 0x94, 0x90, 0xda, 0xdf, 0xd4, 0xa8, 0xc9, 0xa6,
+ 0x60, 0xb1, 0x62, 0x72, 0xe8, 0x75, 0x68, 0xe7, 0x69, 0x61, 0xe7, 0x61,
+ 0x5b, 0xe9, 0x5d, 0x53, 0xe6, 0x56, 0x52, 0xe9, 0x58, 0x4c, 0xe1, 0x54,
+ 0x4c, 0xe1, 0x53, 0x4c, 0xe2, 0x52, 0x4d, 0xe5, 0x4e, 0x4d, 0xe6, 0x4d,
+ 0x4c, 0xe6, 0x4c, 0x4d, 0xe6, 0x4c, 0x4d, 0xe4, 0x4d, 0x4a, 0xe2, 0x50,
+ 0x4a, 0xe2, 0x51, 0x4a, 0xe5, 0x4e, 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d,
+ 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d,
+ 0x4b, 0xe5, 0x4d, 0x4a, 0xe2, 0x4c, 0x4a, 0xe2, 0x4c, 0x4a, 0xe2, 0x4c,
+ 0x4a, 0xe2, 0x4c, 0x4a, 0xe2, 0x4c, 0x49, 0xe2, 0x4c, 0x49, 0xe2, 0x4c,
+ 0x49, 0xe2, 0x4c, 0x4b, 0xe5, 0x4e, 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d,
+ 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d,
+ 0x4b, 0xe5, 0x4d, 0x49, 0xe2, 0x4c, 0x49, 0xe2, 0x4c, 0x4a, 0xe2, 0x4c,
+ 0x4a, 0xe2, 0x4c, 0x4b, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d, 0x4a, 0xe5, 0x4d,
+ 0x4a, 0xe5, 0x4d, 0x4c, 0xe5, 0x4b, 0x4d, 0xe4, 0x4c, 0x4c, 0xe1, 0x4f,
+ 0x4e, 0xe0, 0x50, 0x50, 0xe1, 0x4d, 0x50, 0xe1, 0x4c, 0x4c, 0xe3, 0x4c,
+ 0x49, 0xe2, 0x4c, 0x49, 0xe2, 0x4c, 0x50, 0xe9, 0x51, 0x52, 0xe6, 0x53,
+ 0x4b, 0xb7, 0x49, 0x37, 0x66, 0x33, 0x3d, 0x48, 0x37, 0x3d, 0x3f, 0x36,
+ 0x3e, 0x3b, 0x37, 0x3b, 0x3b, 0x36, 0x3c, 0x3a, 0x38, 0x3c, 0x3b, 0x38,
+ 0x3e, 0x3d, 0x39, 0x40, 0x3d, 0x39, 0x42, 0x3e, 0x3a, 0x44, 0x40, 0x3b,
+ 0x47, 0x43, 0x3f, 0x49, 0x45, 0x40, 0x4a, 0x49, 0x43, 0x4e, 0x4e, 0x48,
+ 0x56, 0x59, 0x52, 0x67, 0x68, 0x62, 0x84, 0x84, 0x7e, 0x84, 0x84, 0x7e,
+ 0xc4, 0xc2, 0xbc, 0xe3, 0xe1, 0xe0, 0xa3, 0x9f, 0x9c, 0x46, 0x42, 0x41,
+ 0x2b, 0x29, 0x29, 0x1d, 0x1d, 0x1d, 0x14, 0x18, 0x17, 0x0f, 0x13, 0x13,
+ 0x0b, 0x0f, 0x0d, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+ 0x09, 0x07, 0x07, 0x06, 0x04, 0x04, 0x02, 0x03, 0x01, 0x02, 0x03, 0x01,
+ 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x03, 0x01, 0x01, 0x06, 0x03, 0x01,
+ 0x07, 0x04, 0x02, 0x07, 0x08, 0x05, 0x09, 0x0a, 0x09, 0x0a, 0x0b, 0x0b,
+ 0x0b, 0x0c, 0x0b, 0x0c, 0x0e, 0x0e, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
+ 0x22, 0x23, 0x23, 0x41, 0x41, 0x40, 0xaa, 0xaa, 0xa6, 0xe9, 0xed, 0xe4,
+ 0xb5, 0xd6, 0xb2, 0x69, 0xb9, 0x6a, 0x7a, 0xeb, 0x7d, 0x71, 0xee, 0x72,
+ 0x6b, 0xee, 0x69, 0x65, 0xf0, 0x65, 0x5e, 0xee, 0x5f, 0x5d, 0xf0, 0x61,
+ 0x57, 0xeb, 0x5d, 0x58, 0xeb, 0x5d, 0x58, 0xec, 0x5c, 0x59, 0xee, 0x58,
+ 0x58, 0xee, 0x57, 0x58, 0xee, 0x56, 0x59, 0xee, 0x56, 0x59, 0xee, 0x57,
+ 0x56, 0xec, 0x5a, 0x56, 0xec, 0x5a, 0x56, 0xee, 0x58, 0x56, 0xee, 0x57,
+ 0x56, 0xee, 0x57, 0x56, 0xee, 0x57, 0x56, 0xee, 0x57, 0x56, 0xee, 0x57,
+ 0x56, 0xee, 0x57, 0x56, 0xee, 0x57, 0x55, 0xec, 0x56, 0x55, 0xec, 0x56,
+ 0x55, 0xec, 0x56, 0x55, 0xec, 0x56, 0x55, 0xec, 0x56, 0x55, 0xec, 0x56,
+ 0x55, 0xec, 0x56, 0x55, 0xec, 0x56, 0x56, 0xee, 0x57, 0x56, 0xee, 0x57,
+ 0x56, 0xee, 0x57, 0x56, 0xee, 0x57, 0x56, 0xee, 0x57, 0x56, 0xee, 0x57,
+ 0x56, 0xee, 0x57, 0x56, 0xee, 0x57, 0x55, 0xec, 0x56, 0x55, 0xec, 0x56,
+ 0x55, 0xec, 0x56, 0x55, 0xec, 0x56, 0x56, 0xee, 0x57, 0x56, 0xee, 0x57,
+ 0x56, 0xee, 0x57, 0x56, 0xee, 0x56, 0x56, 0xee, 0x54, 0x57, 0xee, 0x55,
+ 0x56, 0xeb, 0x58, 0x58, 0xea, 0x59, 0x5b, 0xeb, 0x57, 0x5b, 0xeb, 0x56,
+ 0x57, 0xec, 0x56, 0x54, 0xec, 0x56, 0x52, 0xeb, 0x55, 0x59, 0xf1, 0x5a,
+ 0x5a, 0xec, 0x5a, 0x52, 0xbe, 0x50, 0x3d, 0x6c, 0x39, 0x41, 0x4e, 0x3c,
+ 0x41, 0x44, 0x3b, 0x42, 0x40, 0x3c, 0x3f, 0x40, 0x3b, 0x41, 0x3f, 0x3d,
+ 0x42, 0x41, 0x3d, 0x44, 0x42, 0x3f, 0x46, 0x42, 0x3f, 0x48, 0x43, 0x40,
+ 0x49, 0x45, 0x41, 0x4c, 0x48, 0x44, 0x4f, 0x4a, 0x45, 0x50, 0x4f, 0x49,
+ 0x54, 0x54, 0x4d, 0x5b, 0x5e, 0x57, 0x6b, 0x6d, 0x66, 0x88, 0x88, 0x82,
+ 0x8a, 0x89, 0x83, 0xcd, 0xca, 0xc5, 0xef, 0xed, 0xec, 0xb7, 0xb1, 0xae,
+ 0x4e, 0x4a, 0x49, 0x2c, 0x2a, 0x29, 0x1c, 0x1c, 0x1c, 0x14, 0x16, 0x16,
+ 0x0f, 0x12, 0x12, 0x0d, 0x0f, 0x0e, 0x0b, 0x0c, 0x0c, 0x0a, 0x0a, 0x0a,
+ 0x0a, 0x0a, 0x0a, 0x09, 0x07, 0x07, 0x06, 0x04, 0x04, 0x02, 0x03, 0x01,
+ 0x02, 0x03, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01, 0x01, 0x04, 0x02, 0x02,
+ 0x06, 0x02, 0x01, 0x07, 0x04, 0x02, 0x07, 0x08, 0x06, 0x0a, 0x0a, 0x09,
+ 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0b, 0x0d, 0x0d, 0x0e, 0x12, 0x11, 0x12,
+ 0x17, 0x16, 0x17, 0x24, 0x24, 0x24, 0x4b, 0x4a, 0x49, 0xbc, 0xbc, 0xb7,
+ 0xee, 0xf2, 0xea, 0xbc, 0xdc, 0xb6, 0x70, 0xc0, 0x70, 0x81, 0xef, 0x82,
+ 0x78, 0xf7, 0x76, 0x72, 0xf8, 0x6f, 0x6c, 0xf9, 0x6a, 0x65, 0xf7, 0x64,
+ 0x66, 0xf8, 0x67, 0x61, 0xf5, 0x63, 0x62, 0xf7, 0x64, 0x62, 0xf7, 0x63,
+ 0x62, 0xf8, 0x5f, 0x61, 0xf8, 0x5e, 0x61, 0xf8, 0x5d, 0x61, 0xf8, 0x5d,
+ 0x61, 0xf8, 0x5f, 0x5f, 0xf7, 0x61, 0x5f, 0xf7, 0x61, 0x5e, 0xf8, 0x5f,
+ 0x5e, 0xf8, 0x5e, 0x5e, 0xf8, 0x5e, 0x5e, 0xf8, 0x5e, 0x5e, 0xf8, 0x5e,
+ 0x5e, 0xf8, 0x5e, 0x5e, 0xf8, 0x5e, 0x5f, 0xf8, 0x5e, 0x5e, 0xf7, 0x5e,
+ 0x5e, 0xf7, 0x5e, 0x5e, 0xf7, 0x5e, 0x5e, 0xf7, 0x5e, 0x5e, 0xf7, 0x5e,
+ 0x5e, 0xf7, 0x5e, 0x5e, 0xf7, 0x5e, 0x5e, 0xf7, 0x5e, 0x5f, 0xf8, 0x5e,
+ 0x5e, 0xf8, 0x5e, 0x5e, 0xf8, 0x5e, 0x5e, 0xf8, 0x5e, 0x5e, 0xf8, 0x5e,
+ 0x5e, 0xf8, 0x5e, 0x5e, 0xf8, 0x5e, 0x5f, 0xf8, 0x5e, 0x5e, 0xf7, 0x5e,
+ 0x5e, 0xf7, 0x5e, 0x5e, 0xf7, 0x5e, 0x5e, 0xf7, 0x5e, 0x5f, 0xf8, 0x5e,
+ 0x5f, 0xf8, 0x5f, 0x5f, 0xf8, 0x5f, 0x5f, 0xf8, 0x5f, 0x5d, 0xf8, 0x5b,
+ 0x5e, 0xf8, 0x5c, 0x5d, 0xf7, 0x5f, 0x5f, 0xf7, 0x60, 0x62, 0xf7, 0x5f,
+ 0x62, 0xf7, 0x5e, 0x5f, 0xf8, 0x5e, 0x5c, 0xf7, 0x5e, 0x59, 0xf6, 0x5b,
+ 0x5f, 0xf9, 0x5f, 0x60, 0xf3, 0x5f, 0x56, 0xc4, 0x54, 0x40, 0x6f, 0x3c,
+ 0x42, 0x4f, 0x3e, 0x42, 0x45, 0x3c, 0x42, 0x42, 0x3d, 0x41, 0x41, 0x3d,
+ 0x42, 0x41, 0x3e, 0x44, 0x42, 0x3f, 0x47, 0x44, 0x41, 0x48, 0x45, 0x41,
+ 0x49, 0x44, 0x42, 0x4b, 0x46, 0x43, 0x4d, 0x4a, 0x45, 0x50, 0x4c, 0x47,
+ 0x51, 0x50, 0x4b, 0x55, 0x55, 0x4e, 0x5c, 0x5f, 0x58, 0x6b, 0x6d, 0x67,
+ 0x89, 0x89, 0x82, 0x8d, 0x8b, 0x86, 0xce, 0xcb, 0xc6, 0xf2, 0xf1, 0xef,
+ 0xc6, 0xc1, 0xbe, 0x58, 0x53, 0x52, 0x2d, 0x2b, 0x2a, 0x1c, 0x1a, 0x1a,
+ 0x13, 0x14, 0x15, 0x0f, 0x11, 0x11, 0x0e, 0x10, 0x0f, 0x0d, 0x0f, 0x0f,
+ 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x07, 0x07, 0x06, 0x03, 0x04,
+ 0x02, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x03, 0x01, 0x01,
+ 0x04, 0x02, 0x02, 0x05, 0x03, 0x01, 0x07, 0x04, 0x03, 0x07, 0x08, 0x06,
+ 0x0a, 0x0a, 0x09, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0b, 0x0e, 0x0d, 0x0e,
+ 0x11, 0x10, 0x11, 0x17, 0x16, 0x17, 0x24, 0x23, 0x23, 0x52, 0x50, 0x4f,
+ 0xce, 0xce, 0xc7, 0xf1, 0xf5, 0xee, 0xbc, 0xdb, 0xb5, 0x75, 0xc4, 0x72,
+ 0x85, 0xf2, 0x85, 0x7d, 0xfc, 0x79, 0x78, 0xfe, 0x72, 0x72, 0xff, 0x6d,
+ 0x6c, 0xfe, 0x68, 0x6c, 0xff, 0x6b, 0x69, 0xfe, 0x68, 0x6a, 0xff, 0x68,
+ 0x6a, 0xff, 0x68, 0x69, 0xff, 0x64, 0x69, 0xff, 0x63, 0x69, 0xff, 0x62,
+ 0x68, 0xff, 0x62, 0x68, 0xff, 0x63, 0x66, 0xff, 0x66, 0x66, 0xff, 0x66,
+ 0x66, 0xff, 0x64, 0x66, 0xff, 0x63, 0x66, 0xff, 0x63, 0x66, 0xff, 0x63,
+ 0x66, 0xff, 0x63, 0x66, 0xff, 0x63, 0x66, 0xff, 0x63, 0x66, 0xff, 0x63,
+ 0x65, 0xff, 0x63, 0x65, 0xff, 0x63, 0x65, 0xff, 0x63, 0x65, 0xff, 0x63,
+ 0x65, 0xff, 0x63, 0x65, 0xff, 0x63, 0x65, 0xff, 0x63, 0x65, 0xff, 0x63,
+ 0x66, 0xff, 0x63, 0x66, 0xff, 0x63, 0x66, 0xff, 0x63, 0x66, 0xff, 0x63,
+ 0x66, 0xff, 0x63, 0x66, 0xff, 0x63, 0x66, 0xff, 0x63, 0x66, 0xff, 0x63,
+ 0x65, 0xff, 0x63, 0x65, 0xff, 0x63, 0x65, 0xff, 0x63, 0x66, 0xff, 0x63,
+ 0x66, 0xff, 0x63, 0x67, 0xff, 0x64, 0x67, 0xff, 0x64, 0x66, 0xff, 0x64,
+ 0x63, 0xff, 0x60, 0x63, 0xff, 0x61, 0x63, 0xff, 0x64, 0x65, 0xff, 0x65,
+ 0x68, 0xff, 0x64, 0x67, 0xff, 0x62, 0x64, 0xff, 0x63, 0x62, 0xff, 0x63,
+ 0x5e, 0xfe, 0x60, 0x62, 0xff, 0x63, 0x63, 0xf8, 0x63, 0x58, 0xc7, 0x56,
+ 0x3f, 0x6f, 0x3c, 0x41, 0x4d, 0x3d, 0x41, 0x45, 0x3b, 0x41, 0x41, 0x3c,
+ 0x40, 0x40, 0x3c, 0x42, 0x41, 0x3e, 0x43, 0x42, 0x3f, 0x46, 0x44, 0x41,
+ 0x47, 0x44, 0x41, 0x48, 0x43, 0x42, 0x4a, 0x45, 0x43, 0x4c, 0x49, 0x45,
+ 0x4f, 0x4b, 0x47, 0x4f, 0x4f, 0x4b, 0x53, 0x54, 0x4d, 0x5a, 0x5c, 0x56,
+ 0x68, 0x6a, 0x64, 0x85, 0x86, 0x7f, 0x8c, 0x89, 0x84, 0xcc, 0xc9, 0xc4,
+ 0xf4, 0xf3, 0xf1, 0xd3, 0xcd, 0xca, 0x5f, 0x5a, 0x59, 0x2d, 0x2b, 0x2a,
+ 0x1c, 0x1b, 0x1a, 0x14, 0x15, 0x15, 0x10, 0x11, 0x11, 0x0e, 0x0f, 0x0f,
+ 0x0e, 0x0f, 0x0f, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x07, 0x07,
+ 0x06, 0x03, 0x04, 0x02, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00,
+ 0x03, 0x00, 0x00, 0x04, 0x01, 0x02, 0x04, 0x03, 0x01, 0x06, 0x06, 0x03,
+ 0x07, 0x07, 0x05, 0x09, 0x0a, 0x09, 0x0a, 0x0a, 0x0a, 0x0b, 0x0c, 0x0b,
+ 0x0f, 0x0d, 0x0e, 0x11, 0x10, 0x11, 0x18, 0x15, 0x16, 0x22, 0x20, 0x1f,
+ 0x53, 0x50, 0x4d, 0xd6, 0xd5, 0xce, 0xf2, 0xf5, 0xed, 0xb5, 0xd3, 0xad,
+ 0x75, 0xc3, 0x70, 0x85, 0xf2, 0x82, 0x7e, 0xfc, 0x77, 0x78, 0xfe, 0x71,
+ 0x73, 0xff, 0x6d, 0x6e, 0xfe, 0x68, 0x6e, 0xff, 0x6c, 0x6a, 0xfe, 0x68,
+ 0x6b, 0xff, 0x68, 0x6a, 0xff, 0x67, 0x6b, 0xff, 0x65, 0x6b, 0xff, 0x62,
+ 0x6b, 0xff, 0x61, 0x69, 0xff, 0x61, 0x69, 0xff, 0x62, 0x67, 0xff, 0x65,
+ 0x67, 0xff, 0x66, 0x68, 0xff, 0x64, 0x68, 0xff, 0x64, 0x68, 0xff, 0x64,
+ 0x68, 0xff, 0x64, 0x68, 0xff, 0x64, 0x68, 0xff, 0x64, 0x68, 0xff, 0x64,
+ 0x68, 0xff, 0x64, 0x67, 0xff, 0x63, 0x67, 0xff, 0x63, 0x67, 0xff, 0x63,
+ 0x67, 0xff, 0x63, 0x67, 0xff, 0x63, 0x67, 0xff, 0x63, 0x67, 0xff, 0x63,
+ 0x67, 0xff, 0x63, 0x68, 0xff, 0x64, 0x68, 0xff, 0x64, 0x68, 0xff, 0x64,
+ 0x68, 0xff, 0x64, 0x68, 0xff, 0x64, 0x68, 0xff, 0x64, 0x68, 0xff, 0x64,
+ 0x68, 0xff, 0x64, 0x67, 0xff, 0x63, 0x67, 0xff, 0x63, 0x67, 0xff, 0x63,
+ 0x68, 0xff, 0x64, 0x68, 0xff, 0x64, 0x69, 0xff, 0x64, 0x69, 0xff, 0x64,
+ 0x68, 0xff, 0x63, 0x65, 0xff, 0x60, 0x65, 0xff, 0x61, 0x64, 0xff, 0x64,
+ 0x65, 0xff, 0x65, 0x67, 0xff, 0x63, 0x66, 0xff, 0x62, 0x63, 0xff, 0x63,
+ 0x61, 0xff, 0x62, 0x5d, 0xfe, 0x60, 0x62, 0xff, 0x63, 0x62, 0xf8, 0x63,
+ 0x57, 0xc6, 0x55, 0x3c, 0x6c, 0x39, 0x3e, 0x4a, 0x3a, 0x3d, 0x42, 0x38,
+ 0x3e, 0x3f, 0x3a, 0x3d, 0x3d, 0x3a, 0x3f, 0x3e, 0x3b, 0x40, 0x3f, 0x3c,
+ 0x43, 0x41, 0x3d, 0x44, 0x41, 0x3d, 0x45, 0x40, 0x3e, 0x47, 0x42, 0x40,
+ 0x48, 0x46, 0x42, 0x4b, 0x48, 0x44, 0x4b, 0x4d, 0x47, 0x4f, 0x51, 0x4b,
+ 0x56, 0x58, 0x52, 0x63, 0x65, 0x5e, 0x80, 0x80, 0x79, 0x88, 0x85, 0x7f,
+ 0xc9, 0xc6, 0xbf, 0xf4, 0xf3, 0xf1, 0xd5, 0xcf, 0xcd, 0x5f, 0x5b, 0x59,
+ 0x2d, 0x2b, 0x2a, 0x1e, 0x1d, 0x1c, 0x16, 0x17, 0x17, 0x10, 0x12, 0x12,
+ 0x0d, 0x0e, 0x0e, 0x0c, 0x0d, 0x0d, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x09,
+ 0x09, 0x07, 0x07, 0x06, 0x04, 0x04, 0x02, 0x03, 0x01, 0x01, 0x02, 0x00,
+ 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x02, 0x03, 0x04, 0x02,
+ 0x05, 0x07, 0x04, 0x07, 0x07, 0x05, 0x09, 0x09, 0x08, 0x09, 0x0a, 0x09,
+ 0x0b, 0x0c, 0x0b, 0x0f, 0x0e, 0x0e, 0x12, 0x0f, 0x10, 0x19, 0x15, 0x16,
+ 0x20, 0x1d, 0x1c, 0x55, 0x50, 0x4c, 0xdd, 0xda, 0xd2, 0xf2, 0xf4, 0xeb,
+ 0xaf, 0xcb, 0xa5, 0x74, 0xc2, 0x6e, 0x84, 0xf2, 0x80, 0x7e, 0xfb, 0x76,
+ 0x78, 0xfe, 0x71, 0x74, 0xff, 0x6c, 0x6f, 0xfe, 0x68, 0x6f, 0xff, 0x6b,
+ 0x6b, 0xfe, 0x68, 0x6b, 0xfe, 0x68, 0x6b, 0xfe, 0x66, 0x6c, 0xff, 0x64,
+ 0x6c, 0xff, 0x62, 0x6b, 0xff, 0x61, 0x69, 0xff, 0x60, 0x69, 0xff, 0x61,
+ 0x67, 0xfe, 0x64, 0x67, 0xfe, 0x65, 0x6a, 0xfe, 0x63, 0x6a, 0xff, 0x63,
+ 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63,
+ 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63, 0x68, 0xff, 0x62, 0x68, 0xff, 0x62,
+ 0x68, 0xff, 0x62, 0x68, 0xff, 0x62, 0x68, 0xff, 0x62, 0x68, 0xff, 0x62,
+ 0x68, 0xff, 0x62, 0x68, 0xff, 0x62, 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63,
+ 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63,
+ 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63, 0x68, 0xff, 0x62, 0x68, 0xff, 0x62,
+ 0x68, 0xff, 0x62, 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63, 0x6a, 0xff, 0x63,
+ 0x6a, 0xff, 0x63, 0x69, 0xff, 0x62, 0x66, 0xff, 0x60, 0x65, 0xff, 0x60,
+ 0x64, 0xfe, 0x63, 0x65, 0xfe, 0x64, 0x67, 0xff, 0x62, 0x66, 0xff, 0x61,
+ 0x63, 0xff, 0x62, 0x61, 0xff, 0x62, 0x5e, 0xff, 0x60, 0x62, 0xff, 0x63,
+ 0x61, 0xf8, 0x63, 0x55, 0xc6, 0x54, 0x39, 0x6a, 0x36, 0x3b, 0x46, 0x37,
+ 0x3a, 0x3f, 0x36, 0x3c, 0x3c, 0x37, 0x3a, 0x3b, 0x37, 0x3c, 0x3c, 0x39,
+ 0x3e, 0x3d, 0x3a, 0x40, 0x3e, 0x39, 0x41, 0x3e, 0x39, 0x42, 0x3d, 0x3a,
+ 0x44, 0x3f, 0x3e, 0x45, 0x43, 0x40, 0x47, 0x45, 0x42, 0x48, 0x4a, 0x43,
+ 0x4b, 0x4e, 0x47, 0x52, 0x54, 0x4e, 0x5f, 0x60, 0x59, 0x7a, 0x7a, 0x74,
+ 0x83, 0x7f, 0x7a, 0xc5, 0xc2, 0xba, 0xf4, 0xf2, 0xf0, 0xd7, 0xd0, 0xcf,
+ 0x60, 0x5b, 0x5a, 0x2c, 0x2a, 0x2a, 0x1f, 0x1d, 0x1d, 0x18, 0x19, 0x19,
+ 0x10, 0x12, 0x12, 0x0c, 0x0d, 0x0d, 0x0b, 0x0c, 0x0c, 0x09, 0x0a, 0x0a,
+ 0x0a, 0x09, 0x09, 0x09, 0x07, 0x07, 0x06, 0x04, 0x04, 0x02, 0x03, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x02,
+ 0x03, 0x04, 0x01, 0x05, 0x07, 0x03, 0x06, 0x07, 0x05, 0x09, 0x09, 0x08,
+ 0x09, 0x0a, 0x09, 0x0b, 0x0c, 0x0b, 0x0f, 0x0d, 0x0e, 0x11, 0x0f, 0x10,
+ 0x18, 0x15, 0x16, 0x1e, 0x1b, 0x1b, 0x54, 0x4e, 0x4b, 0xdd, 0xd9, 0xd0,
+ 0xf0, 0xef, 0xe5, 0xaa, 0xc5, 0x9e, 0x72, 0xc3, 0x6c, 0x81, 0xf2, 0x7c,
+ 0x7b, 0xf9, 0x73, 0x76, 0xfd, 0x6e, 0x72, 0xfe, 0x69, 0x6c, 0xfd, 0x65,
+ 0x6c, 0xfe, 0x69, 0x68, 0xfc, 0x66, 0x69, 0xfb, 0x65, 0x68, 0xfc, 0x63,
+ 0x69, 0xfc, 0x60, 0x69, 0xfd, 0x5f, 0x69, 0xfd, 0x5e, 0x67, 0xfe, 0x5d,
+ 0x67, 0xfd, 0x5f, 0x65, 0xfc, 0x62, 0x65, 0xfc, 0x63, 0x66, 0xfc, 0x60,
+ 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60,
+ 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x65, 0xfc, 0x5f,
+ 0x65, 0xfc, 0x5f, 0x65, 0xfc, 0x5f, 0x65, 0xfc, 0x5f, 0x65, 0xfc, 0x5f,
+ 0x65, 0xfc, 0x5f, 0x65, 0xfc, 0x5f, 0x65, 0xfc, 0x5f, 0x67, 0xfc, 0x60,
+ 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60,
+ 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x65, 0xfc, 0x5f,
+ 0x65, 0xfc, 0x5f, 0x65, 0xfc, 0x5f, 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60,
+ 0x67, 0xfc, 0x60, 0x67, 0xfc, 0x60, 0x66, 0xfc, 0x5f, 0x64, 0xfd, 0x5d,
+ 0x63, 0xfd, 0x5e, 0x62, 0xfc, 0x61, 0x63, 0xfb, 0x62, 0x64, 0xfc, 0x5f,
+ 0x63, 0xfc, 0x5e, 0x60, 0xfc, 0x5f, 0x5f, 0xfd, 0x5f, 0x5c, 0xfe, 0x5f,
+ 0x60, 0xfd, 0x61, 0x60, 0xf8, 0x62, 0x55, 0xc6, 0x54, 0x38, 0x69, 0x35,
+ 0x38, 0x44, 0x35, 0x38, 0x3e, 0x35, 0x3a, 0x3b, 0x36, 0x38, 0x39, 0x35,
+ 0x3a, 0x3a, 0x36, 0x3b, 0x3b, 0x37, 0x3d, 0x3c, 0x37, 0x3e, 0x3c, 0x37,
+ 0x3f, 0x3b, 0x38, 0x42, 0x3d, 0x3b, 0x43, 0x40, 0x3d, 0x45, 0x42, 0x3f,
+ 0x45, 0x47, 0x42, 0x48, 0x4b, 0x46, 0x4f, 0x51, 0x4c, 0x5b, 0x5c, 0x56,
+ 0x77, 0x76, 0x6f, 0x7f, 0x7c, 0x75, 0xbf, 0xbc, 0xb4, 0xf3, 0xef, 0xec,
+ 0xd5, 0xce, 0xcc, 0x5e, 0x59, 0x57, 0x2a, 0x28, 0x27, 0x1e, 0x1d, 0x1c,
+ 0x18, 0x18, 0x19, 0x10, 0x12, 0x12, 0x0c, 0x0e, 0x0e, 0x0b, 0x0c, 0x0d,
+ 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x0a, 0x09, 0x07, 0x07, 0x06, 0x03, 0x03,
+ 0x02, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x03, 0x04, 0x01, 0x04, 0x06, 0x03, 0x07, 0x08, 0x06,
+ 0x09, 0x0a, 0x08, 0x09, 0x0a, 0x0a, 0x0c, 0x0c, 0x0c, 0x0e, 0x0c, 0x0d,
+ 0x11, 0x0e, 0x0f, 0x18, 0x14, 0x15, 0x1d, 0x1a, 0x19, 0x52, 0x4c, 0x49,
+ 0xdc, 0xd6, 0xcd, 0xee, 0xe9, 0xdd, 0xa5, 0xbf, 0x97, 0x70, 0xc2, 0x6a,
+ 0x7d, 0xf2, 0x78, 0x77, 0xf8, 0x6f, 0x73, 0xfc, 0x6b, 0x6e, 0xfc, 0x66,
+ 0x68, 0xfa, 0x63, 0x68, 0xfd, 0x65, 0x65, 0xfa, 0x63, 0x65, 0xf7, 0x62,
+ 0x65, 0xf8, 0x60, 0x64, 0xf9, 0x5c, 0x65, 0xfb, 0x5a, 0x65, 0xfb, 0x5a,
+ 0x64, 0xfc, 0x5b, 0x64, 0xfb, 0x5b, 0x62, 0xf8, 0x5e, 0x62, 0xf8, 0x5f,
+ 0x61, 0xf8, 0x5c, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b,
+ 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b,
+ 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b,
+ 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b,
+ 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b,
+ 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b,
+ 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b,
+ 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b, 0x62, 0xf9, 0x5b,
+ 0x60, 0xfb, 0x59, 0x60, 0xfb, 0x5a, 0x5f, 0xf8, 0x5d, 0x61, 0xf8, 0x5e,
+ 0x60, 0xfa, 0x5b, 0x60, 0xf9, 0x5a, 0x5d, 0xfa, 0x5b, 0x5b, 0xfb, 0x5b,
+ 0x5b, 0xfc, 0x5c, 0x5e, 0xfc, 0x5f, 0x5f, 0xf7, 0x60, 0x54, 0xc6, 0x54,
+ 0x37, 0x67, 0x35, 0x36, 0x42, 0x33, 0x35, 0x3c, 0x33, 0x38, 0x39, 0x34,
+ 0x36, 0x37, 0x33, 0x38, 0x38, 0x34, 0x39, 0x39, 0x35, 0x3b, 0x3a, 0x35,
+ 0x3c, 0x3a, 0x35, 0x3d, 0x39, 0x36, 0x40, 0x3b, 0x39, 0x41, 0x3e, 0x3b,
+ 0x42, 0x40, 0x3c, 0x43, 0x43, 0x40, 0x46, 0x48, 0x44, 0x4d, 0x4f, 0x4a,
+ 0x59, 0x59, 0x53, 0x73, 0x72, 0x6a, 0x7b, 0x78, 0x70, 0xba, 0xb7, 0xaf,
+ 0xf1, 0xec, 0xe7, 0xd4, 0xcc, 0xc7, 0x5d, 0x56, 0x54, 0x29, 0x25, 0x24,
+ 0x1c, 0x1b, 0x1b, 0x17, 0x17, 0x17, 0x10, 0x11, 0x12, 0x0d, 0x0f, 0x0e,
+ 0x0c, 0x0e, 0x0e, 0x0a, 0x0a, 0x0b, 0x09, 0x09, 0x0a, 0x09, 0x07, 0x07,
+ 0x06, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x02, 0x00,
+ 0x01, 0x02, 0x02, 0x01, 0x02, 0x02, 0x03, 0x04, 0x02, 0x04, 0x05, 0x03,
+ 0x07, 0x08, 0x06, 0x09, 0x09, 0x07, 0x09, 0x09, 0x0a, 0x0c, 0x0b, 0x0c,
+ 0x0d, 0x0b, 0x0c, 0x11, 0x0e, 0x0f, 0x17, 0x13, 0x14, 0x1c, 0x19, 0x17,
+ 0x51, 0x4b, 0x46, 0xd7, 0xcf, 0xc5, 0xe7, 0xe1, 0xd2, 0x9d, 0xb8, 0x8e,
+ 0x6c, 0xc2, 0x66, 0x76, 0xf1, 0x73, 0x71, 0xf5, 0x6a, 0x6e, 0xfa, 0x67,
+ 0x69, 0xfa, 0x61, 0x64, 0xf8, 0x5e, 0x62, 0xfb, 0x61, 0x60, 0xf7, 0x5f,
+ 0x61, 0xf4, 0x5e, 0x61, 0xf5, 0x5c, 0x5f, 0xf7, 0x58, 0x60, 0xf8, 0x57,
+ 0x60, 0xf9, 0x57, 0x5f, 0xfa, 0x57, 0x5f, 0xf9, 0x58, 0x5d, 0xf6, 0x5a,
+ 0x5d, 0xf5, 0x5b, 0x5c, 0xf5, 0x59, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57,
+ 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57,
+ 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57,
+ 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57,
+ 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57,
+ 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57,
+ 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x57,
+ 0x5c, 0xf6, 0x57, 0x5c, 0xf6, 0x57, 0x5c, 0xf6, 0x57, 0x5c, 0xf6, 0x57,
+ 0x5c, 0xf6, 0x57, 0x5c, 0xf9, 0x56, 0x5c, 0xf8, 0x57, 0x5c, 0xf5, 0x5a,
+ 0x5e, 0xf5, 0x5a, 0x5d, 0xf6, 0x57, 0x5d, 0xf6, 0x56, 0x5a, 0xf7, 0x57,
+ 0x58, 0xf9, 0x57, 0x58, 0xfa, 0x58, 0x5a, 0xfa, 0x5b, 0x5d, 0xf7, 0x5e,
+ 0x53, 0xc7, 0x54, 0x36, 0x67, 0x34, 0x33, 0x41, 0x32, 0x33, 0x3b, 0x32,
+ 0x35, 0x38, 0x32, 0x35, 0x36, 0x32, 0x37, 0x36, 0x32, 0x38, 0x37, 0x33,
+ 0x39, 0x38, 0x34, 0x3a, 0x38, 0x34, 0x3b, 0x37, 0x35, 0x3d, 0x39, 0x37,
+ 0x3e, 0x3b, 0x39, 0x3f, 0x3d, 0x3a, 0x40, 0x40, 0x3e, 0x44, 0x45, 0x42,
+ 0x4b, 0x4c, 0x47, 0x57, 0x56, 0x51, 0x6f, 0x6e, 0x67, 0x76, 0x73, 0x6b,
+ 0xb1, 0xad, 0xa5, 0xeb, 0xe4, 0xdd, 0xcf, 0xc7, 0xc0, 0x5a, 0x54, 0x51,
+ 0x26, 0x23, 0x22, 0x1b, 0x1a, 0x19, 0x17, 0x16, 0x16, 0x12, 0x12, 0x12,
+ 0x0f, 0x10, 0x0f, 0x0e, 0x0f, 0x0f, 0x0b, 0x0a, 0x0c, 0x09, 0x09, 0x0a,
+ 0x09, 0x07, 0x07, 0x06, 0x03, 0x03, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01,
+ 0x00, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x02,
+ 0x04, 0x04, 0x03, 0x06, 0x07, 0x06, 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a,
+ 0x0b, 0x0a, 0x0c, 0x0c, 0x0a, 0x0c, 0x12, 0x0e, 0x10, 0x16, 0x12, 0x12,
+ 0x1c, 0x18, 0x16, 0x50, 0x4a, 0x45, 0xcf, 0xc8, 0xbd, 0xe0, 0xdb, 0xcb,
+ 0x98, 0xb5, 0x88, 0x69, 0xc2, 0x63, 0x70, 0xf1, 0x6e, 0x6c, 0xf4, 0x67,
+ 0x69, 0xf9, 0x63, 0x65, 0xf9, 0x5f, 0x60, 0xf7, 0x5c, 0x5e, 0xf8, 0x5d,
+ 0x5c, 0xf5, 0x5c, 0x5e, 0xf4, 0x5b, 0x5d, 0xf4, 0x5a, 0x5d, 0xf5, 0x56,
+ 0x5c, 0xf5, 0x55, 0x5c, 0xf6, 0x55, 0x5b, 0xf7, 0x55, 0x5b, 0xf7, 0x55,
+ 0x59, 0xf4, 0x58, 0x59, 0xf4, 0x58, 0x58, 0xf4, 0x56, 0x59, 0xf5, 0x56,
+ 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56,
+ 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56,
+ 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56,
+ 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56,
+ 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56,
+ 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56, 0x59, 0xf5, 0x56,
+ 0x59, 0xf5, 0x56, 0x58, 0xf3, 0x55, 0x58, 0xf4, 0x55, 0x58, 0xf4, 0x55,
+ 0x58, 0xf4, 0x55, 0x58, 0xf4, 0x55, 0x5a, 0xf7, 0x54, 0x5a, 0xf7, 0x55,
+ 0x5a, 0xf4, 0x58, 0x5c, 0xf3, 0x58, 0x5b, 0xf5, 0x56, 0x5b, 0xf5, 0x55,
+ 0x57, 0xf6, 0x55, 0x55, 0xf7, 0x55, 0x54, 0xf7, 0x55, 0x57, 0xf8, 0x57,
+ 0x5b, 0xf7, 0x5b, 0x53, 0xc9, 0x53, 0x36, 0x67, 0x34, 0x33, 0x41, 0x31,
+ 0x33, 0x3b, 0x31, 0x34, 0x37, 0x31, 0x33, 0x35, 0x31, 0x34, 0x35, 0x31,
+ 0x37, 0x36, 0x32, 0x38, 0x37, 0x33, 0x39, 0x37, 0x34, 0x3a, 0x36, 0x35,
+ 0x3c, 0x38, 0x37, 0x3c, 0x3a, 0x39, 0x3e, 0x3c, 0x3a, 0x3f, 0x3f, 0x3c,
+ 0x43, 0x44, 0x41, 0x4a, 0x4b, 0x46, 0x56, 0x55, 0x50, 0x6d, 0x6c, 0x65,
+ 0x73, 0x70, 0x68, 0xaa, 0xa5, 0x9c, 0xe4, 0xdc, 0xd4, 0xca, 0xc0, 0xbb,
+ 0x59, 0x52, 0x4f, 0x25, 0x22, 0x21, 0x1b, 0x19, 0x18, 0x16, 0x16, 0x15,
+ 0x13, 0x14, 0x14, 0x11, 0x11, 0x11, 0x0d, 0x0f, 0x0e, 0x0c, 0x0b, 0x0b,
+ 0x0a, 0x0a, 0x09, 0x09, 0x07, 0x07, 0x06, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01,
+ 0x03, 0x02, 0x03, 0x04, 0x03, 0x04, 0x06, 0x06, 0x06, 0x08, 0x07, 0x08,
+ 0x0a, 0x09, 0x0a, 0x0b, 0x09, 0x0c, 0x0c, 0x09, 0x0c, 0x13, 0x0e, 0x11,
+ 0x14, 0x12, 0x10, 0x1b, 0x17, 0x15, 0x4f, 0x49, 0x43, 0xc7, 0xc0, 0xb4,
+ 0xd8, 0xd4, 0xc2, 0x92, 0xb0, 0x81, 0x66, 0xc3, 0x61, 0x6a, 0xf0, 0x69,
+ 0x67, 0xf4, 0x63, 0x64, 0xf9, 0x60, 0x60, 0xf8, 0x5c, 0x5c, 0xf5, 0x59,
+ 0x5b, 0xf6, 0x5a, 0x59, 0xf3, 0x59, 0x5a, 0xf3, 0x59, 0x5a, 0xf2, 0x57,
+ 0x5a, 0xf4, 0x54, 0x59, 0xf3, 0x53, 0x58, 0xf3, 0x53, 0x57, 0xf5, 0x52,
+ 0x56, 0xf5, 0x53, 0x55, 0xf3, 0x55, 0x55, 0xf2, 0x56, 0x55, 0xf3, 0x54,
+ 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54,
+ 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54,
+ 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54,
+ 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54,
+ 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54,
+ 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54,
+ 0x55, 0xf3, 0x54, 0x55, 0xf3, 0x54, 0x53, 0xf1, 0x53, 0x54, 0xf2, 0x53,
+ 0x54, 0xf2, 0x53, 0x54, 0xf2, 0x53, 0x54, 0xf2, 0x53, 0x56, 0xf5, 0x52,
+ 0x57, 0xf5, 0x53, 0x57, 0xf2, 0x56, 0x59, 0xf1, 0x56, 0x59, 0xf3, 0x54,
+ 0x59, 0xf3, 0x53, 0x55, 0xf5, 0x53, 0x53, 0xf5, 0x53, 0x51, 0xf5, 0x52,
+ 0x53, 0xf6, 0x54, 0x59, 0xf7, 0x59, 0x52, 0xc9, 0x52, 0x36, 0x67, 0x35,
+ 0x32, 0x41, 0x31, 0x32, 0x3b, 0x30, 0x33, 0x36, 0x31, 0x33, 0x34, 0x31,
+ 0x33, 0x34, 0x31, 0x36, 0x35, 0x32, 0x37, 0x36, 0x33, 0x38, 0x36, 0x34,
+ 0x39, 0x36, 0x35, 0x3b, 0x38, 0x37, 0x3b, 0x39, 0x39, 0x3d, 0x3b, 0x3a,
+ 0x3e, 0x3e, 0x3a, 0x42, 0x43, 0x40, 0x49, 0x4a, 0x45, 0x54, 0x54, 0x4f,
+ 0x6b, 0x6b, 0x63, 0x70, 0x6d, 0x64, 0xa2, 0x9d, 0x93, 0xdc, 0xd2, 0xca,
+ 0xc4, 0xb9, 0xb5, 0x57, 0x4f, 0x4d, 0x24, 0x20, 0x1f, 0x1b, 0x19, 0x18,
+ 0x16, 0x16, 0x15, 0x15, 0x16, 0x15, 0x13, 0x13, 0x12, 0x0e, 0x0e, 0x0e,
+ 0x0d, 0x0b, 0x0b, 0x0a, 0x0a, 0x09, 0x09, 0x07, 0x07, 0x06, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x05, 0x05,
+ 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x09, 0x0b, 0x0d, 0x0b, 0x0d,
+ 0x12, 0x0e, 0x10, 0x12, 0x0f, 0x0f, 0x1a, 0x17, 0x14, 0x4d, 0x49, 0x41,
+ 0xbc, 0xb8, 0xaa, 0xce, 0xcb, 0xb7, 0x89, 0xa9, 0x78, 0x61, 0xc1, 0x5c,
+ 0x64, 0xed, 0x64, 0x61, 0xf1, 0x5f, 0x60, 0xf7, 0x5c, 0x5b, 0xf6, 0x58,
+ 0x57, 0xf2, 0x55, 0x56, 0xf3, 0x56, 0x55, 0xf0, 0x55, 0x56, 0xef, 0x56,
+ 0x55, 0xef, 0x54, 0x55, 0xf1, 0x51, 0x55, 0xf1, 0x50, 0x54, 0xf1, 0x50,
+ 0x53, 0xf2, 0x4f, 0x52, 0xf2, 0x50, 0x51, 0xf0, 0x52, 0x51, 0xef, 0x52,
+ 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
+ 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
+ 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
+ 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
+ 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
+ 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
+ 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x4f, 0xef, 0x50,
+ 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
+ 0x52, 0xf2, 0x4e, 0x52, 0xf1, 0x4f, 0x52, 0xee, 0x52, 0x55, 0xee, 0x52,
+ 0x55, 0xf0, 0x50, 0x55, 0xf0, 0x4f, 0x51, 0xf1, 0x4f, 0x4f, 0xf1, 0x4f,
+ 0x4d, 0xf1, 0x4e, 0x4f, 0xf2, 0x50, 0x55, 0xf5, 0x56, 0x50, 0xc8, 0x50,
+ 0x33, 0x65, 0x33, 0x2f, 0x3f, 0x2f, 0x2f, 0x39, 0x2e, 0x30, 0x34, 0x2e,
+ 0x30, 0x32, 0x2e, 0x31, 0x32, 0x30, 0x34, 0x33, 0x30, 0x35, 0x34, 0x31,
+ 0x36, 0x34, 0x32, 0x37, 0x34, 0x33, 0x39, 0x35, 0x35, 0x39, 0x37, 0x36,
+ 0x3a, 0x39, 0x37, 0x3a, 0x3b, 0x37, 0x3e, 0x40, 0x3d, 0x46, 0x47, 0x42,
+ 0x51, 0x51, 0x4c, 0x68, 0x67, 0x5f, 0x6b, 0x67, 0x5f, 0x98, 0x93, 0x88,
+ 0xd1, 0xc7, 0xbe, 0xbb, 0xb1, 0xac, 0x53, 0x4c, 0x49, 0x23, 0x1f, 0x1d,
+ 0x1b, 0x19, 0x17, 0x16, 0x16, 0x15, 0x16, 0x16, 0x15, 0x13, 0x13, 0x12,
+ 0x0d, 0x0d, 0x0c, 0x0c, 0x0b, 0x0c, 0x0b, 0x0a, 0x0a, 0x0a, 0x07, 0x07,
+ 0x06, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03,
+ 0x03, 0x04, 0x04, 0x06, 0x07, 0x07, 0x0a, 0x09, 0x0a, 0x0b, 0x09, 0x0a,
+ 0x0d, 0x0b, 0x0c, 0x11, 0x0e, 0x0f, 0x11, 0x0e, 0x0d, 0x19, 0x16, 0x13,
+ 0x4b, 0x48, 0x41, 0xb6, 0xb2, 0xa4, 0xc6, 0xc4, 0xb0, 0x83, 0xa4, 0x74,
+ 0x5e, 0xc0, 0x59, 0x5f, 0xec, 0x60, 0x5d, 0xf0, 0x5c, 0x5c, 0xf6, 0x59,
+ 0x57, 0xf4, 0x55, 0x53, 0xf0, 0x53, 0x52, 0xf2, 0x53, 0x51, 0xef, 0x53,
+ 0x52, 0xed, 0x53, 0x51, 0xed, 0x51, 0x52, 0xef, 0x4e, 0x52, 0xef, 0x4d,
+ 0x51, 0xf0, 0x4d, 0x50, 0xf1, 0x4c, 0x4f, 0xef, 0x4d, 0x4e, 0xee, 0x4f,
+ 0x4e, 0xed, 0x4f, 0x4d, 0xef, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d,
+ 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d,
+ 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d,
+ 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d,
+ 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d,
+ 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d,
+ 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xef, 0x4d,
+ 0x4c, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d, 0x4d, 0xee, 0x4d,
+ 0x4d, 0xee, 0x4d, 0x4f, 0xef, 0x4c, 0x4f, 0xee, 0x4c, 0x4f, 0xec, 0x4f,
+ 0x51, 0xec, 0x4f, 0x53, 0xed, 0x4d, 0x52, 0xed, 0x4c, 0x4e, 0xef, 0x4c,
+ 0x4c, 0xef, 0x4c, 0x4a, 0xee, 0x4d, 0x4b, 0xee, 0x4e, 0x53, 0xf4, 0x54,
+ 0x4f, 0xc7, 0x4f, 0x32, 0x64, 0x31, 0x2d, 0x3e, 0x2e, 0x2e, 0x37, 0x2d,
+ 0x2f, 0x32, 0x2d, 0x2f, 0x31, 0x2d, 0x30, 0x31, 0x2f, 0x32, 0x31, 0x2e,
+ 0x33, 0x33, 0x2f, 0x34, 0x33, 0x30, 0x36, 0x32, 0x31, 0x38, 0x34, 0x34,
+ 0x38, 0x35, 0x35, 0x39, 0x37, 0x36, 0x38, 0x3a, 0x36, 0x3c, 0x3e, 0x3b,
+ 0x43, 0x45, 0x3f, 0x4f, 0x4f, 0x49, 0x66, 0x65, 0x5c, 0x68, 0x64, 0x5a,
+ 0x92, 0x8c, 0x81, 0xc8, 0xbe, 0xb6, 0xb5, 0xaa, 0xa6, 0x52, 0x4a, 0x48,
+ 0x22, 0x1e, 0x1c, 0x1c, 0x19, 0x17, 0x17, 0x16, 0x14, 0x16, 0x16, 0x15,
+ 0x12, 0x12, 0x12, 0x0c, 0x0c, 0x0c, 0x0d, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a,
+ 0x0a, 0x07, 0x08, 0x06, 0x02, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03,
+ 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x04, 0x07, 0x07, 0x09, 0x09, 0x09,
+ 0x0a, 0x09, 0x0a, 0x0e, 0x0c, 0x0d, 0x0f, 0x0d, 0x0f, 0x0e, 0x0c, 0x0b,
+ 0x17, 0x15, 0x12, 0x49, 0x47, 0x3f, 0xac, 0xaa, 0x9b, 0xbb, 0xbb, 0xa5,
+ 0x7a, 0x9e, 0x6c, 0x59, 0xbe, 0x55, 0x59, 0xe9, 0x5b, 0x57, 0xee, 0x57,
+ 0x57, 0xf4, 0x55, 0x52, 0xf2, 0x51, 0x4e, 0xee, 0x4e, 0x4e, 0xef, 0x4f,
+ 0x4c, 0xed, 0x4f, 0x4d, 0xe9, 0x50, 0x4c, 0xeb, 0x4e, 0x4e, 0xeb, 0x4a,
+ 0x4d, 0xed, 0x4a, 0x4d, 0xee, 0x49, 0x4b, 0xee, 0x48, 0x4b, 0xec, 0x4a,
+ 0x49, 0xeb, 0x4c, 0x49, 0xea, 0x4c, 0x49, 0xec, 0x4a, 0x49, 0xeb, 0x49,
+ 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49,
+ 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49,
+ 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49,
+ 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49,
+ 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49,
+ 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49, 0x49, 0xeb, 0x49,
+ 0x48, 0xec, 0x49, 0x48, 0xec, 0x4a, 0x48, 0xec, 0x4a, 0x48, 0xec, 0x4a,
+ 0x48, 0xec, 0x4a, 0x48, 0xec, 0x4a, 0x4a, 0xec, 0x48, 0x4a, 0xea, 0x48,
+ 0x4a, 0xe8, 0x4b, 0x4c, 0xe8, 0x4b, 0x4f, 0xea, 0x48, 0x4e, 0xea, 0x48,
+ 0x4a, 0xeb, 0x48, 0x48, 0xeb, 0x48, 0x47, 0xeb, 0x49, 0x47, 0xea, 0x49,
+ 0x50, 0xf1, 0x51, 0x4d, 0xc5, 0x4d, 0x2f, 0x62, 0x2f, 0x2a, 0x3c, 0x2c,
+ 0x2b, 0x35, 0x2a, 0x2c, 0x2f, 0x2a, 0x2c, 0x2f, 0x2a, 0x2e, 0x2f, 0x2c,
+ 0x30, 0x2f, 0x2c, 0x31, 0x31, 0x2d, 0x32, 0x31, 0x2e, 0x34, 0x30, 0x2f,
+ 0x36, 0x31, 0x32, 0x36, 0x33, 0x32, 0x37, 0x35, 0x34, 0x35, 0x37, 0x33,
+ 0x38, 0x3c, 0x38, 0x40, 0x42, 0x3c, 0x4c, 0x4c, 0x46, 0x63, 0x61, 0x58,
+ 0x63, 0x5e, 0x55, 0x88, 0x82, 0x77, 0xbd, 0xb2, 0xaa, 0xac, 0xa1, 0x9d,
+ 0x4f, 0x47, 0x45, 0x22, 0x1e, 0x1c, 0x1d, 0x19, 0x18, 0x17, 0x16, 0x15,
+ 0x17, 0x17, 0x16, 0x12, 0x12, 0x12, 0x0b, 0x0b, 0x0b, 0x0d, 0x0b, 0x0c,
+ 0x0c, 0x0a, 0x0b, 0x0a, 0x07, 0x08, 0x06, 0x02, 0x04, 0x02, 0x02, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x04, 0x07, 0x06,
+ 0x08, 0x08, 0x09, 0x09, 0x09, 0x0a, 0x0c, 0x0b, 0x0c, 0x0d, 0x0c, 0x0c,
+ 0x0d, 0x0c, 0x0a, 0x16, 0x15, 0x10, 0x48, 0x47, 0x3e, 0xa5, 0xa5, 0x95,
+ 0xb4, 0xb5, 0x9f, 0x76, 0x9a, 0x67, 0x57, 0xbe, 0x54, 0x55, 0xe7, 0x58,
+ 0x54, 0xed, 0x54, 0x55, 0xf3, 0x52, 0x4e, 0xf0, 0x4e, 0x4b, 0xed, 0x4c,
+ 0x4b, 0xee, 0x4d, 0x4a, 0xeb, 0x4d, 0x4a, 0xe7, 0x4d, 0x49, 0xe8, 0x4b,
+ 0x4b, 0xe9, 0x47, 0x4b, 0xea, 0x46, 0x4a, 0xeb, 0x46, 0x49, 0xeb, 0x45,
+ 0x48, 0xea, 0x46, 0x46, 0xe9, 0x49, 0x46, 0xe8, 0x49, 0x46, 0xea, 0x46,
+ 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46,
+ 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46,
+ 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46,
+ 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46,
+ 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46,
+ 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46, 0x46, 0xe9, 0x46,
+ 0x46, 0xe9, 0x46, 0x45, 0xe9, 0x46, 0x45, 0xe9, 0x46, 0x45, 0xe9, 0x46,
+ 0x45, 0xe9, 0x46, 0x45, 0xe9, 0x46, 0x45, 0xe9, 0x46, 0x47, 0xea, 0x45,
+ 0x47, 0xe9, 0x46, 0x47, 0xe6, 0x48, 0x49, 0xe6, 0x48, 0x4b, 0xe9, 0x46,
+ 0x4a, 0xe9, 0x45, 0x47, 0xea, 0x45, 0x45, 0xea, 0x45, 0x45, 0xe9, 0x46,
+ 0x45, 0xe8, 0x47, 0x4e, 0xf0, 0x4f, 0x4c, 0xc5, 0x4c, 0x2e, 0x63, 0x2e,
+ 0x2a, 0x3d, 0x2a, 0x2b, 0x35, 0x29, 0x2b, 0x2f, 0x28, 0x2b, 0x2e, 0x29,
+ 0x2d, 0x2e, 0x2c, 0x2f, 0x2e, 0x2c, 0x30, 0x30, 0x2d, 0x31, 0x30, 0x2d,
+ 0x32, 0x2f, 0x2e, 0x33, 0x30, 0x30, 0x34, 0x32, 0x32, 0x35, 0x34, 0x33,
+ 0x33, 0x36, 0x33, 0x36, 0x3a, 0x37, 0x3d, 0x3f, 0x3a, 0x49, 0x4a, 0x43,
+ 0x61, 0x5f, 0x55, 0x60, 0x5b, 0x51, 0x81, 0x7b, 0x6e, 0xb4, 0xa9, 0xa0,
+ 0xa7, 0x9c, 0x97, 0x50, 0x48, 0x45, 0x27, 0x22, 0x20, 0x21, 0x1e, 0x1c,
+ 0x18, 0x17, 0x16, 0x15, 0x15, 0x15, 0x12, 0x12, 0x12, 0x0d, 0x0c, 0x0d,
+ 0x0d, 0x0c, 0x0c, 0x0c, 0x0a, 0x0b, 0x0a, 0x07, 0x08, 0x06, 0x02, 0x04,
+ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01,
+ 0x00, 0x01, 0x01, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x00, 0x03, 0x03,
+ 0x02, 0x06, 0x06, 0x06, 0x08, 0x09, 0x08, 0x0a, 0x0a, 0x0b, 0x0a, 0x0b,
+ 0x0b, 0x0a, 0x0b, 0x0d, 0x0a, 0x0b, 0x15, 0x13, 0x0f, 0x47, 0x48, 0x3d,
+ 0xa0, 0xa1, 0x8f, 0xad, 0xaf, 0x98, 0x72, 0x97, 0x63, 0x55, 0xbe, 0x52,
+ 0x53, 0xe6, 0x55, 0x50, 0xec, 0x50, 0x52, 0xf2, 0x50, 0x4c, 0xef, 0x4c,
+ 0x49, 0xec, 0x4a, 0x49, 0xec, 0x4b, 0x48, 0xe9, 0x4b, 0x48, 0xe6, 0x49,
+ 0x47, 0xe5, 0x48, 0x49, 0xe7, 0x45, 0x49, 0xe8, 0x43, 0x48, 0xe8, 0x43,
+ 0x47, 0xe9, 0x43, 0x46, 0xe8, 0x43, 0x44, 0xe7, 0x46, 0x44, 0xe6, 0x46,
+ 0x44, 0xe8, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43,
+ 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43,
+ 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43,
+ 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43,
+ 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43,
+ 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x43,
+ 0x44, 0xe7, 0x43, 0x44, 0xe7, 0x44, 0x43, 0xe7, 0x42, 0x43, 0xe7, 0x43,
+ 0x43, 0xe7, 0x43, 0x43, 0xe7, 0x43, 0x43, 0xe7, 0x43, 0x43, 0xe7, 0x43,
+ 0x45, 0xe8, 0x42, 0x45, 0xe7, 0x43, 0x45, 0xe4, 0x46, 0x45, 0xe4, 0x46,
+ 0x47, 0xe7, 0x43, 0x47, 0xe7, 0x42, 0x45, 0xe8, 0x42, 0x43, 0xe8, 0x42,
+ 0x43, 0xe8, 0x44, 0x43, 0xe7, 0x45, 0x4c, 0xee, 0x4e, 0x4b, 0xc5, 0x4b,
+ 0x2d, 0x64, 0x2c, 0x29, 0x3d, 0x28, 0x2a, 0x34, 0x29, 0x2b, 0x2e, 0x27,
+ 0x2b, 0x2e, 0x29, 0x2d, 0x2e, 0x2b, 0x2f, 0x2d, 0x2b, 0x2f, 0x2e, 0x2c,
+ 0x2f, 0x2e, 0x2d, 0x30, 0x2f, 0x2e, 0x31, 0x2f, 0x2e, 0x32, 0x32, 0x31,
+ 0x33, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35, 0x38, 0x36, 0x3a, 0x3c, 0x37,
+ 0x47, 0x47, 0x41, 0x5e, 0x5d, 0x53, 0x5b, 0x57, 0x4e, 0x7a, 0x73, 0x67,
+ 0xab, 0xa1, 0x96, 0xa3, 0x98, 0x91, 0x53, 0x4b, 0x47, 0x2d, 0x28, 0x25,
+ 0x26, 0x22, 0x20, 0x19, 0x18, 0x17, 0x14, 0x14, 0x13, 0x12, 0x12, 0x12,
+ 0x0f, 0x0e, 0x0e, 0x0e, 0x0b, 0x0c, 0x0c, 0x0a, 0x0a, 0x0a, 0x07, 0x08,
+ 0x06, 0x02, 0x04, 0x01, 0x01, 0x01, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03,
+ 0x00, 0x03, 0x03, 0x02, 0x06, 0x05, 0x05, 0x07, 0x09, 0x07, 0x0a, 0x0a,
+ 0x09, 0x0a, 0x0b, 0x09, 0x0a, 0x0a, 0x0c, 0x0b, 0x0b, 0x12, 0x12, 0x0e,
+ 0x44, 0x45, 0x3a, 0x96, 0x98, 0x87, 0xa1, 0xa5, 0x8d, 0x6b, 0x92, 0x5c,
+ 0x52, 0xbc, 0x4f, 0x50, 0xe3, 0x51, 0x4d, 0xe9, 0x4c, 0x50, 0xf0, 0x4c,
+ 0x49, 0xeb, 0x48, 0x45, 0xe8, 0x45, 0x46, 0xe8, 0x46, 0x45, 0xe5, 0x47,
+ 0x45, 0xe2, 0x46, 0x45, 0xe1, 0x44, 0x46, 0xe3, 0x41, 0x46, 0xe4, 0x3f,
+ 0x45, 0xe4, 0x3f, 0x44, 0xe5, 0x3f, 0x43, 0xe4, 0x3f, 0x41, 0xe4, 0x42,
+ 0x41, 0xe3, 0x42, 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40,
+ 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40,
+ 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x3f, 0x42, 0xe4, 0x3f, 0x42, 0xe4, 0x3f,
+ 0x42, 0xe4, 0x3f, 0x42, 0xe4, 0x3f, 0x42, 0xe4, 0x3f, 0x42, 0xe4, 0x3f,
+ 0x42, 0xe4, 0x3f, 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40,
+ 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x40,
+ 0x42, 0xe4, 0x40, 0x42, 0xe4, 0x3f, 0x42, 0xe4, 0x40, 0x40, 0xe3, 0x3f,
+ 0x40, 0xe3, 0x3f, 0x40, 0xe3, 0x3f, 0x40, 0xe3, 0x3f, 0x40, 0xe3, 0x3e,
+ 0x40, 0xe3, 0x3e, 0x41, 0xe5, 0x3e, 0x41, 0xe4, 0x40, 0x41, 0xe1, 0x43,
+ 0x41, 0xe1, 0x43, 0x42, 0xe4, 0x40, 0x43, 0xe4, 0x3e, 0x41, 0xe5, 0x3e,
+ 0x3f, 0xe5, 0x3f, 0x3f, 0xe6, 0x41, 0x40, 0xe4, 0x41, 0x49, 0xeb, 0x4a,
+ 0x49, 0xc3, 0x48, 0x2b, 0x62, 0x2a, 0x28, 0x3b, 0x26, 0x29, 0x34, 0x27,
+ 0x29, 0x2e, 0x25, 0x29, 0x2c, 0x27, 0x2a, 0x2b, 0x28, 0x2d, 0x2a, 0x2a,
+ 0x2d, 0x2b, 0x2a, 0x2d, 0x2b, 0x2b, 0x2e, 0x2c, 0x2c, 0x2e, 0x2c, 0x2c,
+ 0x2f, 0x2f, 0x2f, 0x31, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x35, 0x34,
+ 0x37, 0x39, 0x35, 0x44, 0x45, 0x3f, 0x5b, 0x5a, 0x51, 0x58, 0x53, 0x4a,
+ 0x72, 0x6c, 0x5f, 0xa2, 0x98, 0x8d, 0x9e, 0x93, 0x8b, 0x58, 0x50, 0x4c,
+ 0x3c, 0x36, 0x33, 0x37, 0x32, 0x30, 0x20, 0x20, 0x1e, 0x15, 0x15, 0x14,
+ 0x12, 0x13, 0x12, 0x10, 0x10, 0x10, 0x0e, 0x0c, 0x0d, 0x0c, 0x0a, 0x0b,
+ 0x0a, 0x07, 0x08, 0x06, 0x02, 0x04, 0x01, 0x00, 0x01, 0x01, 0x00, 0x02,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x03, 0x06, 0x06, 0x06, 0x08, 0x09,
+ 0x07, 0x09, 0x0a, 0x09, 0x0a, 0x0b, 0x09, 0x0a, 0x0a, 0x0d, 0x0e, 0x0d,
+ 0x10, 0x11, 0x0d, 0x3f, 0x41, 0x36, 0x8d, 0x90, 0x80, 0x97, 0x9c, 0x84,
+ 0x64, 0x8c, 0x56, 0x50, 0xb9, 0x4d, 0x4e, 0xdf, 0x4e, 0x4a, 0xe5, 0x49,
+ 0x4d, 0xec, 0x49, 0x45, 0xe7, 0x44, 0x42, 0xe4, 0x41, 0x42, 0xe2, 0x42,
+ 0x41, 0xe1, 0x43, 0x43, 0xde, 0x43, 0x43, 0xde, 0x42, 0x44, 0xe0, 0x3e,
+ 0x44, 0xe0, 0x3d, 0x43, 0xe1, 0x3c, 0x41, 0xe2, 0x3c, 0x41, 0xe0, 0x3c,
+ 0x3f, 0xe0, 0x3e, 0x3f, 0xdf, 0x3f, 0x3f, 0xe1, 0x3e, 0x3f, 0xe0, 0x3e,
+ 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e,
+ 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3d, 0x3f, 0xe0, 0x3d,
+ 0x3f, 0xe0, 0x3d, 0x3f, 0xe0, 0x3d, 0x3f, 0xe0, 0x3d, 0x3f, 0xe0, 0x3d,
+ 0x3f, 0xe0, 0x3d, 0x3f, 0xe0, 0x3d, 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e,
+ 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e,
+ 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3e, 0x3f, 0xe0, 0x3d, 0x3f, 0xe0, 0x3d,
+ 0x3f, 0xdf, 0x3d, 0x3f, 0xdf, 0x3d, 0x3f, 0xdf, 0x3d, 0x3f, 0xdf, 0x3d,
+ 0x3e, 0xdf, 0x3c, 0x3e, 0xdf, 0x3c, 0x3d, 0xe1, 0x3c, 0x3d, 0xe0, 0x3d,
+ 0x3d, 0xdd, 0x40, 0x3f, 0xdd, 0x40, 0x40, 0xe0, 0x3d, 0x40, 0xe0, 0x3c,
+ 0x3d, 0xe2, 0x3c, 0x3b, 0xe2, 0x3d, 0x3d, 0xe3, 0x3e, 0x3c, 0xe0, 0x3d,
+ 0x47, 0xe7, 0x47, 0x47, 0xbf, 0x46, 0x29, 0x5f, 0x29, 0x27, 0x3a, 0x25,
+ 0x27, 0x33, 0x25, 0x27, 0x2d, 0x23, 0x26, 0x29, 0x24, 0x28, 0x29, 0x26,
+ 0x2a, 0x28, 0x28, 0x2a, 0x29, 0x28, 0x2b, 0x29, 0x28, 0x2c, 0x2a, 0x29,
+ 0x2d, 0x2b, 0x2b, 0x2d, 0x2d, 0x2d, 0x2f, 0x2e, 0x2f, 0x30, 0x31, 0x30,
+ 0x31, 0x34, 0x31, 0x35, 0x37, 0x32, 0x41, 0x42, 0x3c, 0x59, 0x57, 0x4f,
+ 0x55, 0x50, 0x47, 0x6e, 0x67, 0x5b, 0x9d, 0x93, 0x88, 0x9a, 0x8f, 0x87,
+ 0x5e, 0x56, 0x51, 0x4d, 0x46, 0x43, 0x4a, 0x46, 0x43, 0x2c, 0x29, 0x28,
+ 0x18, 0x17, 0x16, 0x11, 0x12, 0x12, 0x0f, 0x10, 0x10, 0x0e, 0x0c, 0x0d,
+ 0x0c, 0x0a, 0x0b, 0x0a, 0x07, 0x08, 0x06, 0x02, 0x04, 0x01, 0x00, 0x01,
+ 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x02, 0x02, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x06, 0x06,
+ 0x06, 0x08, 0x09, 0x07, 0x09, 0x0a, 0x09, 0x0a, 0x0b, 0x09, 0x0b, 0x0b,
+ 0x0e, 0x0f, 0x0d, 0x0e, 0x10, 0x0c, 0x3c, 0x3d, 0x33, 0x85, 0x89, 0x78,
+ 0x8d, 0x93, 0x7a, 0x5e, 0x86, 0x50, 0x4f, 0xb7, 0x4b, 0x4b, 0xdc, 0x4b,
+ 0x48, 0xe2, 0x47, 0x4a, 0xe9, 0x47, 0x42, 0xe3, 0x40, 0x3f, 0xe0, 0x3e,
+ 0x3e, 0xde, 0x3e, 0x3e, 0xdd, 0x3f, 0x40, 0xdb, 0x40, 0x40, 0xdb, 0x3f,
+ 0x42, 0xdd, 0x3b, 0x41, 0xdd, 0x3a, 0x41, 0xde, 0x3a, 0x3f, 0xdf, 0x39,
+ 0x3f, 0xdd, 0x3a, 0x3d, 0xdc, 0x3b, 0x3d, 0xdc, 0x3d, 0x3d, 0xdd, 0x3c,
+ 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c,
+ 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c, 0x3d, 0xdc, 0x3a,
+ 0x3d, 0xdc, 0x3a, 0x3d, 0xdc, 0x3a, 0x3d, 0xdc, 0x3a, 0x3d, 0xdc, 0x3a,
+ 0x3d, 0xdc, 0x3a, 0x3d, 0xdc, 0x3a, 0x3d, 0xdc, 0x3a, 0x3d, 0xdd, 0x3c,
+ 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c,
+ 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c, 0x3d, 0xdd, 0x3c, 0x3d, 0xdc, 0x3a,
+ 0x3d, 0xdc, 0x3a, 0x3d, 0xdc, 0x3b, 0x3d, 0xdc, 0x3b, 0x3d, 0xdc, 0x3b,
+ 0x3d, 0xdc, 0x3b, 0x3c, 0xdb, 0x39, 0x3c, 0xdc, 0x39, 0x39, 0xde, 0x39,
+ 0x39, 0xdc, 0x3a, 0x39, 0xda, 0x3d, 0x3c, 0xda, 0x3d, 0x3d, 0xdc, 0x3a,
+ 0x3d, 0xdc, 0x39, 0x3a, 0xde, 0x39, 0x38, 0xdf, 0x3a, 0x3a, 0xe1, 0x3c,
+ 0x39, 0xdd, 0x3a, 0x45, 0xe5, 0x44, 0x45, 0xbd, 0x43, 0x27, 0x5c, 0x27,
+ 0x25, 0x38, 0x24, 0x26, 0x31, 0x23, 0x25, 0x2b, 0x22, 0x24, 0x27, 0x22,
+ 0x25, 0x26, 0x23, 0x28, 0x26, 0x25, 0x28, 0x26, 0x25, 0x29, 0x26, 0x26,
+ 0x2a, 0x27, 0x27, 0x2b, 0x2a, 0x2a, 0x2b, 0x2a, 0x2a, 0x2d, 0x2c, 0x2d,
+ 0x2e, 0x30, 0x2e, 0x2e, 0x32, 0x2f, 0x32, 0x35, 0x30, 0x3f, 0x3f, 0x3a,
+ 0x56, 0x55, 0x4c, 0x52, 0x4d, 0x45, 0x69, 0x62, 0x57, 0x98, 0x8e, 0x83,
+ 0x97, 0x8b, 0x84, 0x63, 0x59, 0x55, 0x58, 0x51, 0x4d, 0x57, 0x52, 0x4f,
+ 0x34, 0x32, 0x30, 0x1a, 0x18, 0x18, 0x11, 0x11, 0x11, 0x0f, 0x0f, 0x10,
+ 0x0e, 0x0c, 0x0e, 0x0c, 0x0a, 0x0c, 0x0a, 0x07, 0x09, 0x06, 0x02, 0x04,
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x01, 0x01,
+ 0x02, 0x01, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, 0x02,
+ 0x02, 0x06, 0x05, 0x05, 0x07, 0x08, 0x06, 0x08, 0x09, 0x08, 0x0a, 0x0a,
+ 0x0a, 0x0a, 0x0a, 0x0e, 0x0e, 0x0c, 0x0f, 0x0f, 0x0c, 0x3a, 0x3c, 0x32,
+ 0x81, 0x84, 0x73, 0x87, 0x8f, 0x74, 0x58, 0x82, 0x4a, 0x4a, 0xb8, 0x47,
+ 0x45, 0xd9, 0x46, 0x43, 0xdf, 0x43, 0x46, 0xe5, 0x43, 0x40, 0xe2, 0x3f,
+ 0x3e, 0xdf, 0x3d, 0x3b, 0xdc, 0x3c, 0x3b, 0xdc, 0x3c, 0x3c, 0xda, 0x3d,
+ 0x3c, 0xda, 0x3c, 0x3e, 0xdb, 0x3a, 0x3d, 0xda, 0x39, 0x3d, 0xdb, 0x39,
+ 0x3b, 0xdb, 0x38, 0x3b, 0xda, 0x39, 0x39, 0xdb, 0x39, 0x3a, 0xda, 0x3a,
+ 0x3a, 0xdc, 0x39, 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a,
+ 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a,
+ 0x3a, 0xdb, 0x39, 0x3a, 0xdb, 0x39, 0x3a, 0xdb, 0x39, 0x3a, 0xdb, 0x39,
+ 0x3a, 0xdb, 0x39, 0x3a, 0xdb, 0x39, 0x3a, 0xdb, 0x39, 0x3a, 0xdb, 0x39,
+ 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a,
+ 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a, 0x3a, 0xdb, 0x3a,
+ 0x3a, 0xda, 0x38, 0x3a, 0xda, 0x38, 0x3a, 0xda, 0x38, 0x3a, 0xda, 0x38,
+ 0x3a, 0xda, 0x38, 0x3a, 0xda, 0x38, 0x39, 0xda, 0x38, 0x39, 0xda, 0x37,
+ 0x38, 0xdb, 0x38, 0x38, 0xda, 0x39, 0x38, 0xd8, 0x3b, 0x38, 0xd9, 0x3b,
+ 0x38, 0xdb, 0x39, 0x38, 0xdb, 0x38, 0x39, 0xdc, 0x38, 0x38, 0xdc, 0x38,
+ 0x38, 0xdd, 0x39, 0x37, 0xdd, 0x38, 0x3f, 0xe6, 0x40, 0x40, 0xc1, 0x40,
+ 0x25, 0x5d, 0x24, 0x24, 0x36, 0x21, 0x26, 0x2e, 0x23, 0x25, 0x27, 0x22,
+ 0x24, 0x26, 0x22, 0x25, 0x25, 0x23, 0x26, 0x25, 0x24, 0x26, 0x26, 0x24,
+ 0x27, 0x26, 0x25, 0x28, 0x27, 0x26, 0x29, 0x28, 0x28, 0x28, 0x29, 0x29,
+ 0x2a, 0x2a, 0x2a, 0x2d, 0x2d, 0x2b, 0x2e, 0x2e, 0x2c, 0x32, 0x32, 0x2d,
+ 0x3d, 0x3c, 0x38, 0x51, 0x4f, 0x48, 0x4f, 0x4b, 0x44, 0x65, 0x5f, 0x54,
+ 0x90, 0x88, 0x7e, 0x90, 0x86, 0x7e, 0x5b, 0x53, 0x4e, 0x49, 0x42, 0x3f,
+ 0x48, 0x43, 0x40, 0x35, 0x32, 0x30, 0x1e, 0x1b, 0x19, 0x12, 0x13, 0x12,
+ 0x10, 0x10, 0x10, 0x0d, 0x0c, 0x0d, 0x0b, 0x0a, 0x0b, 0x09, 0x07, 0x08,
+ 0x05, 0x03, 0x04, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x03, 0x00, 0x01, 0x03, 0x00, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, 0x01,
+ 0x00, 0x04, 0x01, 0x01, 0x06, 0x04, 0x03, 0x06, 0x06, 0x07, 0x06, 0x08,
+ 0x08, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0d, 0x0b, 0x0b, 0x11, 0x0f, 0x0c,
+ 0x3b, 0x3b, 0x30, 0x7f, 0x81, 0x6e, 0x82, 0x8b, 0x6e, 0x53, 0x7f, 0x44,
+ 0x47, 0xb9, 0x43, 0x3e, 0xd6, 0x3f, 0x3f, 0xdc, 0x3f, 0x41, 0xe0, 0x41,
+ 0x3f, 0xe1, 0x3e, 0x3d, 0xde, 0x3c, 0x39, 0xdc, 0x3a, 0x38, 0xdb, 0x39,
+ 0x38, 0xd9, 0x3a, 0x38, 0xd9, 0x39, 0x39, 0xd8, 0x39, 0x38, 0xd8, 0x39,
+ 0x38, 0xd8, 0x39, 0x38, 0xd9, 0x38, 0x38, 0xd8, 0x38, 0x37, 0xd9, 0x37,
+ 0x37, 0xd9, 0x37, 0x38, 0xda, 0x37, 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38,
+ 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38,
+ 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x37, 0x38, 0xd9, 0x37, 0x38, 0xd9, 0x37,
+ 0x38, 0xd9, 0x37, 0x38, 0xd9, 0x37, 0x38, 0xd9, 0x37, 0x38, 0xd9, 0x37,
+ 0x38, 0xd9, 0x37, 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38,
+ 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38, 0x38, 0xd9, 0x38,
+ 0x38, 0xd9, 0x38, 0x36, 0xd8, 0x36, 0x36, 0xd8, 0x36, 0x36, 0xd8, 0x36,
+ 0x36, 0xd8, 0x36, 0x36, 0xd8, 0x36, 0x36, 0xd8, 0x36, 0x37, 0xd8, 0x36,
+ 0x36, 0xd8, 0x35, 0x37, 0xd9, 0x37, 0x37, 0xd8, 0x38, 0x36, 0xd7, 0x37,
+ 0x35, 0xd8, 0x37, 0x33, 0xd9, 0x37, 0x34, 0xd9, 0x37, 0x37, 0xd8, 0x38,
+ 0x38, 0xd8, 0x38, 0x37, 0xd9, 0x37, 0x35, 0xdd, 0x36, 0x3a, 0xe7, 0x3c,
+ 0x3b, 0xc4, 0x3d, 0x23, 0x5d, 0x21, 0x23, 0x34, 0x1f, 0x26, 0x2a, 0x22,
+ 0x26, 0x23, 0x21, 0x25, 0x23, 0x22, 0x25, 0x23, 0x22, 0x24, 0x25, 0x22,
+ 0x24, 0x25, 0x24, 0x25, 0x25, 0x24, 0x26, 0x26, 0x25, 0x27, 0x26, 0x26,
+ 0x26, 0x28, 0x27, 0x28, 0x29, 0x27, 0x2b, 0x2b, 0x27, 0x2c, 0x2c, 0x29,
+ 0x31, 0x30, 0x2b, 0x3b, 0x39, 0x35, 0x4b, 0x49, 0x42, 0x4e, 0x4a, 0x43,
+ 0x61, 0x5c, 0x52, 0x88, 0x82, 0x78, 0x89, 0x80, 0x79, 0x51, 0x4a, 0x44,
+ 0x33, 0x2e, 0x2a, 0x32, 0x2d, 0x29, 0x32, 0x30, 0x2d, 0x21, 0x1f, 0x1c,
+ 0x14, 0x14, 0x12, 0x10, 0x10, 0x0f, 0x0c, 0x0c, 0x0d, 0x0a, 0x0b, 0x0b,
+ 0x07, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x02, 0x01, 0x01,
+ 0x02, 0x01, 0x01, 0x04, 0x00, 0x01, 0x03, 0x00, 0x01, 0x01, 0x02, 0x00,
+ 0x01, 0x03, 0x01, 0x00, 0x04, 0x01, 0x01, 0x05, 0x03, 0x03, 0x05, 0x05,
+ 0x06, 0x05, 0x07, 0x08, 0x07, 0x09, 0x0b, 0x09, 0x0a, 0x0c, 0x09, 0x0a,
+ 0x11, 0x0e, 0x0c, 0x38, 0x38, 0x2e, 0x77, 0x79, 0x65, 0x78, 0x83, 0x66,
+ 0x4d, 0x7b, 0x3f, 0x43, 0xb9, 0x3f, 0x38, 0xd3, 0x3a, 0x3a, 0xd9, 0x3a,
+ 0x3d, 0xdc, 0x3c, 0x3c, 0xdf, 0x3b, 0x3a, 0xdc, 0x39, 0x36, 0xda, 0x37,
+ 0x34, 0xd9, 0x35, 0x34, 0xd6, 0x36, 0x33, 0xd6, 0x36, 0x33, 0xd5, 0x36,
+ 0x33, 0xd5, 0x37, 0x33, 0xd5, 0x37, 0x33, 0xd5, 0x35, 0x33, 0xd5, 0x35,
+ 0x34, 0xd7, 0x34, 0x34, 0xd7, 0x34, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34,
+ 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34,
+ 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x35, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34,
+ 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34,
+ 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x35, 0x34, 0xd6, 0x34,
+ 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34,
+ 0x34, 0xd6, 0x34, 0x34, 0xd6, 0x34, 0x32, 0xd5, 0x33, 0x32, 0xd5, 0x33,
+ 0x32, 0xd5, 0x33, 0x32, 0xd5, 0x33, 0x32, 0xd5, 0x33, 0x32, 0xd5, 0x33,
+ 0x33, 0xd5, 0x34, 0x32, 0xd5, 0x33, 0x34, 0xd6, 0x34, 0x34, 0xd5, 0x35,
+ 0x34, 0xd4, 0x34, 0x31, 0xd5, 0x34, 0x2e, 0xd7, 0x34, 0x2f, 0xd6, 0x34,
+ 0x35, 0xd4, 0x35, 0x36, 0xd5, 0x35, 0x33, 0xd5, 0x33, 0x32, 0xdb, 0x34,
+ 0x35, 0xe7, 0x39, 0x37, 0xc6, 0x3b, 0x21, 0x5d, 0x1e, 0x22, 0x32, 0x1d,
+ 0x26, 0x28, 0x22, 0x25, 0x21, 0x22, 0x24, 0x21, 0x21, 0x24, 0x21, 0x21,
+ 0x22, 0x23, 0x21, 0x22, 0x24, 0x22, 0x22, 0x24, 0x22, 0x23, 0x25, 0x23,
+ 0x25, 0x24, 0x23, 0x24, 0x26, 0x25, 0x25, 0x26, 0x24, 0x28, 0x28, 0x24,
+ 0x2a, 0x29, 0x25, 0x30, 0x2d, 0x29, 0x38, 0x35, 0x31, 0x45, 0x42, 0x3c,
+ 0x49, 0x47, 0x40, 0x5b, 0x56, 0x4e, 0x81, 0x7a, 0x72, 0x81, 0x79, 0x72,
+ 0x58, 0x51, 0x4b, 0x4c, 0x46, 0x41, 0x49, 0x44, 0x40, 0x3f, 0x3c, 0x38,
+ 0x23, 0x21, 0x1d, 0x15, 0x15, 0x14, 0x11, 0x11, 0x0f, 0x0c, 0x0d, 0x0c,
+ 0x09, 0x0b, 0x0a, 0x07, 0x08, 0x08, 0x03, 0x04, 0x04, 0x01, 0x02, 0x01,
+ 0x02, 0x01, 0x00, 0x03, 0x01, 0x01, 0x04, 0x00, 0x01, 0x03, 0x00, 0x01,
+ 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x00, 0x03, 0x01, 0x01, 0x04, 0x04,
+ 0x02, 0x05, 0x06, 0x06, 0x05, 0x07, 0x08, 0x07, 0x09, 0x0a, 0x08, 0x09,
+ 0x0c, 0x09, 0x0a, 0x11, 0x0f, 0x0c, 0x35, 0x36, 0x2b, 0x6d, 0x71, 0x5d,
+ 0x70, 0x7a, 0x5e, 0x48, 0x77, 0x3c, 0x41, 0xb7, 0x3d, 0x35, 0xd1, 0x38,
+ 0x37, 0xd6, 0x38, 0x3a, 0xdb, 0x3a, 0x38, 0xdd, 0x38, 0x37, 0xd9, 0x35,
+ 0x33, 0xd7, 0x34, 0x32, 0xd5, 0x33, 0x32, 0xd4, 0x34, 0x31, 0xd3, 0x33,
+ 0x31, 0xd2, 0x34, 0x31, 0xd2, 0x34, 0x31, 0xd2, 0x34, 0x30, 0xd2, 0x32,
+ 0x31, 0xd3, 0x32, 0x33, 0xd4, 0x31, 0x33, 0xd5, 0x31, 0x30, 0xd3, 0x32,
+ 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32,
+ 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32, 0x30, 0xd2, 0x31,
+ 0x30, 0xd2, 0x31, 0x30, 0xd2, 0x31, 0x30, 0xd2, 0x31, 0x30, 0xd2, 0x31,
+ 0x30, 0xd2, 0x31, 0x30, 0xd2, 0x31, 0x30, 0xd2, 0x31, 0x30, 0xd3, 0x32,
+ 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32,
+ 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32, 0x30, 0xd3, 0x32, 0x30, 0xd2, 0x31,
+ 0x30, 0xd3, 0x31, 0x30, 0xd3, 0x31, 0x30, 0xd3, 0x31, 0x30, 0xd3, 0x31,
+ 0x30, 0xd3, 0x31, 0x30, 0xd3, 0x31, 0x30, 0xd3, 0x31, 0x31, 0xd4, 0x32,
+ 0x31, 0xd3, 0x32, 0x31, 0xd1, 0x33, 0x30, 0xd2, 0x33, 0x2d, 0xd5, 0x31,
+ 0x2e, 0xd4, 0x32, 0x32, 0xd2, 0x33, 0x34, 0xd2, 0x33, 0x30, 0xd3, 0x32,
+ 0x2f, 0xd9, 0x33, 0x33, 0xe5, 0x38, 0x36, 0xc3, 0x3a, 0x20, 0x5c, 0x1d,
+ 0x21, 0x33, 0x1c, 0x25, 0x28, 0x21, 0x24, 0x22, 0x22, 0x22, 0x20, 0x20,
+ 0x23, 0x20, 0x20, 0x21, 0x22, 0x20, 0x21, 0x22, 0x20, 0x21, 0x23, 0x20,
+ 0x22, 0x24, 0x21, 0x24, 0x23, 0x22, 0x23, 0x25, 0x24, 0x24, 0x25, 0x23,
+ 0x27, 0x27, 0x23, 0x29, 0x28, 0x24, 0x2d, 0x2b, 0x27, 0x35, 0x32, 0x2e,
+ 0x40, 0x3d, 0x36, 0x44, 0x41, 0x3b, 0x56, 0x51, 0x4a, 0x7c, 0x75, 0x6d,
+ 0x7d, 0x75, 0x6d, 0x6d, 0x65, 0x5e, 0x85, 0x7f, 0x78, 0x81, 0x7c, 0x77,
+ 0x54, 0x50, 0x4c, 0x24, 0x21, 0x1e, 0x17, 0x18, 0x16, 0x11, 0x12, 0x11,
+ 0x0c, 0x0d, 0x0c, 0x09, 0x0b, 0x0b, 0x07, 0x08, 0x08, 0x03, 0x04, 0x04,
+ 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x03, 0x01, 0x01, 0x04, 0x00, 0x01,
+ 0x03, 0x00, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01,
+ 0x02, 0x03, 0x04, 0x03, 0x05, 0x06, 0x06, 0x04, 0x07, 0x09, 0x07, 0x09,
+ 0x0a, 0x07, 0x09, 0x0b, 0x09, 0x09, 0x10, 0x0e, 0x0b, 0x32, 0x33, 0x2a,
+ 0x66, 0x6a, 0x57, 0x69, 0x73, 0x57, 0x46, 0x75, 0x3a, 0x40, 0xb5, 0x3b,
+ 0x34, 0xcf, 0x35, 0x35, 0xd3, 0x35, 0x38, 0xd9, 0x37, 0x35, 0xda, 0x35,
+ 0x34, 0xd7, 0x32, 0x30, 0xd5, 0x31, 0x2f, 0xd2, 0x30, 0x30, 0xd1, 0x32,
+ 0x2e, 0xd1, 0x31, 0x2e, 0xd0, 0x31, 0x2e, 0xd0, 0x32, 0x2e, 0xd0, 0x31,
+ 0x2d, 0xd0, 0x2f, 0x2e, 0xd1, 0x2f, 0x31, 0xd2, 0x2f, 0x30, 0xd2, 0x2f,
+ 0x2e, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f,
+ 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x30,
+ 0x2d, 0xcf, 0x2e, 0x2d, 0xd0, 0x2e, 0x2d, 0xd0, 0x2e, 0x2d, 0xd0, 0x2e,
+ 0x2d, 0xd0, 0x2e, 0x2d, 0xd0, 0x2e, 0x2d, 0xd0, 0x2e, 0x2d, 0xcf, 0x2e,
+ 0x2d, 0xd0, 0x30, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f,
+ 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f,
+ 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f,
+ 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x2f,
+ 0x2e, 0xd1, 0x2f, 0x2e, 0xd0, 0x2f, 0x2f, 0xcf, 0x31, 0x2e, 0xd0, 0x31,
+ 0x2b, 0xd3, 0x2f, 0x2c, 0xd1, 0x2f, 0x2f, 0xcf, 0x30, 0x31, 0xd0, 0x31,
+ 0x2e, 0xd1, 0x30, 0x2d, 0xd7, 0x31, 0x31, 0xe2, 0x37, 0x34, 0xc2, 0x38,
+ 0x1f, 0x5b, 0x1c, 0x20, 0x33, 0x1c, 0x24, 0x27, 0x20, 0x23, 0x21, 0x21,
+ 0x21, 0x1e, 0x1f, 0x21, 0x1e, 0x1f, 0x20, 0x20, 0x1f, 0x1f, 0x20, 0x1e,
+ 0x1f, 0x21, 0x1e, 0x20, 0x22, 0x1f, 0x22, 0x21, 0x20, 0x21, 0x23, 0x22,
+ 0x22, 0x23, 0x21, 0x26, 0x26, 0x21, 0x27, 0x27, 0x23, 0x2b, 0x29, 0x25,
+ 0x32, 0x2f, 0x2b, 0x3b, 0x38, 0x32, 0x40, 0x3d, 0x36, 0x52, 0x4c, 0x46,
+ 0x79, 0x71, 0x69, 0x79, 0x72, 0x68, 0x80, 0x77, 0x6f, 0xb7, 0xb1, 0xa9,
+ 0xb4, 0xae, 0xa8, 0x68, 0x64, 0x5f, 0x26, 0x23, 0x20, 0x19, 0x19, 0x18,
+ 0x11, 0x13, 0x11, 0x0c, 0x0d, 0x0c, 0x09, 0x0b, 0x0b, 0x08, 0x08, 0x08,
+ 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x03, 0x01, 0x01,
+ 0x03, 0x00, 0x01, 0x03, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00,
+ 0x00, 0x02, 0x01, 0x01, 0x03, 0x04, 0x02, 0x04, 0x05, 0x05, 0x04, 0x06,
+ 0x08, 0x05, 0x08, 0x08, 0x05, 0x08, 0x0a, 0x08, 0x08, 0x10, 0x0e, 0x0b,
+ 0x31, 0x33, 0x29, 0x64, 0x68, 0x55, 0x66, 0x72, 0x56, 0x45, 0x76, 0x3a,
+ 0x3e, 0xb5, 0x3a, 0x31, 0xcc, 0x33, 0x33, 0xd2, 0x33, 0x35, 0xd9, 0x35,
+ 0x33, 0xd9, 0x34, 0x31, 0xd6, 0x31, 0x2f, 0xd4, 0x30, 0x2e, 0xd3, 0x2f,
+ 0x2d, 0xd1, 0x30, 0x2d, 0xd0, 0x2f, 0x2d, 0xd0, 0x30, 0x2d, 0xd0, 0x30,
+ 0x2d, 0xd0, 0x30, 0x2c, 0xd0, 0x2e, 0x2c, 0xd1, 0x2e, 0x2f, 0xd1, 0x2d,
+ 0x2e, 0xd2, 0x2d, 0x2c, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2b, 0xd0, 0x2e, 0x2b, 0xcf, 0x2d, 0x2b, 0xcf, 0x2d, 0x2b, 0xcf, 0x2d,
+ 0x2b, 0xcf, 0x2d, 0x2b, 0xcf, 0x2d, 0x2b, 0xcf, 0x2d, 0x2b, 0xcf, 0x2d,
+ 0x2b, 0xcf, 0x2d, 0x2b, 0xd0, 0x2e, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2b, 0xd0, 0x2d, 0x2c, 0xd0, 0x2e, 0x2c, 0xd0, 0x2e, 0x2c, 0xd0, 0x2e,
+ 0x2c, 0xd0, 0x2e, 0x2c, 0xd0, 0x2e, 0x2c, 0xd0, 0x2e, 0x2c, 0xd0, 0x2e,
+ 0x2c, 0xd0, 0x2e, 0x2d, 0xd1, 0x2e, 0x2c, 0xd0, 0x2e, 0x2d, 0xcf, 0x2f,
+ 0x2c, 0xd0, 0x2f, 0x2a, 0xd2, 0x2e, 0x2b, 0xd1, 0x2e, 0x2e, 0xcf, 0x2f,
+ 0x2f, 0xcf, 0x30, 0x2b, 0xcf, 0x2e, 0x2a, 0xd5, 0x2e, 0x2f, 0xe0, 0x35,
+ 0x32, 0xc0, 0x37, 0x1d, 0x59, 0x1b, 0x1e, 0x31, 0x1a, 0x21, 0x26, 0x1e,
+ 0x20, 0x21, 0x1f, 0x1f, 0x1e, 0x1d, 0x20, 0x1e, 0x1d, 0x1e, 0x1f, 0x1e,
+ 0x1e, 0x1f, 0x1d, 0x1e, 0x20, 0x1d, 0x1f, 0x21, 0x1e, 0x21, 0x20, 0x1f,
+ 0x20, 0x21, 0x20, 0x21, 0x22, 0x20, 0x25, 0x23, 0x20, 0x26, 0x25, 0x23,
+ 0x2a, 0x28, 0x24, 0x2f, 0x2c, 0x28, 0x37, 0x34, 0x2e, 0x3c, 0x39, 0x33,
+ 0x4e, 0x4a, 0x44, 0x75, 0x6d, 0x66, 0x76, 0x6f, 0x65, 0x8b, 0x81, 0x77,
+ 0xcf, 0xc9, 0xc0, 0xce, 0xca, 0xc4, 0x7a, 0x77, 0x72, 0x2b, 0x28, 0x25,
+ 0x19, 0x19, 0x18, 0x11, 0x13, 0x11, 0x0c, 0x0d, 0x0c, 0x0a, 0x0b, 0x0b,
+ 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+ 0x03, 0x01, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x02, 0x00, 0x00, 0x03, 0x01, 0x01, 0x03, 0x03, 0x03, 0x04, 0x04,
+ 0x04, 0x03, 0x06, 0x07, 0x04, 0x08, 0x08, 0x04, 0x07, 0x0a, 0x07, 0x08,
+ 0x10, 0x0e, 0x0c, 0x32, 0x34, 0x2a, 0x63, 0x69, 0x56, 0x64, 0x72, 0x56,
+ 0x45, 0x76, 0x3a, 0x3d, 0xb4, 0x3a, 0x30, 0xcb, 0x31, 0x30, 0xd2, 0x32,
+ 0x34, 0xd8, 0x34, 0x32, 0xd9, 0x33, 0x2f, 0xd6, 0x30, 0x2e, 0xd5, 0x2f,
+ 0x2d, 0xd4, 0x2e, 0x2c, 0xd1, 0x2f, 0x2c, 0xd1, 0x2e, 0x2c, 0xd0, 0x2f,
+ 0x2c, 0xcf, 0x2f, 0x2c, 0xcf, 0x2f, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2e, 0xd1, 0x2c, 0x2d, 0xd1, 0x2c, 0x2b, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c,
+ 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c,
+ 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c, 0x2b, 0xcf, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2b, 0xd0, 0x2d, 0x2b, 0xcf, 0x2d, 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c,
+ 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c,
+ 0x2a, 0xcf, 0x2c, 0x2a, 0xcf, 0x2c, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2b, 0xd0, 0x2d, 0x2b, 0xd0, 0x2d, 0x2c, 0xd1, 0x2d, 0x2b, 0xd0, 0x2d,
+ 0x2c, 0xd0, 0x2d, 0x2b, 0xd0, 0x2e, 0x29, 0xd1, 0x2d, 0x2a, 0xd1, 0x2d,
+ 0x2d, 0xcf, 0x2e, 0x2e, 0xce, 0x2f, 0x2a, 0xce, 0x2d, 0x29, 0xd3, 0x2d,
+ 0x2d, 0xde, 0x33, 0x31, 0xbf, 0x36, 0x1b, 0x58, 0x1a, 0x1d, 0x30, 0x19,
+ 0x20, 0x25, 0x1d, 0x1f, 0x20, 0x1e, 0x1f, 0x1d, 0x1c, 0x1f, 0x1d, 0x1b,
+ 0x1d, 0x1e, 0x1d, 0x1e, 0x1f, 0x1c, 0x1e, 0x1f, 0x1d, 0x1f, 0x20, 0x1e,
+ 0x20, 0x20, 0x1f, 0x20, 0x20, 0x1f, 0x21, 0x21, 0x20, 0x24, 0x22, 0x20,
+ 0x25, 0x23, 0x22, 0x29, 0x27, 0x23, 0x2d, 0x2b, 0x27, 0x35, 0x31, 0x2c,
+ 0x3a, 0x36, 0x31, 0x4d, 0x48, 0x42, 0x72, 0x6b, 0x63, 0x75, 0x6d, 0x63,
+ 0x90, 0x86, 0x7c, 0xdb, 0xd6, 0xcc, 0xdc, 0xd8, 0xd2, 0x86, 0x84, 0x7d,
+ 0x2f, 0x2c, 0x29, 0x1a, 0x1a, 0x18, 0x12, 0x13, 0x11, 0x0d, 0x0d, 0x0c,
+ 0x0a, 0x0a, 0x0b, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01,
+ 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x03,
+ 0x03, 0x02, 0x03, 0x04, 0x03, 0x06, 0x06, 0x02, 0x07, 0x07, 0x03, 0x06,
+ 0x09, 0x06, 0x07, 0x0f, 0x0e, 0x0c, 0x31, 0x34, 0x2b, 0x62, 0x68, 0x55,
+ 0x61, 0x71, 0x54, 0x44, 0x77, 0x39, 0x3a, 0xb4, 0x38, 0x2d, 0xc8, 0x2f,
+ 0x2d, 0xd1, 0x30, 0x31, 0xd8, 0x32, 0x30, 0xd8, 0x31, 0x2d, 0xd6, 0x2e,
+ 0x2d, 0xd5, 0x2e, 0x2c, 0xd4, 0x2d, 0x2a, 0xd1, 0x2d, 0x2a, 0xd1, 0x2c,
+ 0x2b, 0xd0, 0x2e, 0x2a, 0xcf, 0x2d, 0x2a, 0xcf, 0x2d, 0x2a, 0xd0, 0x2b,
+ 0x2a, 0xd0, 0x2c, 0x2c, 0xd0, 0x2a, 0x2b, 0xd0, 0x2a, 0x29, 0xcf, 0x2a,
+ 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a,
+ 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a, 0x2a, 0xd0, 0x2c,
+ 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c,
+ 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c, 0x28, 0xcf, 0x2a,
+ 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a,
+ 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a, 0x28, 0xcf, 0x2a, 0x2a, 0xd0, 0x2c,
+ 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c,
+ 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2c, 0x2a, 0xd1, 0x2c,
+ 0x2a, 0xd0, 0x2c, 0x2a, 0xd0, 0x2b, 0x29, 0xcf, 0x2d, 0x28, 0xd1, 0x2c,
+ 0x28, 0xd1, 0x2c, 0x2b, 0xcf, 0x2d, 0x2c, 0xcd, 0x2d, 0x28, 0xcc, 0x2a,
+ 0x27, 0xd1, 0x2a, 0x2b, 0xdc, 0x31, 0x2f, 0xbe, 0x34, 0x19, 0x56, 0x19,
+ 0x1b, 0x2e, 0x17, 0x1d, 0x23, 0x1b, 0x1d, 0x1e, 0x1c, 0x1e, 0x1d, 0x19,
+ 0x1e, 0x1d, 0x19, 0x1c, 0x1c, 0x1b, 0x1d, 0x1e, 0x1b, 0x1d, 0x1e, 0x1c,
+ 0x1e, 0x1f, 0x1d, 0x1f, 0x1f, 0x1e, 0x1f, 0x1e, 0x1d, 0x1f, 0x20, 0x1f,
+ 0x22, 0x1f, 0x1f, 0x24, 0x21, 0x21, 0x27, 0x25, 0x22, 0x2a, 0x28, 0x24,
+ 0x30, 0x2d, 0x29, 0x37, 0x33, 0x2e, 0x4a, 0x47, 0x3f, 0x6e, 0x68, 0x60,
+ 0x73, 0x6a, 0x61, 0x94, 0x89, 0x7f, 0xe5, 0xdf, 0xd5, 0xe8, 0xe6, 0xe0,
+ 0x95, 0x93, 0x8b, 0x34, 0x32, 0x2e, 0x1b, 0x1a, 0x17, 0x12, 0x12, 0x11,
+ 0x0d, 0x0e, 0x0c, 0x0b, 0x0a, 0x0b, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
+ 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x01,
+ 0x00, 0x02, 0x02, 0x03, 0x02, 0x02, 0x04, 0x03, 0x05, 0x06, 0x02, 0x07,
+ 0x07, 0x04, 0x07, 0x08, 0x06, 0x07, 0x0d, 0x0c, 0x0a, 0x2e, 0x33, 0x29,
+ 0x5d, 0x65, 0x53, 0x5a, 0x6b, 0x4f, 0x3d, 0x70, 0x34, 0x37, 0xb2, 0x36,
+ 0x29, 0xc6, 0x2c, 0x2a, 0xce, 0x2c, 0x2e, 0xd6, 0x30, 0x2d, 0xd5, 0x2e,
+ 0x2b, 0xd3, 0x2c, 0x2a, 0xd3, 0x2c, 0x29, 0xd1, 0x2b, 0x27, 0xcf, 0x2b,
+ 0x27, 0xce, 0x2a, 0x28, 0xcd, 0x2b, 0x27, 0xcd, 0x2b, 0x27, 0xcd, 0x2b,
+ 0x28, 0xcd, 0x2a, 0x27, 0xcd, 0x2a, 0x29, 0xce, 0x29, 0x29, 0xce, 0x29,
+ 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29,
+ 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29,
+ 0x28, 0xce, 0x2a, 0x28, 0xce, 0x2a, 0x28, 0xce, 0x2a, 0x28, 0xce, 0x2a,
+ 0x28, 0xce, 0x2a, 0x28, 0xce, 0x2a, 0x28, 0xce, 0x2a, 0x28, 0xce, 0x2a,
+ 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29,
+ 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29, 0x27, 0xcd, 0x29,
+ 0x28, 0xcd, 0x2a, 0x28, 0xcd, 0x2a, 0x28, 0xcd, 0x2a, 0x28, 0xcd, 0x2a,
+ 0x28, 0xcd, 0x2a, 0x28, 0xcd, 0x2a, 0x28, 0xcd, 0x2a, 0x28, 0xcd, 0x2b,
+ 0x28, 0xce, 0x29, 0x28, 0xce, 0x2a, 0x28, 0xce, 0x29, 0x26, 0xcd, 0x2a,
+ 0x25, 0xce, 0x29, 0x26, 0xce, 0x2a, 0x29, 0xcc, 0x2b, 0x29, 0xcb, 0x2c,
+ 0x26, 0xcc, 0x2a, 0x25, 0xd0, 0x2a, 0x29, 0xdb, 0x30, 0x2d, 0xbc, 0x33,
+ 0x17, 0x55, 0x18, 0x18, 0x2d, 0x15, 0x1b, 0x22, 0x19, 0x1a, 0x1d, 0x19,
+ 0x1c, 0x1c, 0x18, 0x1d, 0x1c, 0x18, 0x1b, 0x1b, 0x1a, 0x1c, 0x1d, 0x1a,
+ 0x1c, 0x1d, 0x1a, 0x1d, 0x1d, 0x1b, 0x1d, 0x1e, 0x1d, 0x1e, 0x1d, 0x1c,
+ 0x1d, 0x1f, 0x1d, 0x1f, 0x1e, 0x1d, 0x21, 0x20, 0x1f, 0x24, 0x23, 0x20,
+ 0x28, 0x26, 0x23, 0x2e, 0x2b, 0x27, 0x35, 0x33, 0x2e, 0x48, 0x46, 0x3f,
+ 0x6c, 0x66, 0x5e, 0x73, 0x6a, 0x61, 0x8a, 0x7f, 0x75, 0xce, 0xc7, 0xbd,
+ 0xd9, 0xd4, 0xcd, 0x96, 0x93, 0x8b, 0x39, 0x35, 0x31, 0x1b, 0x19, 0x17,
+ 0x12, 0x12, 0x0f, 0x0d, 0x0d, 0x0b, 0x0b, 0x0a, 0x0a, 0x08, 0x08, 0x08,
+ 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x02, 0x04,
+ 0x07, 0x02, 0x08, 0x09, 0x06, 0x09, 0x08, 0x05, 0x07, 0x09, 0x0b, 0x08,
+ 0x2b, 0x30, 0x26, 0x58, 0x61, 0x4f, 0x52, 0x64, 0x48, 0x35, 0x69, 0x2d,
+ 0x33, 0xaf, 0x32, 0x25, 0xc3, 0x29, 0x26, 0xcb, 0x29, 0x2b, 0xd4, 0x2d,
+ 0x2a, 0xd3, 0x2b, 0x29, 0xd2, 0x2a, 0x28, 0xd2, 0x2a, 0x26, 0xcf, 0x29,
+ 0x25, 0xcd, 0x29, 0x25, 0xcc, 0x28, 0x24, 0xcb, 0x29, 0x24, 0xcb, 0x29,
+ 0x25, 0xcb, 0x29, 0x26, 0xcb, 0x28, 0x25, 0xcb, 0x28, 0x26, 0xcc, 0x27,
+ 0x26, 0xcc, 0x27, 0x25, 0xcb, 0x27, 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28,
+ 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28,
+ 0x25, 0xcb, 0x28, 0x26, 0xcc, 0x28, 0x26, 0xcc, 0x28, 0x26, 0xcc, 0x28,
+ 0x26, 0xcc, 0x28, 0x26, 0xcc, 0x28, 0x26, 0xcc, 0x28, 0x26, 0xcc, 0x28,
+ 0x26, 0xcc, 0x28, 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28,
+ 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28, 0x25, 0xcb, 0x28,
+ 0x25, 0xcb, 0x28, 0x26, 0xcb, 0x28, 0x26, 0xcb, 0x28, 0x26, 0xcb, 0x28,
+ 0x26, 0xcb, 0x28, 0x26, 0xcb, 0x28, 0x26, 0xcb, 0x28, 0x26, 0xcb, 0x28,
+ 0x26, 0xcb, 0x28, 0x26, 0xcc, 0x27, 0x26, 0xcc, 0x28, 0x26, 0xcc, 0x27,
+ 0x23, 0xca, 0x28, 0x22, 0xcc, 0x27, 0x23, 0xcc, 0x28, 0x26, 0xca, 0x29,
+ 0x28, 0xc8, 0x2a, 0x27, 0xcc, 0x2a, 0x24, 0xcf, 0x29, 0x27, 0xd9, 0x2e,
+ 0x2b, 0xbb, 0x31, 0x15, 0x55, 0x16, 0x15, 0x2b, 0x13, 0x18, 0x21, 0x17,
+ 0x18, 0x1b, 0x17, 0x1a, 0x1b, 0x18, 0x1b, 0x1b, 0x18, 0x1a, 0x1b, 0x1a,
+ 0x1b, 0x1b, 0x1a, 0x1b, 0x1b, 0x1a, 0x1b, 0x1b, 0x19, 0x1b, 0x1c, 0x1b,
+ 0x1c, 0x1d, 0x1b, 0x1b, 0x1d, 0x1b, 0x1d, 0x1d, 0x1b, 0x1f, 0x20, 0x1d,
+ 0x22, 0x21, 0x1e, 0x26, 0x25, 0x21, 0x2c, 0x2a, 0x26, 0x35, 0x33, 0x2e,
+ 0x48, 0x44, 0x3f, 0x6a, 0x63, 0x5c, 0x73, 0x69, 0x61, 0x7c, 0x72, 0x68,
+ 0xaf, 0xa5, 0x9d, 0xc2, 0xb8, 0xb1, 0x94, 0x8e, 0x87, 0x3c, 0x37, 0x34,
+ 0x1c, 0x1a, 0x16, 0x12, 0x11, 0x0e, 0x0e, 0x0d, 0x0c, 0x0c, 0x0b, 0x0a,
+ 0x09, 0x08, 0x08, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x02, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x02, 0x01,
+ 0x03, 0x02, 0x03, 0x06, 0x02, 0x06, 0x09, 0x06, 0x09, 0x06, 0x04, 0x05,
+ 0x08, 0x0a, 0x06, 0x29, 0x2f, 0x25, 0x52, 0x5d, 0x4b, 0x4b, 0x5f, 0x42,
+ 0x30, 0x66, 0x2a, 0x31, 0xb0, 0x32, 0x22, 0xc2, 0x27, 0x24, 0xc9, 0x27,
+ 0x29, 0xd3, 0x2c, 0x28, 0xd2, 0x2a, 0x27, 0xd0, 0x28, 0x26, 0xd1, 0x29,
+ 0x24, 0xcd, 0x27, 0x23, 0xcc, 0x27, 0x23, 0xcb, 0x27, 0x22, 0xca, 0x27,
+ 0x22, 0xca, 0x27, 0x23, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27,
+ 0x24, 0xcb, 0x26, 0x24, 0xcb, 0x26, 0x24, 0xcb, 0x26, 0x24, 0xca, 0x27,
+ 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27,
+ 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xcb, 0x27,
+ 0x24, 0xcb, 0x27, 0x24, 0xcb, 0x27, 0x24, 0xcb, 0x27, 0x24, 0xcb, 0x27,
+ 0x24, 0xcb, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27,
+ 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27,
+ 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xc9, 0x27, 0x24, 0xc9, 0x27,
+ 0x24, 0xc9, 0x27, 0x24, 0xc9, 0x27, 0x24, 0xc9, 0x27, 0x24, 0xc9, 0x27,
+ 0x24, 0xc9, 0x27, 0x24, 0xc9, 0x27, 0x24, 0xcb, 0x26, 0x24, 0xcb, 0x26,
+ 0x24, 0xcb, 0x26, 0x21, 0xca, 0x26, 0x20, 0xcb, 0x25, 0x21, 0xcb, 0x26,
+ 0x24, 0xc9, 0x27, 0x26, 0xc8, 0x28, 0x26, 0xcc, 0x29, 0x22, 0xcf, 0x29,
+ 0x25, 0xd9, 0x2d, 0x2a, 0xbb, 0x2f, 0x14, 0x55, 0x15, 0x13, 0x2a, 0x12,
+ 0x16, 0x20, 0x16, 0x16, 0x1a, 0x15, 0x18, 0x19, 0x16, 0x1a, 0x19, 0x16,
+ 0x1a, 0x19, 0x18, 0x1a, 0x19, 0x18, 0x1a, 0x19, 0x18, 0x19, 0x19, 0x18,
+ 0x19, 0x1b, 0x19, 0x1a, 0x1b, 0x19, 0x1a, 0x1b, 0x19, 0x1a, 0x1b, 0x1a,
+ 0x1d, 0x1e, 0x1c, 0x1f, 0x1f, 0x1d, 0x24, 0x23, 0x20, 0x2a, 0x28, 0x24,
+ 0x34, 0x32, 0x2f, 0x44, 0x41, 0x3c, 0x63, 0x5e, 0x56, 0x6e, 0x64, 0x5c,
+ 0x6b, 0x61, 0x58, 0x8f, 0x84, 0x7c, 0xa6, 0x9a, 0x93, 0x88, 0x82, 0x7a,
+ 0x3c, 0x36, 0x32, 0x1c, 0x1a, 0x16, 0x12, 0x10, 0x0e, 0x0e, 0x0c, 0x0c,
+ 0x0c, 0x0b, 0x09, 0x09, 0x08, 0x08, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x03, 0x01, 0x03, 0x05, 0x01, 0x04, 0x08, 0x04, 0x07,
+ 0x04, 0x04, 0x04, 0x07, 0x0b, 0x06, 0x28, 0x30, 0x26, 0x4e, 0x5b, 0x48,
+ 0x48, 0x5d, 0x40, 0x32, 0x6a, 0x2b, 0x32, 0xb3, 0x32, 0x22, 0xc3, 0x27,
+ 0x24, 0xca, 0x27, 0x29, 0xd3, 0x2c, 0x27, 0xd2, 0x2a, 0x25, 0xd1, 0x28,
+ 0x25, 0xd2, 0x29, 0x23, 0xce, 0x27, 0x23, 0xcc, 0x27, 0x23, 0xcc, 0x27,
+ 0x23, 0xcc, 0x28, 0x22, 0xcc, 0x27, 0x22, 0xcc, 0x27, 0x23, 0xcc, 0x27,
+ 0x23, 0xcc, 0x27, 0x25, 0xcb, 0x26, 0x25, 0xcb, 0x27, 0x24, 0xcc, 0x27,
+ 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28,
+ 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28, 0x23, 0xca, 0x27,
+ 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27,
+ 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x24, 0xcb, 0x28,
+ 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28,
+ 0x24, 0xcb, 0x28, 0x24, 0xcb, 0x28, 0x24, 0xcc, 0x28, 0x24, 0xca, 0x27,
+ 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27,
+ 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x24, 0xca, 0x27, 0x23, 0xcc, 0x26,
+ 0x24, 0xcb, 0x27, 0x24, 0xcc, 0x27, 0x21, 0xcb, 0x27, 0x20, 0xcd, 0x26,
+ 0x21, 0xcc, 0x27, 0x25, 0xc9, 0x27, 0x27, 0xc9, 0x28, 0x25, 0xce, 0x29,
+ 0x21, 0xd0, 0x29, 0x25, 0xd9, 0x2c, 0x29, 0xbb, 0x2f, 0x13, 0x55, 0x15,
+ 0x14, 0x2b, 0x12, 0x15, 0x1f, 0x15, 0x16, 0x19, 0x14, 0x17, 0x18, 0x15,
+ 0x19, 0x18, 0x15, 0x19, 0x18, 0x17, 0x19, 0x18, 0x17, 0x19, 0x18, 0x17,
+ 0x18, 0x18, 0x17, 0x18, 0x1a, 0x18, 0x19, 0x19, 0x18, 0x19, 0x1a, 0x19,
+ 0x19, 0x1a, 0x19, 0x1c, 0x1c, 0x1b, 0x1e, 0x1d, 0x1c, 0x23, 0x22, 0x20,
+ 0x28, 0x27, 0x24, 0x33, 0x31, 0x2e, 0x40, 0x3e, 0x39, 0x5a, 0x56, 0x4f,
+ 0x64, 0x5c, 0x55, 0x5f, 0x56, 0x4d, 0x7d, 0x73, 0x6b, 0x92, 0x88, 0x80,
+ 0x7a, 0x73, 0x6c, 0x36, 0x31, 0x2d, 0x1c, 0x19, 0x16, 0x12, 0x0f, 0x0e,
+ 0x0d, 0x0c, 0x0b, 0x0b, 0x0a, 0x0a, 0x08, 0x08, 0x08, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x01, 0x02, 0x04, 0x01, 0x03,
+ 0x08, 0x02, 0x05, 0x03, 0x02, 0x02, 0x07, 0x0c, 0x06, 0x27, 0x30, 0x25,
+ 0x48, 0x56, 0x43, 0x43, 0x58, 0x3b, 0x30, 0x6a, 0x2c, 0x31, 0xb4, 0x32,
+ 0x20, 0xc2, 0x26, 0x23, 0xc9, 0x27, 0x28, 0xd2, 0x2c, 0x25, 0xd1, 0x29,
+ 0x23, 0xce, 0x27, 0x23, 0xd0, 0x28, 0x22, 0xcc, 0x26, 0x22, 0xcb, 0x26,
+ 0x22, 0xcb, 0x26, 0x22, 0xcb, 0x27, 0x21, 0xca, 0x26, 0x21, 0xca, 0x26,
+ 0x22, 0xca, 0x26, 0x22, 0xca, 0x26, 0x23, 0xca, 0x25, 0x23, 0xca, 0x26,
+ 0x23, 0xcb, 0x26, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27,
+ 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xc9, 0x27,
+ 0x21, 0xc7, 0x26, 0x21, 0xc7, 0x26, 0x21, 0xc7, 0x26, 0x21, 0xc7, 0x26,
+ 0x21, 0xc7, 0x26, 0x21, 0xc7, 0x26, 0x21, 0xc7, 0x26, 0x21, 0xc7, 0x26,
+ 0x23, 0xc9, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27,
+ 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27, 0x23, 0xca, 0x27,
+ 0x23, 0xc8, 0x26, 0x23, 0xc8, 0x26, 0x23, 0xc8, 0x26, 0x23, 0xc8, 0x26,
+ 0x23, 0xc8, 0x26, 0x23, 0xc8, 0x26, 0x23, 0xc8, 0x26, 0x23, 0xc8, 0x26,
+ 0x22, 0xcb, 0x26, 0x23, 0xca, 0x26, 0x23, 0xca, 0x26, 0x20, 0xca, 0x26,
+ 0x1f, 0xcb, 0x25, 0x20, 0xcb, 0x26, 0x23, 0xc8, 0x26, 0x25, 0xc8, 0x27,
+ 0x24, 0xcc, 0x28, 0x20, 0xcd, 0x28, 0x24, 0xd7, 0x2b, 0x28, 0xb9, 0x2d,
+ 0x12, 0x53, 0x14, 0x12, 0x2a, 0x11, 0x13, 0x1e, 0x13, 0x15, 0x17, 0x13,
+ 0x15, 0x16, 0x13, 0x17, 0x16, 0x13, 0x17, 0x15, 0x15, 0x18, 0x15, 0x15,
+ 0x17, 0x15, 0x15, 0x16, 0x16, 0x15, 0x17, 0x17, 0x15, 0x16, 0x16, 0x16,
+ 0x17, 0x17, 0x18, 0x17, 0x18, 0x17, 0x1a, 0x1a, 0x19, 0x1c, 0x1a, 0x1a,
+ 0x21, 0x1f, 0x1f, 0x26, 0x25, 0x22, 0x31, 0x30, 0x2c, 0x3b, 0x39, 0x34,
+ 0x51, 0x4d, 0x46, 0x5a, 0x54, 0x4c, 0x54, 0x4c, 0x44, 0x6c, 0x64, 0x5b,
+ 0x7f, 0x76, 0x6f, 0x6a, 0x64, 0x5d, 0x30, 0x2c, 0x28, 0x1b, 0x18, 0x16,
+ 0x12, 0x0f, 0x0f, 0x0d, 0x0c, 0x0b, 0x0b, 0x09, 0x0a, 0x08, 0x07, 0x08,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x03, 0x01, 0x02,
+ 0x05, 0x01, 0x04, 0x08, 0x02, 0x06, 0x02, 0x02, 0x02, 0x06, 0x0b, 0x05,
+ 0x1f, 0x28, 0x1e, 0x36, 0x44, 0x32, 0x31, 0x45, 0x2b, 0x26, 0x5d, 0x22,
+ 0x2a, 0xaa, 0x2c, 0x19, 0xb7, 0x21, 0x1b, 0xbe, 0x21, 0x20, 0xc7, 0x26,
+ 0x1d, 0xc5, 0x23, 0x1b, 0xc2, 0x22, 0x1c, 0xc3, 0x22, 0x1a, 0xc0, 0x21,
+ 0x1a, 0xc0, 0x21, 0x1a, 0xbf, 0x21, 0x1b, 0xbf, 0x22, 0x1a, 0xbe, 0x21,
+ 0x1a, 0xbe, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21, 0x1c, 0xbe, 0x20,
+ 0x1c, 0xbe, 0x21, 0x1b, 0xbf, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21,
+ 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21,
+ 0x1b, 0xbe, 0x21, 0x1a, 0xbc, 0x21, 0x1a, 0xbc, 0x21, 0x1a, 0xbc, 0x21,
+ 0x1a, 0xbc, 0x21, 0x1a, 0xbc, 0x21, 0x1a, 0xbc, 0x21, 0x1a, 0xbc, 0x21,
+ 0x1a, 0xbc, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21,
+ 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21,
+ 0x1b, 0xbf, 0x21, 0x1b, 0xbd, 0x21, 0x1b, 0xbd, 0x21, 0x1b, 0xbd, 0x21,
+ 0x1b, 0xbd, 0x21, 0x1b, 0xbd, 0x21, 0x1b, 0xbd, 0x21, 0x1b, 0xbd, 0x21,
+ 0x1b, 0xbd, 0x21, 0x1c, 0xbf, 0x21, 0x1b, 0xbe, 0x21, 0x1b, 0xbe, 0x21,
+ 0x1a, 0xbe, 0x21, 0x19, 0xc0, 0x20, 0x19, 0xbf, 0x21, 0x1c, 0xbc, 0x21,
+ 0x1e, 0xbd, 0x22, 0x1c, 0xc0, 0x22, 0x19, 0xc0, 0x22, 0x1c, 0xca, 0x25,
+ 0x21, 0xad, 0x28, 0x0e, 0x4b, 0x10, 0x0c, 0x22, 0x0b, 0x0d, 0x17, 0x0d,
+ 0x0e, 0x12, 0x0d, 0x0e, 0x0f, 0x0d, 0x11, 0x0f, 0x0d, 0x11, 0x0e, 0x0e,
+ 0x11, 0x0e, 0x0e, 0x10, 0x0e, 0x0e, 0x0f, 0x0f, 0x0e, 0x0f, 0x10, 0x0e,
+ 0x0f, 0x0f, 0x0f, 0x10, 0x0f, 0x10, 0x11, 0x12, 0x12, 0x13, 0x13, 0x13,
+ 0x14, 0x13, 0x13, 0x19, 0x18, 0x18, 0x1e, 0x1e, 0x1b, 0x28, 0x27, 0x25,
+ 0x2f, 0x2d, 0x2a, 0x3f, 0x3d, 0x37, 0x49, 0x44, 0x3d, 0x4c, 0x45, 0x3d,
+ 0x5f, 0x58, 0x50, 0x6b, 0x65, 0x5e, 0x5d, 0x58, 0x52, 0x2d, 0x29, 0x25,
+ 0x19, 0x17, 0x14, 0x11, 0x0e, 0x0e, 0x0d, 0x0b, 0x0b, 0x0b, 0x09, 0x0a,
+ 0x08, 0x07, 0x08, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01,
+ 0x03, 0x00, 0x03, 0x07, 0x01, 0x06, 0x09, 0x02, 0x06, 0x02, 0x02, 0x02,
+ 0x05, 0x09, 0x04, 0x19, 0x23, 0x18, 0x28, 0x37, 0x25, 0x23, 0x36, 0x1e,
+ 0x1c, 0x53, 0x1a, 0x24, 0xa2, 0x28, 0x14, 0xae, 0x1e, 0x15, 0xb5, 0x1d,
+ 0x1a, 0xbe, 0x21, 0x17, 0xbc, 0x1f, 0x15, 0xb8, 0x1d, 0x15, 0xb9, 0x1e,
+ 0x14, 0xb6, 0x1c, 0x14, 0xb7, 0x1c, 0x14, 0xb6, 0x1e, 0x15, 0xb6, 0x1e,
+ 0x15, 0xb4, 0x1d, 0x15, 0xb3, 0x1c, 0x16, 0xb3, 0x1c, 0x15, 0xb3, 0x1c,
+ 0x16, 0xb5, 0x1c, 0x16, 0xb5, 0x1c, 0x15, 0xb6, 0x1c, 0x15, 0xb5, 0x1d,
+ 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d,
+ 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d, 0x14, 0xb3, 0x1c, 0x14, 0xb4, 0x1c,
+ 0x14, 0xb4, 0x1c, 0x14, 0xb4, 0x1c, 0x14, 0xb4, 0x1c, 0x14, 0xb4, 0x1c,
+ 0x14, 0xb4, 0x1c, 0x14, 0xb3, 0x1c, 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d,
+ 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d,
+ 0x15, 0xb5, 0x1d, 0x15, 0xb5, 0x1d, 0x15, 0xb4, 0x1c, 0x15, 0xb4, 0x1c,
+ 0x15, 0xb4, 0x1c, 0x15, 0xb4, 0x1c, 0x15, 0xb4, 0x1c, 0x15, 0xb4, 0x1c,
+ 0x15, 0xb4, 0x1c, 0x15, 0xb4, 0x1c, 0x17, 0xb6, 0x1c, 0x16, 0xb4, 0x1c,
+ 0x16, 0xb3, 0x1c, 0x15, 0xb3, 0x1c, 0x14, 0xb6, 0x1c, 0x14, 0xb5, 0x1c,
+ 0x16, 0xb3, 0x1c, 0x18, 0xb3, 0x1e, 0x17, 0xb5, 0x1e, 0x14, 0xb6, 0x1e,
+ 0x17, 0xc0, 0x21, 0x1b, 0xa4, 0x23, 0x0a, 0x44, 0x0c, 0x08, 0x1d, 0x07,
+ 0x08, 0x12, 0x08, 0x08, 0x0c, 0x08, 0x09, 0x0a, 0x08, 0x0b, 0x0a, 0x08,
+ 0x0c, 0x09, 0x09, 0x0c, 0x09, 0x08, 0x0b, 0x09, 0x08, 0x09, 0x0a, 0x08,
+ 0x09, 0x0b, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0a, 0x0d, 0x0e, 0x0d,
+ 0x0e, 0x0f, 0x0e, 0x0f, 0x0e, 0x0d, 0x14, 0x13, 0x12, 0x19, 0x17, 0x15,
+ 0x22, 0x21, 0x1e, 0x26, 0x25, 0x21, 0x33, 0x31, 0x2c, 0x3c, 0x39, 0x32,
+ 0x47, 0x41, 0x3a, 0x56, 0x50, 0x4b, 0x5f, 0x59, 0x54, 0x55, 0x50, 0x4c,
+ 0x2a, 0x26, 0x23, 0x17, 0x15, 0x14, 0x11, 0x0e, 0x0e, 0x0c, 0x0b, 0x0a,
+ 0x0a, 0x0a, 0x09, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x08, 0x02, 0x08, 0x09, 0x03, 0x07,
+ 0x02, 0x02, 0x02, 0x03, 0x08, 0x03, 0x11, 0x1b, 0x11, 0x16, 0x24, 0x15,
+ 0x10, 0x23, 0x0d, 0x10, 0x45, 0x10, 0x1c, 0x97, 0x21, 0x0d, 0xa2, 0x18,
+ 0x0d, 0xa8, 0x18, 0x12, 0xb2, 0x1b, 0x0f, 0xaf, 0x19, 0x0d, 0xab, 0x17,
+ 0x0d, 0xab, 0x18, 0x0c, 0xa8, 0x17, 0x0c, 0xa9, 0x17, 0x0c, 0xa9, 0x19,
+ 0x0e, 0xa8, 0x19, 0x0e, 0xa7, 0x18, 0x0d, 0xa6, 0x17, 0x0e, 0xa6, 0x17,
+ 0x0e, 0xa6, 0x17, 0x0e, 0xa8, 0x17, 0x0e, 0xa8, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0d, 0xa8, 0x17, 0x0f, 0xa8, 0x17,
+ 0x0e, 0xa6, 0x17, 0x0e, 0xa6, 0x17, 0x0e, 0xa6, 0x17, 0x0d, 0xa8, 0x17,
+ 0x0c, 0xa8, 0x17, 0x0e, 0xa6, 0x17, 0x10, 0xa6, 0x19, 0x0f, 0xa7, 0x18,
+ 0x0d, 0xa7, 0x18, 0x0f, 0xb2, 0x1b, 0x13, 0x98, 0x1d, 0x05, 0x3b, 0x08,
+ 0x01, 0x15, 0x01, 0x01, 0x0b, 0x01, 0x01, 0x07, 0x01, 0x02, 0x03, 0x01,
+ 0x04, 0x03, 0x01, 0x05, 0x02, 0x01, 0x05, 0x02, 0x01, 0x04, 0x02, 0x01,
+ 0x02, 0x03, 0x01, 0x02, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x07, 0x07, 0x06, 0x0d, 0x0c, 0x0b,
+ 0x11, 0x0f, 0x0e, 0x19, 0x18, 0x16, 0x1a, 0x19, 0x16, 0x21, 0x20, 0x1d,
+ 0x2b, 0x29, 0x23, 0x3f, 0x3a, 0x34, 0x49, 0x45, 0x41, 0x4c, 0x48, 0x44,
+ 0x49, 0x45, 0x42, 0x26, 0x23, 0x21, 0x15, 0x12, 0x11, 0x10, 0x0e, 0x0e,
+ 0x0c, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x07, 0x01, 0x06,
+ 0x07, 0x02, 0x05, 0x01, 0x02, 0x02, 0x03, 0x08, 0x03, 0x0e, 0x19, 0x0f,
+ 0x10, 0x1d, 0x0f, 0x0a, 0x1b, 0x08, 0x0d, 0x41, 0x0e, 0x19, 0x92, 0x1f,
+ 0x09, 0x9b, 0x16, 0x09, 0xa0, 0x16, 0x0f, 0xab, 0x19, 0x0b, 0xa7, 0x17,
+ 0x08, 0xa3, 0x15, 0x09, 0xa4, 0x16, 0x07, 0xa1, 0x15, 0x07, 0xa2, 0x15,
+ 0x07, 0xa2, 0x16, 0x09, 0xa0, 0x16, 0x09, 0x9f, 0x15, 0x09, 0x9e, 0x15,
+ 0x0a, 0x9e, 0x15, 0x0a, 0x9e, 0x15, 0x0b, 0xa0, 0x15, 0x0b, 0xa0, 0x15,
+ 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15,
+ 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15,
+ 0x0a, 0xa1, 0x15, 0x0a, 0xa1, 0x15, 0x0a, 0xa1, 0x15, 0x0a, 0xa1, 0x15,
+ 0x0a, 0xa1, 0x15, 0x0a, 0xa1, 0x15, 0x0a, 0xa1, 0x15, 0x0a, 0xa1, 0x15,
+ 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15,
+ 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15,
+ 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15,
+ 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15, 0x09, 0xa0, 0x15,
+ 0x0b, 0xa1, 0x15, 0x0a, 0x9f, 0x15, 0x0a, 0x9e, 0x15, 0x09, 0x9f, 0x15,
+ 0x08, 0xa1, 0x15, 0x08, 0xa1, 0x15, 0x0b, 0x9e, 0x15, 0x0c, 0x9f, 0x15,
+ 0x0c, 0xa1, 0x16, 0x09, 0xa2, 0x16, 0x0c, 0xad, 0x19, 0x12, 0x94, 0x1a,
+ 0x04, 0x38, 0x06, 0x00, 0x13, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x05, 0x00,
+ 0x01, 0x02, 0x00, 0x03, 0x02, 0x00, 0x03, 0x01, 0x00, 0x03, 0x01, 0x00,
+ 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x02, 0x02, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x04,
+ 0x0b, 0x0a, 0x0a, 0x0f, 0x0d, 0x0c, 0x17, 0x16, 0x14, 0x15, 0x14, 0x12,
+ 0x1a, 0x18, 0x15, 0x21, 0x1f, 0x1a, 0x37, 0x33, 0x2e, 0x3a, 0x37, 0x34,
+ 0x3b, 0x38, 0x36, 0x3e, 0x3b, 0x39, 0x23, 0x21, 0x1f, 0x13, 0x10, 0x10,
+ 0x0f, 0x0d, 0x0d, 0x0b, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x07, 0x06, 0x07,
+ 0x03, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x05, 0x01, 0x03, 0x06, 0x02, 0x04, 0x02, 0x02, 0x02, 0x03, 0x08, 0x03,
+ 0x0d, 0x17, 0x0d, 0x0b, 0x18, 0x0b, 0x05, 0x17, 0x05, 0x0b, 0x3f, 0x0e,
+ 0x16, 0x8d, 0x1d, 0x07, 0x94, 0x14, 0x05, 0x99, 0x14, 0x0c, 0xa4, 0x18,
+ 0x08, 0xa1, 0x15, 0x04, 0x9d, 0x14, 0x06, 0x9f, 0x15, 0x04, 0x9a, 0x14,
+ 0x04, 0x9b, 0x14, 0x04, 0x9c, 0x14, 0x05, 0x99, 0x14, 0x05, 0x99, 0x14,
+ 0x05, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x09, 0x99, 0x14,
+ 0x09, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14,
+ 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14,
+ 0x06, 0x99, 0x14, 0x08, 0x9b, 0x14, 0x08, 0x9b, 0x14, 0x08, 0x9b, 0x14,
+ 0x08, 0x9b, 0x14, 0x08, 0x9b, 0x14, 0x08, 0x9b, 0x14, 0x08, 0x9b, 0x14,
+ 0x08, 0x9b, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14,
+ 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14,
+ 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14,
+ 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14,
+ 0x06, 0x99, 0x14, 0x07, 0x9a, 0x14, 0x06, 0x99, 0x14, 0x06, 0x99, 0x14,
+ 0x05, 0x99, 0x14, 0x03, 0x9b, 0x14, 0x04, 0x9b, 0x14, 0x09, 0x99, 0x14,
+ 0x0a, 0x98, 0x13, 0x0b, 0x9e, 0x15, 0x07, 0xa0, 0x15, 0x0b, 0xaa, 0x18,
+ 0x11, 0x92, 0x19, 0x04, 0x37, 0x06, 0x00, 0x13, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04,
+ 0x03, 0x04, 0x04, 0x0b, 0x0b, 0x0b, 0x0d, 0x0e, 0x0c, 0x15, 0x15, 0x13,
+ 0x13, 0x12, 0x10, 0x14, 0x13, 0x10, 0x17, 0x17, 0x13, 0x2e, 0x2b, 0x27,
+ 0x2a, 0x28, 0x26, 0x29, 0x27, 0x26, 0x33, 0x30, 0x30, 0x20, 0x1e, 0x1e,
+ 0x0f, 0x0f, 0x0f, 0x0e, 0x0c, 0x0c, 0x0b, 0x09, 0x0a, 0x09, 0x07, 0x09,
+ 0x06, 0x04, 0x07, 0x02, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x02, 0x05, 0x02, 0x03, 0x02, 0x02, 0x02,
+ 0x03, 0x08, 0x03, 0x0c, 0x16, 0x0c, 0x09, 0x15, 0x09, 0x03, 0x14, 0x03,
+ 0x0a, 0x3d, 0x0d, 0x15, 0x8a, 0x1c, 0x04, 0x90, 0x13, 0x02, 0x94, 0x13,
+ 0x0b, 0xa1, 0x17, 0x06, 0x9d, 0x15, 0x03, 0x9a, 0x14, 0x06, 0x9c, 0x15,
+ 0x02, 0x97, 0x13, 0x02, 0x98, 0x13, 0x01, 0x98, 0x13, 0x03, 0x96, 0x13,
+ 0x03, 0x96, 0x13, 0x04, 0x96, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13,
+ 0x08, 0x95, 0x13, 0x08, 0x95, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13,
+ 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13,
+ 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x07, 0x98, 0x13, 0x07, 0x98, 0x13,
+ 0x07, 0x98, 0x13, 0x07, 0x98, 0x13, 0x07, 0x98, 0x13, 0x07, 0x98, 0x13,
+ 0x07, 0x98, 0x13, 0x07, 0x98, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13,
+ 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13,
+ 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x95, 0x13,
+ 0x05, 0x95, 0x13, 0x03, 0x95, 0x13, 0x01, 0x98, 0x13, 0x02, 0x98, 0x13,
+ 0x08, 0x96, 0x13, 0x09, 0x94, 0x12, 0x09, 0x9b, 0x14, 0x05, 0x9d, 0x14,
+ 0x09, 0xa7, 0x17, 0x10, 0x90, 0x18, 0x03, 0x36, 0x06, 0x00, 0x12, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x02, 0x02, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x0b, 0x0b, 0x0a, 0x0d, 0x0d, 0x0c,
+ 0x14, 0x14, 0x13, 0x11, 0x0f, 0x0e, 0x10, 0x0e, 0x0c, 0x12, 0x11, 0x0f,
+ 0x24, 0x23, 0x21, 0x1c, 0x1b, 0x1a, 0x1b, 0x1a, 0x1a, 0x26, 0x24, 0x25,
+ 0x1b, 0x1a, 0x1a, 0x0f, 0x0e, 0x0e, 0x0c, 0x0b, 0x0b, 0x0a, 0x08, 0x09,
+ 0x08, 0x06, 0x09, 0x05, 0x03, 0x07, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x04, 0x00, 0x01, 0x04, 0x00, 0x03, 0x05, 0x02, 0x05,
+ 0x02, 0x01, 0x02, 0x02, 0x06, 0x02, 0x0b, 0x15, 0x0b, 0x09, 0x16, 0x08,
+ 0x03, 0x14, 0x03, 0x09, 0x3d, 0x0c, 0x14, 0x8b, 0x1c, 0x04, 0x8f, 0x14,
+ 0x02, 0x95, 0x13, 0x0b, 0xa2, 0x17, 0x08, 0x9e, 0x15, 0x04, 0x9b, 0x14,
+ 0x07, 0x9e, 0x15, 0x03, 0x99, 0x13, 0x02, 0x99, 0x14, 0x02, 0x99, 0x14,
+ 0x04, 0x96, 0x14, 0x03, 0x96, 0x14, 0x04, 0x96, 0x14, 0x06, 0x95, 0x14,
+ 0x07, 0x95, 0x14, 0x09, 0x95, 0x14, 0x09, 0x95, 0x14, 0x07, 0x98, 0x14,
+ 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14,
+ 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14,
+ 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14,
+ 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x97, 0x14,
+ 0x07, 0x97, 0x14, 0x07, 0x97, 0x14, 0x07, 0x97, 0x14, 0x07, 0x97, 0x14,
+ 0x07, 0x97, 0x14, 0x07, 0x97, 0x14, 0x07, 0x98, 0x14, 0x07, 0x96, 0x14,
+ 0x07, 0x95, 0x14, 0x06, 0x95, 0x14, 0x03, 0x96, 0x14, 0x01, 0x98, 0x14,
+ 0x02, 0x98, 0x14, 0x08, 0x96, 0x14, 0x09, 0x96, 0x13, 0x09, 0x9a, 0x13,
+ 0x04, 0x9b, 0x13, 0x0a, 0xa6, 0x17, 0x10, 0x8f, 0x18, 0x03, 0x36, 0x06,
+ 0x00, 0x13, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x0b, 0x0b, 0x0a,
+ 0x0d, 0x0d, 0x0b, 0x14, 0x14, 0x13, 0x10, 0x0e, 0x0d, 0x0f, 0x0d, 0x0c,
+ 0x11, 0x11, 0x10, 0x1d, 0x1d, 0x1c, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x1d, 0x1c, 0x1d, 0x17, 0x15, 0x17, 0x0f, 0x0e, 0x10, 0x0a, 0x0a, 0x0b,
+ 0x09, 0x08, 0x0a, 0x08, 0x06, 0x08, 0x04, 0x02, 0x06, 0x02, 0x00, 0x03,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x01, 0x04, 0x00, 0x03,
+ 0x06, 0x02, 0x05, 0x02, 0x01, 0x02, 0x02, 0x05, 0x02, 0x0b, 0x15, 0x0b,
+ 0x0a, 0x16, 0x08, 0x03, 0x14, 0x03, 0x08, 0x3b, 0x0b, 0x14, 0x8a, 0x1c,
+ 0x04, 0x8f, 0x14, 0x02, 0x95, 0x13, 0x0b, 0xa2, 0x18, 0x09, 0x9f, 0x15,
+ 0x05, 0x9c, 0x15, 0x08, 0x9f, 0x15, 0x03, 0x9b, 0x14, 0x03, 0x9a, 0x14,
+ 0x03, 0x99, 0x14, 0x04, 0x97, 0x14, 0x04, 0x97, 0x14, 0x05, 0x97, 0x14,
+ 0x07, 0x95, 0x14, 0x08, 0x95, 0x14, 0x09, 0x96, 0x14, 0x09, 0x97, 0x14,
+ 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14,
+ 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14,
+ 0x07, 0x99, 0x14, 0x08, 0x99, 0x14, 0x08, 0x99, 0x14, 0x08, 0x99, 0x14,
+ 0x08, 0x99, 0x14, 0x08, 0x99, 0x14, 0x08, 0x99, 0x14, 0x07, 0x99, 0x14,
+ 0x09, 0x9a, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14,
+ 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x9a, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x08, 0x96, 0x14, 0x08, 0x95, 0x14, 0x07, 0x95, 0x14, 0x04, 0x97, 0x14,
+ 0x02, 0x99, 0x14, 0x03, 0x99, 0x14, 0x08, 0x97, 0x14, 0x0a, 0x96, 0x14,
+ 0x08, 0x99, 0x13, 0x03, 0x9a, 0x13, 0x09, 0xa5, 0x17, 0x10, 0x8e, 0x18,
+ 0x03, 0x35, 0x06, 0x00, 0x12, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x03, 0x01,
+ 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x0b, 0x0b, 0x0a, 0x0d, 0x0d, 0x0b, 0x13, 0x14, 0x13, 0x0f, 0x0d, 0x0c,
+ 0x0d, 0x0b, 0x0c, 0x11, 0x10, 0x11, 0x18, 0x18, 0x19, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x15, 0x15, 0x15, 0x13, 0x11, 0x13, 0x0f, 0x0e, 0x10,
+ 0x0a, 0x09, 0x0a, 0x09, 0x08, 0x09, 0x07, 0x06, 0x08, 0x03, 0x02, 0x06,
+ 0x02, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01,
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01,
+ 0x03, 0x00, 0x02, 0x05, 0x02, 0x05, 0x02, 0x01, 0x02, 0x02, 0x04, 0x03,
+ 0x0b, 0x13, 0x0c, 0x09, 0x15, 0x09, 0x02, 0x14, 0x03, 0x08, 0x3b, 0x0a,
+ 0x14, 0x88, 0x1b, 0x05, 0x8e, 0x14, 0x04, 0x94, 0x14, 0x0c, 0xa1, 0x17,
+ 0x0a, 0x9f, 0x15, 0x06, 0x9c, 0x15, 0x08, 0x9d, 0x15, 0x05, 0x9a, 0x13,
+ 0x05, 0x9a, 0x14, 0x05, 0x98, 0x14, 0x06, 0x96, 0x14, 0x06, 0x96, 0x14,
+ 0x07, 0x96, 0x14, 0x08, 0x96, 0x14, 0x08, 0x96, 0x14, 0x09, 0x97, 0x14,
+ 0x09, 0x97, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14,
+ 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14, 0x09, 0x99, 0x14,
+ 0x09, 0x99, 0x14, 0x07, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x07, 0x98, 0x14, 0x09, 0x99, 0x14, 0x09, 0x98, 0x14, 0x09, 0x98, 0x14,
+ 0x09, 0x98, 0x14, 0x09, 0x98, 0x14, 0x09, 0x98, 0x14, 0x09, 0x98, 0x14,
+ 0x09, 0x99, 0x14, 0x07, 0x97, 0x14, 0x07, 0x97, 0x14, 0x07, 0x97, 0x14,
+ 0x07, 0x97, 0x14, 0x07, 0x97, 0x14, 0x07, 0x97, 0x14, 0x07, 0x97, 0x14,
+ 0x07, 0x97, 0x14, 0x07, 0x98, 0x14, 0x08, 0x96, 0x14, 0x08, 0x96, 0x14,
+ 0x06, 0x96, 0x14, 0x03, 0x99, 0x14, 0x04, 0x99, 0x14, 0x08, 0x96, 0x14,
+ 0x0a, 0x97, 0x14, 0x08, 0x99, 0x14, 0x03, 0x9a, 0x14, 0x08, 0xa5, 0x17,
+ 0x0f, 0x8f, 0x19, 0x03, 0x36, 0x06, 0x00, 0x13, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01,
+ 0x02, 0x02, 0x02, 0x09, 0x0a, 0x09, 0x0a, 0x0b, 0x0a, 0x11, 0x12, 0x12,
+ 0x0d, 0x0c, 0x0c, 0x0c, 0x0b, 0x0b, 0x10, 0x10, 0x10, 0x16, 0x17, 0x17,
+ 0x0f, 0x10, 0x10, 0x0f, 0x10, 0x10, 0x11, 0x12, 0x12, 0x11, 0x11, 0x11,
+ 0x0d, 0x0d, 0x0e, 0x0a, 0x0a, 0x0a, 0x08, 0x07, 0x08, 0x06, 0x05, 0x06,
+ 0x03, 0x02, 0x05, 0x01, 0x00, 0x02, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x02, 0x00, 0x01, 0x04, 0x01, 0x03, 0x01, 0x00, 0x01,
+ 0x02, 0x04, 0x03, 0x0a, 0x12, 0x0c, 0x08, 0x15, 0x09, 0x02, 0x15, 0x02,
+ 0x08, 0x3b, 0x09, 0x13, 0x87, 0x1a, 0x05, 0x8f, 0x14, 0x06, 0x95, 0x14,
+ 0x0c, 0x9f, 0x17, 0x0b, 0x9e, 0x15, 0x08, 0x9c, 0x15, 0x06, 0x9a, 0x14,
+ 0x07, 0x99, 0x14, 0x07, 0x99, 0x14, 0x07, 0x97, 0x14, 0x07, 0x95, 0x14,
+ 0x07, 0x96, 0x14, 0x07, 0x96, 0x14, 0x08, 0x97, 0x14, 0x08, 0x97, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x97, 0x14, 0x08, 0x97, 0x14,
+ 0x08, 0x97, 0x14, 0x08, 0x97, 0x14, 0x08, 0x97, 0x14, 0x08, 0x97, 0x14,
+ 0x08, 0x97, 0x14, 0x08, 0x97, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x97, 0x14, 0x08, 0x96, 0x14,
+ 0x08, 0x96, 0x14, 0x08, 0x96, 0x14, 0x08, 0x96, 0x14, 0x08, 0x96, 0x14,
+ 0x08, 0x96, 0x14, 0x08, 0x97, 0x14, 0x06, 0x95, 0x14, 0x06, 0x95, 0x14,
+ 0x06, 0x95, 0x14, 0x06, 0x95, 0x14, 0x06, 0x95, 0x14, 0x06, 0x95, 0x14,
+ 0x06, 0x95, 0x14, 0x06, 0x96, 0x14, 0x06, 0x98, 0x14, 0x08, 0x97, 0x14,
+ 0x08, 0x97, 0x14, 0x07, 0x97, 0x14, 0x05, 0x99, 0x14, 0x05, 0x99, 0x14,
+ 0x08, 0x97, 0x13, 0x09, 0x97, 0x15, 0x07, 0x9a, 0x15, 0x02, 0x9c, 0x14,
+ 0x06, 0xa7, 0x18, 0x0d, 0x90, 0x19, 0x03, 0x36, 0x06, 0x00, 0x13, 0x00,
+ 0x00, 0x0b, 0x00, 0x01, 0x04, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x02, 0x03,
+ 0x00, 0x01, 0x02, 0x02, 0x03, 0x03, 0x09, 0x0a, 0x0a, 0x08, 0x0a, 0x0a,
+ 0x0e, 0x10, 0x10, 0x0a, 0x0c, 0x0b, 0x0a, 0x0b, 0x0a, 0x0e, 0x0f, 0x0e,
+ 0x15, 0x17, 0x16, 0x0e, 0x10, 0x0f, 0x0c, 0x0e, 0x0e, 0x0f, 0x11, 0x10,
+ 0x0f, 0x11, 0x0f, 0x0b, 0x0c, 0x0a, 0x0a, 0x0b, 0x09, 0x06, 0x07, 0x06,
+ 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x01, 0x02,
+ 0x01, 0x00, 0x01, 0x02, 0x04, 0x03, 0x0a, 0x11, 0x0c, 0x07, 0x14, 0x09,
+ 0x02, 0x14, 0x02, 0x08, 0x3b, 0x08, 0x13, 0x86, 0x19, 0x05, 0x8e, 0x14,
+ 0x05, 0x94, 0x14, 0x0b, 0x9d, 0x16, 0x0b, 0x9e, 0x15, 0x09, 0x9c, 0x15,
+ 0x05, 0x98, 0x13, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x08, 0x96, 0x14,
+ 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x96, 0x14,
+ 0x07, 0x96, 0x14, 0x07, 0x98, 0x14, 0x07, 0x98, 0x14, 0x07, 0x96, 0x14,
+ 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x95, 0x14,
+ 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x96, 0x14,
+ 0x07, 0x96, 0x14, 0x07, 0x96, 0x14, 0x07, 0x96, 0x14, 0x07, 0x96, 0x14,
+ 0x07, 0x96, 0x14, 0x07, 0x96, 0x14, 0x07, 0x96, 0x14, 0x07, 0x95, 0x14,
+ 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x95, 0x14,
+ 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x07, 0x95, 0x14, 0x05, 0x94, 0x14,
+ 0x05, 0x94, 0x14, 0x05, 0x94, 0x14, 0x05, 0x94, 0x14, 0x05, 0x94, 0x14,
+ 0x05, 0x94, 0x14, 0x05, 0x94, 0x14, 0x05, 0x95, 0x14, 0x04, 0x98, 0x14,
+ 0x06, 0x96, 0x14, 0x07, 0x96, 0x14, 0x07, 0x96, 0x14, 0x05, 0x98, 0x14,
+ 0x04, 0x98, 0x14, 0x07, 0x96, 0x13, 0x08, 0x97, 0x15, 0x07, 0x9a, 0x15,
+ 0x02, 0x9c, 0x14, 0x05, 0xa7, 0x18, 0x0c, 0x90, 0x19, 0x03, 0x36, 0x06,
+ 0x00, 0x13, 0x00, 0x00, 0x0a, 0x00, 0x01, 0x03, 0x02, 0x01, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02,
+ 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x02, 0x02, 0x03, 0x07, 0x09, 0x09,
+ 0x06, 0x09, 0x09, 0x0d, 0x0f, 0x0f, 0x09, 0x0c, 0x0a, 0x08, 0x0a, 0x08,
+ 0x0d, 0x0e, 0x0c, 0x14, 0x16, 0x14, 0x0c, 0x0e, 0x0d, 0x0b, 0x0d, 0x0c,
+ 0x0e, 0x11, 0x0f, 0x0e, 0x10, 0x0d, 0x09, 0x0a, 0x07, 0x09, 0x0a, 0x08,
+ 0x05, 0x06, 0x05, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x02, 0x04, 0x03, 0x09, 0x12, 0x0c,
+ 0x08, 0x14, 0x09, 0x02, 0x14, 0x02, 0x08, 0x3b, 0x08, 0x14, 0x86, 0x19,
+ 0x05, 0x8e, 0x14, 0x05, 0x93, 0x13, 0x0a, 0x9c, 0x15, 0x0a, 0x9d, 0x14,
+ 0x08, 0x9b, 0x14, 0x06, 0x98, 0x13, 0x06, 0x98, 0x13, 0x05, 0x96, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x97, 0x13, 0x05, 0x96, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13,
+ 0x05, 0x94, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13,
+ 0x05, 0x94, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13,
+ 0x05, 0x94, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13, 0x05, 0x94, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13,
+ 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x94, 0x13,
+ 0x03, 0x96, 0x13, 0x05, 0x95, 0x13, 0x05, 0x95, 0x13, 0x05, 0x94, 0x13,
+ 0x03, 0x96, 0x13, 0x03, 0x96, 0x13, 0x06, 0x94, 0x13, 0x06, 0x95, 0x14,
+ 0x06, 0x99, 0x15, 0x02, 0x9b, 0x14, 0x04, 0xa6, 0x17, 0x0c, 0x8f, 0x18,
+ 0x03, 0x35, 0x06, 0x00, 0x12, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x02, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
+ 0x07, 0x08, 0x08, 0x07, 0x09, 0x08, 0x0e, 0x10, 0x0e, 0x0a, 0x0c, 0x09,
+ 0x07, 0x0a, 0x06, 0x0c, 0x0d, 0x0c, 0x13, 0x13, 0x12, 0x0d, 0x0d, 0x0b,
+ 0x0d, 0x0e, 0x0c, 0x0e, 0x10, 0x0f, 0x0e, 0x0f, 0x0e, 0x08, 0x09, 0x07,
+ 0x06, 0x07, 0x05, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x02, 0x04, 0x03,
+ 0x09, 0x12, 0x0c, 0x08, 0x14, 0x09, 0x02, 0x14, 0x02, 0x08, 0x3b, 0x08,
+ 0x14, 0x87, 0x19, 0x05, 0x8f, 0x14, 0x04, 0x93, 0x12, 0x09, 0x9b, 0x15,
+ 0x09, 0x9d, 0x14, 0x08, 0x9c, 0x14, 0x06, 0x99, 0x13, 0x06, 0x98, 0x13,
+ 0x04, 0x96, 0x13, 0x04, 0x95, 0x13, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12,
+ 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x96, 0x13,
+ 0x04, 0x95, 0x13, 0x04, 0x95, 0x13, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12,
+ 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12,
+ 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12,
+ 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12,
+ 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12,
+ 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12,
+ 0x04, 0x94, 0x12, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13,
+ 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13, 0x05, 0x96, 0x13,
+ 0x05, 0x95, 0x13, 0x03, 0x95, 0x13, 0x04, 0x94, 0x12, 0x04, 0x94, 0x12,
+ 0x04, 0x94, 0x12, 0x03, 0x95, 0x13, 0x03, 0x96, 0x13, 0x05, 0x95, 0x13,
+ 0x06, 0x95, 0x13, 0x06, 0x99, 0x14, 0x02, 0x9c, 0x14, 0x05, 0xa6, 0x17,
+ 0x0c, 0x8e, 0x18, 0x03, 0x35, 0x06, 0x00, 0x12, 0x00, 0x00, 0x09, 0x00,
+ 0x00, 0x02, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x02, 0x05, 0x07, 0x08, 0x07, 0x09, 0x08, 0x0f, 0x11, 0x0e,
+ 0x0a, 0x0c, 0x09, 0x06, 0x0a, 0x04, 0x0c, 0x0c, 0x0b, 0x12, 0x11, 0x10,
+ 0x0c, 0x0d, 0x0a, 0x0d, 0x0e, 0x0c, 0x0d, 0x0f, 0x0e, 0x0d, 0x0f, 0x0d,
+ 0x08, 0x09, 0x07, 0x04, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02,
+ 0x02, 0x04, 0x03, 0x09, 0x11, 0x0c, 0x07, 0x14, 0x09, 0x02, 0x14, 0x02,
+ 0x08, 0x3b, 0x08, 0x15, 0x89, 0x1b, 0x05, 0x90, 0x14, 0x03, 0x94, 0x12,
+ 0x09, 0x9c, 0x15, 0x0a, 0x9e, 0x15, 0x0a, 0x9e, 0x15, 0x07, 0x9c, 0x14,
+ 0x07, 0x9b, 0x14, 0x06, 0x98, 0x14, 0x06, 0x98, 0x14, 0x06, 0x97, 0x14,
+ 0x06, 0x97, 0x14, 0x06, 0x97, 0x14, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13,
+ 0x06, 0x99, 0x14, 0x06, 0x98, 0x14, 0x06, 0x98, 0x14, 0x06, 0x97, 0x13,
+ 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13,
+ 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13,
+ 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13,
+ 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13,
+ 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x06, 0x97, 0x13,
+ 0x06, 0x97, 0x13, 0x06, 0x97, 0x13, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x08, 0x98, 0x14,
+ 0x08, 0x98, 0x14, 0x08, 0x98, 0x14, 0x06, 0x98, 0x15, 0x06, 0x98, 0x14,
+ 0x07, 0x97, 0x14, 0x07, 0x97, 0x13, 0x05, 0x99, 0x14, 0x05, 0x9a, 0x14,
+ 0x07, 0x98, 0x15, 0x08, 0x98, 0x14, 0x08, 0x9d, 0x15, 0x04, 0x9f, 0x15,
+ 0x07, 0xa9, 0x18, 0x0e, 0x90, 0x19, 0x03, 0x36, 0x06, 0x00, 0x14, 0x00,
+ 0x01, 0x0a, 0x01, 0x01, 0x04, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02,
+ 0x02, 0x03, 0x01, 0x02, 0x03, 0x01, 0x02, 0x03, 0x01, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x03,
+ 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x06, 0x07, 0x08, 0x09, 0x0b, 0x09,
+ 0x11, 0x13, 0x10, 0x0a, 0x0c, 0x09, 0x05, 0x08, 0x04, 0x0c, 0x0c, 0x0a,
+ 0x10, 0x10, 0x0f, 0x0a, 0x0b, 0x09, 0x0b, 0x0b, 0x09, 0x0b, 0x0c, 0x0b,
+ 0x0b, 0x0c, 0x0b, 0x07, 0x08, 0x06, 0x03, 0x04, 0x02, 0x04, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02,
+ 0x00, 0x01, 0x02, 0x02, 0x03, 0x03, 0x08, 0x10, 0x0b, 0x06, 0x13, 0x08,
+ 0x02, 0x14, 0x02, 0x08, 0x3b, 0x08, 0x16, 0x8b, 0x1b, 0x05, 0x92, 0x14,
+ 0x03, 0x95, 0x13, 0x09, 0x9d, 0x16, 0x0a, 0xa0, 0x16, 0x0a, 0xa0, 0x15,
+ 0x08, 0x9e, 0x14, 0x08, 0x9e, 0x14, 0x08, 0x9b, 0x14, 0x08, 0x9a, 0x14,
+ 0x08, 0x9a, 0x15, 0x08, 0x9a, 0x15, 0x08, 0x9a, 0x15, 0x08, 0x9a, 0x14,
+ 0x08, 0x9a, 0x14, 0x08, 0x9c, 0x14, 0x07, 0x9b, 0x14, 0x09, 0x9a, 0x14,
+ 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14,
+ 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14,
+ 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14,
+ 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14,
+ 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14,
+ 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9a, 0x14, 0x09, 0x9b, 0x14,
+ 0x09, 0x9b, 0x14, 0x09, 0x9b, 0x14, 0x09, 0x9b, 0x14, 0x09, 0x9b, 0x14,
+ 0x09, 0x9b, 0x14, 0x09, 0x9b, 0x14, 0x09, 0x9b, 0x14, 0x07, 0x9b, 0x16,
+ 0x08, 0x9b, 0x15, 0x09, 0x9a, 0x15, 0x09, 0x9a, 0x14, 0x07, 0x9d, 0x14,
+ 0x08, 0x9d, 0x14, 0x0a, 0x9b, 0x16, 0x0a, 0x9b, 0x15, 0x0a, 0x9f, 0x16,
+ 0x06, 0xa1, 0x15, 0x08, 0xab, 0x19, 0x0f, 0x93, 0x1a, 0x03, 0x38, 0x07,
+ 0x00, 0x15, 0x01, 0x01, 0x0b, 0x01, 0x02, 0x05, 0x04, 0x04, 0x05, 0x04,
+ 0x04, 0x05, 0x04, 0x03, 0x04, 0x02, 0x04, 0x04, 0x02, 0x04, 0x04, 0x03,
+ 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x03, 0x03,
+ 0x02, 0x03, 0x04, 0x02, 0x03, 0x04, 0x02, 0x02, 0x03, 0x07, 0x08, 0x09,
+ 0x0a, 0x0c, 0x09, 0x12, 0x14, 0x11, 0x0a, 0x0c, 0x09, 0x05, 0x08, 0x04,
+ 0x0b, 0x0c, 0x0a, 0x0f, 0x0e, 0x0d, 0x09, 0x0a, 0x08, 0x08, 0x0a, 0x08,
+ 0x08, 0x0a, 0x08, 0x0a, 0x0b, 0x09, 0x07, 0x08, 0x06, 0x03, 0x04, 0x02,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x01, 0x02, 0x02, 0x03, 0x02, 0x08, 0x10, 0x0a,
+ 0x06, 0x13, 0x08, 0x02, 0x14, 0x02, 0x08, 0x3b, 0x08, 0x17, 0x8d, 0x1c,
+ 0x05, 0x93, 0x14, 0x02, 0x96, 0x13, 0x09, 0x9f, 0x16, 0x0b, 0xa2, 0x17,
+ 0x0c, 0xa4, 0x16, 0x0a, 0xa2, 0x15, 0x0a, 0xa1, 0x15, 0x0b, 0x9f, 0x15,
+ 0x0b, 0x9e, 0x15, 0x0b, 0x9e, 0x17, 0x0b, 0x9e, 0x17, 0x0b, 0x9e, 0x17,
+ 0x0b, 0x9e, 0x15, 0x0b, 0x9e, 0x15, 0x0b, 0x9f, 0x15, 0x0a, 0x9f, 0x15,
+ 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15,
+ 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15,
+ 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15,
+ 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15,
+ 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15,
+ 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15,
+ 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15,
+ 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15, 0x0c, 0x9e, 0x15,
+ 0x0b, 0x9f, 0x17, 0x0b, 0x9f, 0x17, 0x0c, 0x9e, 0x17, 0x0c, 0x9f, 0x15,
+ 0x0a, 0xa1, 0x15, 0x0b, 0xa2, 0x15, 0x0d, 0x9f, 0x17, 0x0d, 0xa0, 0x16,
+ 0x0c, 0xa3, 0x16, 0x09, 0xa5, 0x16, 0x0b, 0xaf, 0x1a, 0x11, 0x96, 0x1b,
+ 0x04, 0x3a, 0x07, 0x01, 0x16, 0x02, 0x02, 0x0c, 0x03, 0x03, 0x08, 0x06,
+ 0x06, 0x08, 0x06, 0x07, 0x08, 0x06, 0x05, 0x07, 0x03, 0x06, 0x07, 0x03,
+ 0x06, 0x07, 0x04, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x05,
+ 0x05, 0x05, 0x05, 0x03, 0x05, 0x05, 0x03, 0x06, 0x06, 0x02, 0x03, 0x03,
+ 0x08, 0x09, 0x09, 0x0b, 0x0d, 0x0a, 0x13, 0x16, 0x13, 0x0a, 0x0c, 0x09,
+ 0x03, 0x06, 0x03, 0x0a, 0x0b, 0x09, 0x0d, 0x0c, 0x0b, 0x07, 0x08, 0x06,
+ 0x06, 0x08, 0x06, 0x06, 0x08, 0x06, 0x08, 0x09, 0x07, 0x07, 0x08, 0x06,
+ 0x03, 0x04, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02,
+ 0x07, 0x10, 0x0a, 0x05, 0x13, 0x07, 0x01, 0x14, 0x02, 0x07, 0x3b, 0x08,
+ 0x18, 0x8f, 0x1d, 0x06, 0x95, 0x15, 0x03, 0x97, 0x13, 0x0b, 0xa1, 0x17,
+ 0x0d, 0xa5, 0x18, 0x0e, 0xa9, 0x18, 0x0d, 0xa7, 0x17, 0x0d, 0xa6, 0x17,
+ 0x0d, 0xa5, 0x17, 0x0d, 0xa4, 0x17, 0x0d, 0xa4, 0x19, 0x0d, 0xa4, 0x19,
+ 0x0d, 0xa4, 0x19, 0x0d, 0xa4, 0x17, 0x0d, 0xa4, 0x17, 0x0d, 0xa5, 0x17,
+ 0x0d, 0xa5, 0x17, 0x0e, 0xa3, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17,
+ 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17,
+ 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17,
+ 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17,
+ 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17,
+ 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17, 0x0e, 0xa4, 0x17,
+ 0x0e, 0xa4, 0x17, 0x0e, 0xa3, 0x17, 0x0e, 0xa3, 0x17, 0x0e, 0xa3, 0x17,
+ 0x0e, 0xa3, 0x17, 0x0e, 0xa3, 0x17, 0x0e, 0xa3, 0x17, 0x0e, 0xa3, 0x17,
+ 0x0e, 0xa3, 0x17, 0x0d, 0xa5, 0x18, 0x0d, 0xa5, 0x18, 0x0f, 0xa4, 0x19,
+ 0x0e, 0xa4, 0x17, 0x0c, 0xa7, 0x17, 0x0d, 0xa7, 0x17, 0x10, 0xa5, 0x19,
+ 0x10, 0xa5, 0x18, 0x0e, 0xa8, 0x18, 0x0b, 0xa9, 0x18, 0x0d, 0xb3, 0x1c,
+ 0x13, 0x9b, 0x1d, 0x05, 0x3d, 0x08, 0x04, 0x18, 0x03, 0x05, 0x0f, 0x06,
+ 0x06, 0x0b, 0x08, 0x09, 0x0a, 0x08, 0x09, 0x0a, 0x08, 0x08, 0x09, 0x07,
+ 0x08, 0x09, 0x06, 0x08, 0x09, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x06, 0x08, 0x08, 0x06, 0x09, 0x09,
+ 0x04, 0x06, 0x03, 0x09, 0x0a, 0x09, 0x0c, 0x0e, 0x0b, 0x15, 0x18, 0x14,
+ 0x0a, 0x0d, 0x0a, 0x03, 0x06, 0x02, 0x08, 0x0a, 0x07, 0x0c, 0x0c, 0x0b,
+ 0x08, 0x08, 0x07, 0x07, 0x08, 0x07, 0x08, 0x09, 0x07, 0x08, 0x09, 0x07,
+ 0x05, 0x06, 0x04, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x02,
+ 0x01, 0x03, 0x02, 0x07, 0x0f, 0x09, 0x05, 0x12, 0x07, 0x01, 0x15, 0x02,
+ 0x07, 0x3c, 0x08, 0x19, 0x92, 0x1e, 0x06, 0x97, 0x14, 0x04, 0x98, 0x13,
+ 0x0c, 0xa3, 0x17, 0x0e, 0xa9, 0x19, 0x11, 0xad, 0x1a, 0x0f, 0xac, 0x19,
+ 0x0f, 0xac, 0x19, 0x10, 0xaa, 0x19, 0x10, 0xaa, 0x19, 0x10, 0xa9, 0x1a,
+ 0x10, 0xa9, 0x1a, 0x10, 0xa9, 0x1a, 0x10, 0xaa, 0x19, 0x10, 0xaa, 0x19,
+ 0x10, 0xab, 0x19, 0x10, 0xab, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19,
+ 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19,
+ 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19,
+ 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19,
+ 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19,
+ 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19,
+ 0x0f, 0xa9, 0x19, 0x0f, 0xa9, 0x19, 0x0f, 0xa8, 0x19, 0x0f, 0xa8, 0x19,
+ 0x0f, 0xa8, 0x19, 0x0f, 0xa8, 0x19, 0x0f, 0xa8, 0x19, 0x0f, 0xa8, 0x19,
+ 0x0f, 0xa8, 0x19, 0x0f, 0xa8, 0x19, 0x0f, 0xaa, 0x19, 0x10, 0xaa, 0x19,
+ 0x10, 0xa9, 0x1a, 0x10, 0xaa, 0x19, 0x0e, 0xac, 0x19, 0x0f, 0xac, 0x19,
+ 0x12, 0xab, 0x1a, 0x12, 0xab, 0x1a, 0x0f, 0xad, 0x1a, 0x0c, 0xae, 0x19,
+ 0x0f, 0xb9, 0x1d, 0x16, 0xa0, 0x1f, 0x06, 0x41, 0x0a, 0x08, 0x1b, 0x06,
+ 0x09, 0x11, 0x0a, 0x0a, 0x0d, 0x0b, 0x0b, 0x0c, 0x0b, 0x0b, 0x0c, 0x0b,
+ 0x0a, 0x0c, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x09, 0x0b, 0x0a, 0x0a,
+ 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0a, 0x09, 0x0b, 0x0a,
+ 0x0a, 0x0b, 0x0b, 0x05, 0x08, 0x04, 0x0a, 0x0c, 0x08, 0x0d, 0x0f, 0x0c,
+ 0x16, 0x19, 0x16, 0x0b, 0x0e, 0x0a, 0x02, 0x05, 0x02, 0x06, 0x07, 0x04,
+ 0x0d, 0x0b, 0x0a, 0x0a, 0x09, 0x07, 0x0a, 0x09, 0x08, 0x0b, 0x0b, 0x0a,
+ 0x09, 0x09, 0x08, 0x04, 0x05, 0x03, 0x01, 0x02, 0x01, 0x01, 0x01, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x03, 0x02, 0x05, 0x0e, 0x09, 0x04, 0x12, 0x07,
+ 0x01, 0x15, 0x02, 0x06, 0x3b, 0x08, 0x1a, 0x93, 0x1f, 0x06, 0x98, 0x14,
+ 0x04, 0x99, 0x13, 0x0c, 0xa4, 0x17, 0x0f, 0xac, 0x19, 0x12, 0xb1, 0x1b,
+ 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xae, 0x1a, 0x11, 0xaf, 0x1a,
+ 0x11, 0xad, 0x1b, 0x11, 0xad, 0x1b, 0x11, 0xae, 0x1b, 0x11, 0xaf, 0x1a,
+ 0x11, 0xaf, 0x1a, 0x11, 0xb0, 0x1a, 0x11, 0xb0, 0x1a, 0x10, 0xae, 0x1a,
+ 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a,
+ 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a,
+ 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a,
+ 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a,
+ 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a,
+ 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xae, 0x1a, 0x10, 0xac, 0x1a,
+ 0x10, 0xac, 0x1a, 0x10, 0xac, 0x1a, 0x10, 0xac, 0x1a, 0x10, 0xac, 0x1a,
+ 0x10, 0xac, 0x1a, 0x10, 0xac, 0x1a, 0x10, 0xac, 0x1a, 0x10, 0xae, 0x1a,
+ 0x11, 0xae, 0x1a, 0x11, 0xad, 0x1b, 0x11, 0xae, 0x1a, 0x10, 0xb0, 0x1a,
+ 0x10, 0xb0, 0x1a, 0x13, 0xb0, 0x1b, 0x13, 0xaf, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x0e, 0xb1, 0x1a, 0x11, 0xbd, 0x1e, 0x18, 0xa3, 0x20, 0x07, 0x44, 0x0a,
+ 0x0a, 0x1e, 0x09, 0x0c, 0x13, 0x0c, 0x0d, 0x0f, 0x0d, 0x0d, 0x0e, 0x0d,
+ 0x0d, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0c, 0x0d, 0x0d, 0x0c,
+ 0x0d, 0x0d, 0x0c, 0x0d, 0x0d, 0x0c, 0x0d, 0x0d, 0x0c, 0x0d, 0x0d, 0x0c,
+ 0x0b, 0x0d, 0x0b, 0x0c, 0x0e, 0x0c, 0x05, 0x0a, 0x05, 0x0a, 0x0e, 0x08,
+ 0x0e, 0x10, 0x0c, 0x18, 0x1b, 0x16, 0x0b, 0x0e, 0x09, 0x02, 0x03, 0x01,
+ 0x04, 0x05, 0x02, 0x0c, 0x0b, 0x0a, 0x09, 0x07, 0x07, 0x09, 0x08, 0x07,
+ 0x0c, 0x0c, 0x0b, 0x09, 0x09, 0x08, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x02, 0x04, 0x0d, 0x08,
+ 0x03, 0x12, 0x06, 0x00, 0x15, 0x01, 0x06, 0x3b, 0x08, 0x19, 0x93, 0x1e,
+ 0x06, 0x98, 0x14, 0x03, 0x99, 0x13, 0x0b, 0xa4, 0x17, 0x0f, 0xad, 0x1a,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1b, 0x12, 0xb1, 0x1b, 0x10, 0xaf, 0x1b,
+ 0x10, 0xaf, 0x1b, 0x10, 0xad, 0x1b, 0x10, 0xad, 0x1b, 0x10, 0xae, 0x1b,
+ 0x10, 0xaf, 0x1b, 0x10, 0xaf, 0x1b, 0x10, 0xb0, 0x1b, 0x10, 0xb0, 0x1b,
+ 0x0f, 0xaf, 0x1b, 0x0f, 0xaf, 0x1b, 0x0f, 0xaf, 0x1b, 0x0f, 0xaf, 0x1b,
+ 0x0f, 0xaf, 0x1b, 0x0f, 0xaf, 0x1b, 0x0f, 0xaf, 0x1b, 0x0f, 0xaf, 0x1b,
+ 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b,
+ 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b,
+ 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b,
+ 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b, 0x11, 0xb0, 0x1b,
+ 0x0f, 0xae, 0x1b, 0x0f, 0xae, 0x1b, 0x0f, 0xae, 0x1b, 0x0f, 0xae, 0x1b,
+ 0x0f, 0xae, 0x1b, 0x0f, 0xae, 0x1b, 0x0f, 0xae, 0x1b, 0x0f, 0xae, 0x1b,
+ 0x10, 0xaf, 0x1b, 0x10, 0xad, 0x1b, 0x12, 0xae, 0x1a, 0x12, 0xae, 0x1b,
+ 0x10, 0xb0, 0x1b, 0x11, 0xb1, 0x1b, 0x12, 0xb0, 0x1b, 0x12, 0xb0, 0x1a,
+ 0x11, 0xb2, 0x1b, 0x0e, 0xb3, 0x1b, 0x11, 0xbe, 0x1f, 0x18, 0xa4, 0x21,
+ 0x07, 0x45, 0x0b, 0x09, 0x1e, 0x09, 0x0c, 0x13, 0x0c, 0x0d, 0x0f, 0x0d,
+ 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0d, 0x0c,
+ 0x0d, 0x0d, 0x0c, 0x0d, 0x0d, 0x0c, 0x0d, 0x0d, 0x0c, 0x0d, 0x0e, 0x0d,
+ 0x0d, 0x0e, 0x0c, 0x0b, 0x0e, 0x0b, 0x0c, 0x0f, 0x0c, 0x05, 0x0a, 0x04,
+ 0x09, 0x0d, 0x09, 0x0d, 0x11, 0x0c, 0x18, 0x1c, 0x16, 0x0a, 0x0e, 0x07,
+ 0x01, 0x02, 0x01, 0x03, 0x04, 0x02, 0x0c, 0x0b, 0x0a, 0x06, 0x05, 0x05,
+ 0x06, 0x05, 0x04, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x03, 0x02, 0x01,
+ 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x03, 0x02,
+ 0x03, 0x0d, 0x08, 0x03, 0x12, 0x05, 0x00, 0x15, 0x01, 0x05, 0x3b, 0x08,
+ 0x18, 0x93, 0x1e, 0x05, 0x98, 0x14, 0x02, 0x99, 0x13, 0x0a, 0xa3, 0x16,
+ 0x0f, 0xad, 0x1a, 0x12, 0xb4, 0x1c, 0x12, 0xb3, 0x1c, 0x12, 0xb3, 0x1c,
+ 0x0f, 0xb0, 0x1b, 0x0f, 0xaf, 0x1b, 0x0f, 0xad, 0x1b, 0x0f, 0xad, 0x1b,
+ 0x0f, 0xae, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb1, 0x1b,
+ 0x0f, 0xb1, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb0, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb0, 0x1b, 0x10, 0xb0, 0x1b, 0x10, 0xae, 0x1b, 0x12, 0xae, 0x1a,
+ 0x12, 0xae, 0x1b, 0x10, 0xb1, 0x1b, 0x11, 0xb2, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1a, 0x11, 0xb3, 0x1b, 0x0f, 0xb4, 0x1b, 0x12, 0xbf, 0x20,
+ 0x18, 0xa5, 0x21, 0x07, 0x45, 0x0b, 0x0a, 0x1f, 0x0a, 0x0d, 0x14, 0x0d,
+ 0x0e, 0x0f, 0x0e, 0x0e, 0x0f, 0x0e, 0x0e, 0x0f, 0x0e, 0x0e, 0x0e, 0x0d,
+ 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d,
+ 0x0e, 0x0e, 0x0d, 0x0d, 0x0e, 0x0c, 0x0b, 0x0f, 0x0a, 0x0c, 0x10, 0x0c,
+ 0x05, 0x0a, 0x04, 0x09, 0x0d, 0x09, 0x0e, 0x12, 0x0c, 0x19, 0x1d, 0x15,
+ 0x0a, 0x0d, 0x05, 0x01, 0x02, 0x00, 0x03, 0x04, 0x02, 0x0b, 0x0a, 0x0a,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0b, 0x0a, 0x09, 0x08, 0x06, 0x05,
+ 0x03, 0x02, 0x01, 0x05, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02,
+ 0x00, 0x03, 0x02, 0x02, 0x0c, 0x07, 0x02, 0x11, 0x04, 0x00, 0x14, 0x01,
+ 0x05, 0x3a, 0x08, 0x18, 0x93, 0x1e, 0x05, 0x98, 0x15, 0x02, 0x99, 0x13,
+ 0x0a, 0xa4, 0x16, 0x0f, 0xae, 0x19, 0x12, 0xb4, 0x1b, 0x12, 0xb3, 0x1b,
+ 0x11, 0xb3, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xae, 0x1b,
+ 0x0f, 0xae, 0x1b, 0x0f, 0xaf, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb1, 0x1b, 0x0f, 0xb1, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b,
+ 0x11, 0xb1, 0x1b, 0x11, 0xb1, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b, 0x0f, 0xb0, 0x1b,
+ 0x0f, 0xb0, 0x1b, 0x10, 0xb0, 0x1b, 0x10, 0xb0, 0x1b, 0x10, 0xae, 0x1b,
+ 0x11, 0xae, 0x1b, 0x11, 0xae, 0x1b, 0x0f, 0xb1, 0x1b, 0x10, 0xb2, 0x1b,
+ 0x12, 0xb1, 0x1b, 0x12, 0xb2, 0x1a, 0x11, 0xb4, 0x1b, 0x0f, 0xb5, 0x1b,
+ 0x12, 0xbf, 0x1f, 0x18, 0xa6, 0x21, 0x07, 0x46, 0x0b, 0x0a, 0x1f, 0x0a,
+ 0x0d, 0x14, 0x0d, 0x0e, 0x0f, 0x0e, 0x0e, 0x0f, 0x0e, 0x0e, 0x0e, 0x0d,
+ 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d,
+ 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0d, 0x0e, 0x0c, 0x0b, 0x0e, 0x0b,
+ 0x0d, 0x0f, 0x0c, 0x05, 0x09, 0x04, 0x09, 0x0d, 0x09, 0x0e, 0x11, 0x0c,
+ 0x19, 0x1c, 0x15, 0x09, 0x0c, 0x05, 0x01, 0x02, 0x00, 0x05, 0x05, 0x02,
+ 0x0d, 0x0b, 0x0b, 0x06, 0x05, 0x05, 0x05, 0x04, 0x04, 0x0d, 0x0c, 0x0b,
+ 0x09, 0x06, 0x06, 0x03, 0x01, 0x01, 0x05, 0x02, 0x01, 0x02, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x02, 0x00, 0x02, 0x02, 0x02, 0x0c, 0x07, 0x01, 0x10, 0x03,
+ 0x00, 0x14, 0x01, 0x05, 0x3a, 0x08, 0x18, 0x94, 0x1e, 0x05, 0x98, 0x15,
+ 0x02, 0x99, 0x13, 0x0a, 0xa4, 0x16, 0x0e, 0xad, 0x19, 0x11, 0xb3, 0x1b,
+ 0x12, 0xb2, 0x1b, 0x11, 0xb2, 0x1b, 0x10, 0xb0, 0x1a, 0x10, 0xb0, 0x1a,
+ 0x10, 0xaf, 0x1a, 0x10, 0xaf, 0x1a, 0x10, 0xaf, 0x1a, 0x10, 0xb0, 0x1a,
+ 0x10, 0xb0, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a,
+ 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a,
+ 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x12, 0xb2, 0x1c,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x10, 0xb1, 0x1a,
+ 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a,
+ 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x0f, 0xb0, 0x1a,
+ 0x10, 0xaf, 0x1a, 0x11, 0xaf, 0x1b, 0x11, 0xaf, 0x1a, 0x0f, 0xb2, 0x1a,
+ 0x10, 0xb2, 0x1a, 0x12, 0xb2, 0x1a, 0x12, 0xb1, 0x1a, 0x11, 0xb4, 0x1b,
+ 0x0f, 0xb5, 0x1a, 0x12, 0xbf, 0x1f, 0x19, 0xa6, 0x22, 0x07, 0x46, 0x0c,
+ 0x0a, 0x1e, 0x09, 0x0c, 0x15, 0x0d, 0x0e, 0x0f, 0x0e, 0x0d, 0x0f, 0x0e,
+ 0x0d, 0x0e, 0x0d, 0x0d, 0x0d, 0x0c, 0x0e, 0x0e, 0x0c, 0x0e, 0x0e, 0x0c,
+ 0x0d, 0x0d, 0x0c, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c,
+ 0x0b, 0x0d, 0x0b, 0x0d, 0x0f, 0x0d, 0x05, 0x08, 0x04, 0x09, 0x0c, 0x09,
+ 0x0d, 0x11, 0x0c, 0x18, 0x1c, 0x15, 0x08, 0x0c, 0x04, 0x02, 0x03, 0x00,
+ 0x06, 0x06, 0x02, 0x0e, 0x0c, 0x0b, 0x08, 0x07, 0x06, 0x07, 0x06, 0x05,
+ 0x0e, 0x0d, 0x0c, 0x09, 0x07, 0x06, 0x02, 0x02, 0x01, 0x04, 0x02, 0x01,
+ 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x02, 0x02, 0x01, 0x0b, 0x06,
+ 0x00, 0x10, 0x03, 0x00, 0x14, 0x01, 0x05, 0x39, 0x08, 0x18, 0x94, 0x1e,
+ 0x05, 0x99, 0x15, 0x02, 0x9a, 0x13, 0x0a, 0xa5, 0x16, 0x0e, 0xad, 0x18,
+ 0x11, 0xb3, 0x1a, 0x12, 0xb2, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a,
+ 0x10, 0xb0, 0x1a, 0x10, 0xb0, 0x1a, 0x10, 0xb0, 0x1a, 0x10, 0xb0, 0x1a,
+ 0x10, 0xb0, 0x1a, 0x10, 0xb0, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a,
+ 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a,
+ 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c,
+ 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c, 0x12, 0xb2, 0x1c,
+ 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a,
+ 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x10, 0xb1, 0x1a, 0x11, 0xb1, 0x1a,
+ 0x10, 0xb0, 0x1a, 0x11, 0xb0, 0x1a, 0x10, 0xaf, 0x1b, 0x10, 0xb0, 0x1a,
+ 0x0f, 0xb2, 0x1a, 0x10, 0xb2, 0x1a, 0x12, 0xb2, 0x1a, 0x13, 0xb2, 0x1a,
+ 0x12, 0xb4, 0x1a, 0x0f, 0xb5, 0x1a, 0x12, 0xbf, 0x1e, 0x19, 0xa6, 0x22,
+ 0x08, 0x47, 0x0c, 0x0a, 0x1e, 0x09, 0x0c, 0x15, 0x0d, 0x0e, 0x0f, 0x0e,
+ 0x0d, 0x0f, 0x0e, 0x0d, 0x0d, 0x0c, 0x0d, 0x0d, 0x0c, 0x0e, 0x0e, 0x0c,
+ 0x0e, 0x0e, 0x0c, 0x0d, 0x0d, 0x0c, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0c,
+ 0x0d, 0x0d, 0x0c, 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0d, 0x04, 0x07, 0x04,
+ 0x08, 0x0b, 0x09, 0x0d, 0x10, 0x0c, 0x18, 0x1b, 0x15, 0x08, 0x0b, 0x04,
+ 0x02, 0x03, 0x00, 0x07, 0x06, 0x03, 0x10, 0x0e, 0x0d, 0x0d, 0x0c, 0x0a,
+ 0x0c, 0x0a, 0x09, 0x11, 0x0f, 0x0e, 0x09, 0x08, 0x07, 0x02, 0x01, 0x01,
+ 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x03, 0x02,
+ 0x01, 0x0c, 0x06, 0x00, 0x10, 0x03, 0x00, 0x14, 0x01, 0x05, 0x38, 0x07,
+ 0x18, 0x94, 0x1e, 0x06, 0x9a, 0x15, 0x03, 0x9b, 0x13, 0x0b, 0xa7, 0x17,
+ 0x0e, 0xaf, 0x19, 0x11, 0xb5, 0x1b, 0x12, 0xb4, 0x1b, 0x10, 0xb3, 0x1a,
+ 0x11, 0xb4, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb2, 0x1b, 0x11, 0xb2, 0x1b,
+ 0x11, 0xb2, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb4, 0x1a,
+ 0x11, 0xb4, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b,
+ 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b,
+ 0x11, 0xb3, 0x1b, 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c,
+ 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c,
+ 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c,
+ 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c, 0x12, 0xb4, 0x1c,
+ 0x12, 0xb4, 0x1c, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b,
+ 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b, 0x11, 0xb3, 0x1b,
+ 0x12, 0xb3, 0x1a, 0x11, 0xb3, 0x1b, 0x12, 0xb3, 0x1b, 0x11, 0xb2, 0x1c,
+ 0x11, 0xb2, 0x1a, 0x10, 0xb4, 0x1b, 0x11, 0xb4, 0x1b, 0x14, 0xb4, 0x1a,
+ 0x14, 0xb4, 0x1b, 0x13, 0xb6, 0x1b, 0x10, 0xb7, 0x1a, 0x12, 0xc1, 0x1f,
+ 0x19, 0xa7, 0x22, 0x09, 0x47, 0x0c, 0x0a, 0x1e, 0x09, 0x0d, 0x15, 0x0d,
+ 0x0e, 0x0f, 0x0e, 0x0e, 0x0f, 0x0e, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d,
+ 0x0e, 0x0e, 0x0c, 0x0e, 0x0e, 0x0c, 0x0d, 0x0d, 0x0c, 0x0e, 0x0e, 0x0d,
+ 0x0e, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0b, 0x0d, 0x0c, 0x0d, 0x0f, 0x0e,
+ 0x04, 0x07, 0x05, 0x09, 0x0b, 0x09, 0x0d, 0x10, 0x0b, 0x17, 0x1b, 0x14,
+ 0x07, 0x0b, 0x04, 0x02, 0x03, 0x00, 0x06, 0x06, 0x03, 0x14, 0x12, 0x11,
+ 0x1c, 0x19, 0x18, 0x1c, 0x19, 0x18, 0x19, 0x17, 0x17, 0x0c, 0x0a, 0x09,
+ 0x03, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x01, 0x01, 0x02, 0x03,
+ 0x00, 0x04, 0x02, 0x00, 0x0b, 0x05, 0x01, 0x10, 0x03, 0x00, 0x14, 0x01,
+ 0x06, 0x39, 0x08, 0x19, 0x95, 0x1f, 0x06, 0x9b, 0x16, 0x04, 0x9c, 0x14,
+ 0x0c, 0xa8, 0x18, 0x0f, 0xb2, 0x1a, 0x12, 0xb7, 0x1c, 0x11, 0xb6, 0x1c,
+ 0x11, 0xb5, 0x1b, 0x12, 0xb6, 0x1c, 0x12, 0xb5, 0x1c, 0x12, 0xb5, 0x1c,
+ 0x12, 0xb5, 0x1c, 0x12, 0xb5, 0x1c, 0x12, 0xb5, 0x1c, 0x12, 0xb5, 0x1c,
+ 0x12, 0xb6, 0x1b, 0x12, 0xb6, 0x1c, 0x12, 0xb6, 0x1c, 0x12, 0xb6, 0x1c,
+ 0x12, 0xb6, 0x1c, 0x12, 0xb6, 0x1c, 0x12, 0xb6, 0x1c, 0x12, 0xb6, 0x1c,
+ 0x12, 0xb6, 0x1c, 0x12, 0xb6, 0x1c, 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c,
+ 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c,
+ 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c,
+ 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c,
+ 0x13, 0xb6, 0x1c, 0x13, 0xb6, 0x1c, 0x12, 0xb4, 0x1c, 0x12, 0xb5, 0x1c,
+ 0x12, 0xb5, 0x1c, 0x12, 0xb5, 0x1c, 0x12, 0xb5, 0x1c, 0x12, 0xb5, 0x1c,
+ 0x12, 0xb5, 0x1c, 0x13, 0xb4, 0x1b, 0x12, 0xb5, 0x1c, 0x13, 0xb5, 0x1c,
+ 0x12, 0xb4, 0x1d, 0x12, 0xb5, 0x1b, 0x11, 0xb7, 0x1c, 0x12, 0xb7, 0x1c,
+ 0x15, 0xb7, 0x1b, 0x15, 0xb7, 0x1c, 0x14, 0xb8, 0x1c, 0x11, 0xb9, 0x1b,
+ 0x13, 0xc4, 0x20, 0x1a, 0xa9, 0x23, 0x0a, 0x48, 0x0b, 0x0b, 0x1f, 0x09,
+ 0x0e, 0x15, 0x0d, 0x0f, 0x10, 0x0f, 0x0f, 0x0e, 0x0f, 0x0f, 0x0f, 0x0e,
+ 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0d,
+ 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0c, 0x0e, 0x0c,
+ 0x0e, 0x10, 0x0f, 0x05, 0x08, 0x05, 0x0a, 0x0c, 0x09, 0x0d, 0x10, 0x0b,
+ 0x16, 0x1a, 0x14, 0x06, 0x0b, 0x04, 0x02, 0x03, 0x00, 0x06, 0x05, 0x03,
+ 0x19, 0x17, 0x15, 0x2b, 0x28, 0x28, 0x2e, 0x2b, 0x2a, 0x24, 0x21, 0x1f,
+ 0x0f, 0x0c, 0x0b, 0x04, 0x02, 0x01, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x01, 0x02, 0x03, 0x00, 0x04, 0x02, 0x00, 0x0b, 0x05, 0x01, 0x10, 0x03,
+ 0x00, 0x14, 0x01, 0x06, 0x38, 0x07, 0x19, 0x96, 0x1e, 0x06, 0x9c, 0x16,
+ 0x06, 0x9e, 0x15, 0x0d, 0xaa, 0x19, 0x10, 0xb3, 0x1b, 0x12, 0xb8, 0x1c,
+ 0x12, 0xb7, 0x1c, 0x12, 0xb7, 0x1b, 0x13, 0xb8, 0x1c, 0x13, 0xb7, 0x1d,
+ 0x13, 0xb6, 0x1d, 0x13, 0xb6, 0x1d, 0x13, 0xb6, 0x1d, 0x13, 0xb7, 0x1d,
+ 0x13, 0xb7, 0x1d, 0x13, 0xb8, 0x1c, 0x13, 0xb8, 0x1c, 0x13, 0xb7, 0x1c,
+ 0x13, 0xb8, 0x1c, 0x13, 0xb8, 0x1c, 0x13, 0xb8, 0x1c, 0x13, 0xb8, 0x1c,
+ 0x13, 0xb8, 0x1c, 0x13, 0xb8, 0x1c, 0x13, 0xb8, 0x1c, 0x13, 0xb7, 0x1c,
+ 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c,
+ 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c,
+ 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c,
+ 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb6, 0x1c,
+ 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c,
+ 0x13, 0xb7, 0x1c, 0x13, 0xb7, 0x1c, 0x13, 0xb6, 0x1c, 0x12, 0xb7, 0x1d,
+ 0x13, 0xb7, 0x1d, 0x13, 0xb6, 0x1d, 0x13, 0xb7, 0x1b, 0x12, 0xb9, 0x1c,
+ 0x13, 0xb8, 0x1c, 0x15, 0xb8, 0x1c, 0x15, 0xb8, 0x1d, 0x14, 0xba, 0x1c,
+ 0x11, 0xbb, 0x1c, 0x13, 0xc6, 0x21, 0x1a, 0xab, 0x23, 0x0a, 0x49, 0x0b,
+ 0x0b, 0x20, 0x09, 0x0f, 0x15, 0x0d, 0x0f, 0x10, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x0f, 0x10, 0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e,
+ 0x0e, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0e,
+ 0x0e, 0x0e, 0x0d, 0x0f, 0x10, 0x0f, 0x05, 0x08, 0x05, 0x0a, 0x0d, 0x0a,
+ 0x0c, 0x0f, 0x0b, 0x16, 0x1a, 0x14, 0x05, 0x0a, 0x04, 0x02, 0x04, 0x00,
+ 0x07, 0x05, 0x04, 0x20, 0x1d, 0x1b, 0x3f, 0x3b, 0x3a, 0x41, 0x3d, 0x3c,
+ 0x29, 0x26, 0x25, 0x0e, 0x0c, 0x0b, 0x04, 0x02, 0x01, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x03, 0x02, 0x00, 0x0b, 0x04,
+ 0x00, 0x10, 0x02, 0x00, 0x14, 0x01, 0x05, 0x38, 0x07, 0x18, 0x95, 0x1e,
+ 0x06, 0x9d, 0x16, 0x06, 0x9f, 0x15, 0x0d, 0xac, 0x19, 0x11, 0xb4, 0x1a,
+ 0x13, 0xb8, 0x1d, 0x12, 0xb8, 0x1d, 0x12, 0xb7, 0x1c, 0x14, 0xb9, 0x1c,
+ 0x14, 0xb8, 0x1e, 0x14, 0xb7, 0x1e, 0x14, 0xb7, 0x1e, 0x14, 0xb7, 0x1e,
+ 0x14, 0xb8, 0x1e, 0x14, 0xb8, 0x1e, 0x14, 0xb9, 0x1c, 0x14, 0xb9, 0x1d,
+ 0x12, 0xb8, 0x1d, 0x12, 0xb8, 0x1d, 0x12, 0xb8, 0x1d, 0x12, 0xb8, 0x1d,
+ 0x12, 0xb8, 0x1d, 0x12, 0xb8, 0x1d, 0x12, 0xb8, 0x1d, 0x12, 0xb8, 0x1d,
+ 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b,
+ 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b,
+ 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b,
+ 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b, 0x12, 0xb7, 0x1b,
+ 0x14, 0xb8, 0x1d, 0x14, 0xb9, 0x1d, 0x14, 0xb9, 0x1d, 0x14, 0xb9, 0x1d,
+ 0x14, 0xb9, 0x1d, 0x14, 0xb9, 0x1d, 0x14, 0xb9, 0x1d, 0x14, 0xb8, 0x1c,
+ 0x12, 0xb7, 0x1d, 0x13, 0xb7, 0x1c, 0x12, 0xb6, 0x1d, 0x12, 0xb7, 0x1c,
+ 0x11, 0xb9, 0x1d, 0x12, 0xb8, 0x1d, 0x14, 0xb8, 0x1c, 0x16, 0xb9, 0x1d,
+ 0x15, 0xbc, 0x1c, 0x12, 0xbd, 0x1c, 0x14, 0xc6, 0x20, 0x1b, 0xab, 0x23,
+ 0x0b, 0x4a, 0x0c, 0x0c, 0x21, 0x0a, 0x10, 0x16, 0x0e, 0x10, 0x0f, 0x10,
+ 0x10, 0x0f, 0x10, 0x10, 0x0e, 0x10, 0x0e, 0x0e, 0x10, 0x0e, 0x0e, 0x0f,
+ 0x0e, 0x0e, 0x0f, 0x0e, 0x0f, 0x0f, 0x0e, 0x0e, 0x0f, 0x0e, 0x0e, 0x0e,
+ 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0e, 0x0f, 0x11, 0x10, 0x05, 0x08, 0x05,
+ 0x0a, 0x0d, 0x0a, 0x0d, 0x10, 0x0b, 0x15, 0x19, 0x14, 0x05, 0x0a, 0x04,
+ 0x03, 0x05, 0x00, 0x09, 0x06, 0x05, 0x25, 0x21, 0x20, 0x4c, 0x47, 0x47,
+ 0x4b, 0x47, 0x46, 0x27, 0x24, 0x23, 0x0a, 0x08, 0x07, 0x04, 0x02, 0x01,
+ 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x03, 0x02,
+ 0x01, 0x0b, 0x03, 0x00, 0x10, 0x01, 0x00, 0x14, 0x00, 0x05, 0x37, 0x07,
+ 0x17, 0x95, 0x1e, 0x06, 0x9e, 0x16, 0x06, 0xa0, 0x15, 0x0d, 0xac, 0x1a,
+ 0x12, 0xb5, 0x1b, 0x14, 0xb9, 0x1d, 0x13, 0xb8, 0x1d, 0x13, 0xb8, 0x1d,
+ 0x14, 0xb9, 0x1c, 0x14, 0xb8, 0x1e, 0x14, 0xb7, 0x1e, 0x14, 0xb7, 0x1e,
+ 0x14, 0xb7, 0x1e, 0x14, 0xb8, 0x1e, 0x14, 0xb8, 0x1e, 0x14, 0xb9, 0x1d,
+ 0x14, 0xb9, 0x1d, 0x12, 0xb8, 0x1d, 0x12, 0xb9, 0x1d, 0x12, 0xb9, 0x1d,
+ 0x12, 0xb9, 0x1d, 0x12, 0xb9, 0x1d, 0x12, 0xb9, 0x1d, 0x12, 0xb9, 0x1d,
+ 0x12, 0xb9, 0x1d, 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b,
+ 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b, 0x12, 0xb7, 0x1b,
+ 0x12, 0xb7, 0x1b, 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b,
+ 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b, 0x13, 0xb7, 0x1b,
+ 0x12, 0xb7, 0x1b, 0x14, 0xba, 0x1d, 0x14, 0xba, 0x1d, 0x14, 0xba, 0x1d,
+ 0x14, 0xba, 0x1d, 0x14, 0xba, 0x1d, 0x14, 0xba, 0x1d, 0x14, 0xba, 0x1d,
+ 0x14, 0xba, 0x1d, 0x12, 0xb8, 0x1d, 0x13, 0xb7, 0x1c, 0x12, 0xb6, 0x1d,
+ 0x12, 0xb7, 0x1c, 0x11, 0xb9, 0x1d, 0x12, 0xb8, 0x1d, 0x14, 0xb8, 0x1d,
+ 0x16, 0xb9, 0x1d, 0x15, 0xbd, 0x1c, 0x12, 0xbe, 0x1c, 0x15, 0xc7, 0x20,
+ 0x1b, 0xac, 0x23, 0x0b, 0x4a, 0x0c, 0x0c, 0x22, 0x0a, 0x10, 0x16, 0x0e,
+ 0x10, 0x10, 0x10, 0x10, 0x0f, 0x10, 0x10, 0x0e, 0x11, 0x0e, 0x0e, 0x10,
+ 0x0e, 0x0f, 0x10, 0x0e, 0x0f, 0x10, 0x0e, 0x0f, 0x10, 0x0e, 0x0f, 0x10,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x0f, 0x0e, 0x0f, 0x0f, 0x10, 0x12, 0x11,
+ 0x05, 0x09, 0x06, 0x0a, 0x0e, 0x0b, 0x0d, 0x10, 0x0c, 0x16, 0x19, 0x15,
+ 0x06, 0x09, 0x05, 0x03, 0x05, 0x00, 0x0a, 0x06, 0x05, 0x28, 0x24, 0x23,
+ 0x52, 0x4e, 0x4e, 0x4f, 0x4b, 0x4b, 0x24, 0x21, 0x21, 0x06, 0x06, 0x05,
+ 0x03, 0x02, 0x01, 0x03, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x03, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x02, 0x02,
+ 0x01, 0x03, 0x02, 0x02, 0x0c, 0x04, 0x00, 0x0e, 0x02, 0x00, 0x13, 0x00,
+ 0x05, 0x36, 0x07, 0x17, 0x94, 0x1e, 0x06, 0x9e, 0x16, 0x07, 0xa2, 0x15,
+ 0x0c, 0xac, 0x19, 0x11, 0xb8, 0x1b, 0x13, 0xbd, 0x1d, 0x12, 0xbb, 0x1d,
+ 0x12, 0xba, 0x1d, 0x13, 0xbb, 0x1d, 0x13, 0xba, 0x1e, 0x13, 0xba, 0x1e,
+ 0x13, 0xba, 0x1e, 0x13, 0xba, 0x1e, 0x14, 0xbb, 0x1d, 0x14, 0xbb, 0x1d,
+ 0x14, 0xbb, 0x1d, 0x14, 0xbb, 0x1d, 0x13, 0xba, 0x1d, 0x13, 0xb9, 0x1d,
+ 0x13, 0xb9, 0x1d, 0x13, 0xb9, 0x1d, 0x13, 0xb9, 0x1d, 0x13, 0xb9, 0x1d,
+ 0x13, 0xb9, 0x1d, 0x13, 0xb9, 0x1d, 0x13, 0xb8, 0x1b, 0x13, 0xb8, 0x1b,
+ 0x13, 0xb8, 0x1b, 0x13, 0xb8, 0x1b, 0x13, 0xb8, 0x1b, 0x13, 0xb8, 0x1b,
+ 0x13, 0xb8, 0x1b, 0x13, 0xb8, 0x1b, 0x13, 0xba, 0x1c, 0x13, 0xba, 0x1c,
+ 0x13, 0xba, 0x1c, 0x13, 0xba, 0x1c, 0x13, 0xba, 0x1c, 0x13, 0xba, 0x1c,
+ 0x13, 0xba, 0x1c, 0x12, 0xba, 0x1c, 0x13, 0xbb, 0x1d, 0x13, 0xbb, 0x1d,
+ 0x13, 0xbb, 0x1d, 0x13, 0xbb, 0x1d, 0x13, 0xbb, 0x1d, 0x13, 0xbb, 0x1d,
+ 0x13, 0xbb, 0x1d, 0x13, 0xbb, 0x1d, 0x11, 0xba, 0x1d, 0x12, 0xba, 0x1c,
+ 0x13, 0xb7, 0x1d, 0x13, 0xb8, 0x1c, 0x12, 0xba, 0x1d, 0x13, 0xba, 0x1d,
+ 0x15, 0xba, 0x1d, 0x16, 0xbb, 0x1d, 0x15, 0xbe, 0x1d, 0x12, 0xc0, 0x1e,
+ 0x15, 0xc9, 0x23, 0x1a, 0xaa, 0x25, 0x0b, 0x4a, 0x0e, 0x0c, 0x21, 0x0b,
+ 0x0f, 0x16, 0x0d, 0x10, 0x11, 0x0f, 0x10, 0x10, 0x0f, 0x10, 0x0e, 0x10,
+ 0x0f, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x0f, 0x0f, 0x0f, 0x0e,
+ 0x11, 0x13, 0x11, 0x07, 0x09, 0x06, 0x0b, 0x0d, 0x0a, 0x0c, 0x0e, 0x0b,
+ 0x16, 0x18, 0x15, 0x08, 0x09, 0x06, 0x03, 0x04, 0x00, 0x08, 0x06, 0x04,
+ 0x21, 0x1e, 0x1d, 0x3f, 0x3c, 0x3b, 0x3c, 0x3a, 0x39, 0x1c, 0x1a, 0x1a,
+ 0x05, 0x04, 0x04, 0x02, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x04, 0x01, 0x03, 0x02, 0x01, 0x01,
+ 0x00, 0x02, 0x01, 0x01, 0x04, 0x01, 0x04, 0x0e, 0x06, 0x01, 0x0d, 0x01,
+ 0x00, 0x12, 0x00, 0x05, 0x33, 0x07, 0x17, 0x94, 0x1f, 0x06, 0x9e, 0x16,
+ 0x07, 0xa4, 0x15, 0x0b, 0xac, 0x18, 0x11, 0xbb, 0x1c, 0x14, 0xc0, 0x1e,
+ 0x12, 0xbd, 0x1c, 0x12, 0xbd, 0x1c, 0x13, 0xbd, 0x1e, 0x13, 0xbd, 0x1d,
+ 0x13, 0xbc, 0x1d, 0x13, 0xbc, 0x1e, 0x13, 0xbc, 0x1e, 0x13, 0xbd, 0x1d,
+ 0x13, 0xbd, 0x1d, 0x13, 0xbe, 0x1c, 0x13, 0xbe, 0x1c, 0x14, 0xbb, 0x1c,
+ 0x14, 0xb9, 0x1c, 0x14, 0xba, 0x1c, 0x14, 0xba, 0x1c, 0x14, 0xba, 0x1c,
+ 0x14, 0xba, 0x1c, 0x14, 0xba, 0x1c, 0x14, 0xba, 0x1c, 0x14, 0xb9, 0x1c,
+ 0x14, 0xb9, 0x1c, 0x14, 0xb9, 0x1c, 0x14, 0xb9, 0x1c, 0x14, 0xb9, 0x1c,
+ 0x14, 0xb9, 0x1c, 0x14, 0xb9, 0x1c, 0x14, 0xb9, 0x1c, 0x12, 0xbc, 0x1d,
+ 0x12, 0xbc, 0x1d, 0x12, 0xbc, 0x1d, 0x12, 0xbc, 0x1d, 0x12, 0xbc, 0x1d,
+ 0x12, 0xbc, 0x1d, 0x12, 0xbc, 0x1d, 0x12, 0xbc, 0x1d, 0x12, 0xbc, 0x1e,
+ 0x12, 0xbc, 0x1e, 0x12, 0xbc, 0x1e, 0x12, 0xbc, 0x1e, 0x12, 0xbc, 0x1e,
+ 0x12, 0xbc, 0x1e, 0x12, 0xbc, 0x1e, 0x12, 0xbc, 0x1e, 0x10, 0xbd, 0x1c,
+ 0x11, 0xbc, 0x1c, 0x14, 0xb9, 0x1d, 0x14, 0xb9, 0x1d, 0x13, 0xbb, 0x1d,
+ 0x14, 0xbb, 0x1c, 0x16, 0xbb, 0x1c, 0x17, 0xbc, 0x1c, 0x15, 0xbf, 0x1e,
+ 0x12, 0xc1, 0x1f, 0x16, 0xcb, 0x26, 0x19, 0xa9, 0x26, 0x0b, 0x4a, 0x10,
+ 0x0c, 0x21, 0x0c, 0x0f, 0x17, 0x0c, 0x10, 0x12, 0x0e, 0x10, 0x10, 0x0e,
+ 0x10, 0x0f, 0x0f, 0x10, 0x0f, 0x0f, 0x10, 0x0f, 0x0f, 0x10, 0x0f, 0x0f,
+ 0x10, 0x10, 0x0f, 0x10, 0x0e, 0x0f, 0x0e, 0x0f, 0x0e, 0x0e, 0x0f, 0x0e,
+ 0x0e, 0x0f, 0x0d, 0x12, 0x13, 0x11, 0x09, 0x0a, 0x07, 0x0a, 0x0c, 0x09,
+ 0x0c, 0x0d, 0x0a, 0x16, 0x18, 0x14, 0x0a, 0x0b, 0x08, 0x02, 0x03, 0x01,
+ 0x05, 0x06, 0x03, 0x17, 0x17, 0x15, 0x24, 0x24, 0x22, 0x24, 0x24, 0x22,
+ 0x13, 0x13, 0x11, 0x03, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x04, 0x01, 0x03,
+ 0x02, 0x01, 0x01, 0x00, 0x02, 0x00, 0x01, 0x04, 0x02, 0x06, 0x0e, 0x07,
+ 0x01, 0x0e, 0x02, 0x01, 0x12, 0x01, 0x05, 0x33, 0x07, 0x17, 0x93, 0x1f,
+ 0x07, 0x9e, 0x16, 0x08, 0xa6, 0x16, 0x0b, 0xac, 0x17, 0x12, 0xbd, 0x1d,
+ 0x15, 0xc3, 0x1e, 0x13, 0xbf, 0x1d, 0x12, 0xbf, 0x1d, 0x13, 0xbe, 0x1e,
+ 0x13, 0xbe, 0x1d, 0x13, 0xbe, 0x1d, 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e,
+ 0x14, 0xbf, 0x1d, 0x14, 0xbf, 0x1d, 0x14, 0xbf, 0x1c, 0x14, 0xbf, 0x1d,
+ 0x15, 0xbe, 0x1d, 0x14, 0xbc, 0x1d, 0x14, 0xbd, 0x1d, 0x14, 0xbd, 0x1d,
+ 0x14, 0xbd, 0x1d, 0x14, 0xbd, 0x1d, 0x14, 0xbd, 0x1d, 0x14, 0xbd, 0x1d,
+ 0x15, 0xbd, 0x1d, 0x15, 0xbd, 0x1d, 0x14, 0xbd, 0x1d, 0x14, 0xbd, 0x1d,
+ 0x14, 0xbd, 0x1d, 0x14, 0xbd, 0x1d, 0x14, 0xbd, 0x1d, 0x14, 0xbc, 0x1d,
+ 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e,
+ 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e,
+ 0x12, 0xbd, 0x1e, 0x12, 0xbd, 0x1e, 0x12, 0xbd, 0x1e, 0x12, 0xbd, 0x1e,
+ 0x12, 0xbd, 0x1e, 0x12, 0xbd, 0x1e, 0x12, 0xbd, 0x1e, 0x12, 0xbd, 0x1e,
+ 0x12, 0xc0, 0x1d, 0x13, 0xbf, 0x1d, 0x15, 0xbc, 0x1e, 0x16, 0xbb, 0x1e,
+ 0x14, 0xbe, 0x1e, 0x15, 0xbe, 0x1d, 0x18, 0xbe, 0x1d, 0x18, 0xbf, 0x1d,
+ 0x15, 0xc0, 0x1f, 0x11, 0xc2, 0x20, 0x16, 0xcc, 0x28, 0x18, 0xa7, 0x27,
+ 0x0b, 0x49, 0x11, 0x0c, 0x21, 0x0d, 0x0f, 0x17, 0x0c, 0x11, 0x13, 0x0e,
+ 0x11, 0x11, 0x0e, 0x11, 0x10, 0x0f, 0x12, 0x10, 0x0f, 0x12, 0x10, 0x0f,
+ 0x12, 0x10, 0x0f, 0x12, 0x11, 0x0f, 0x12, 0x0f, 0x0f, 0x0f, 0x10, 0x0f,
+ 0x0f, 0x10, 0x0f, 0x0f, 0x10, 0x0d, 0x13, 0x14, 0x10, 0x09, 0x0a, 0x06,
+ 0x0a, 0x0b, 0x08, 0x0b, 0x0c, 0x0a, 0x16, 0x16, 0x14, 0x0b, 0x0a, 0x08,
+ 0x02, 0x02, 0x01, 0x04, 0x05, 0x03, 0x10, 0x11, 0x0f, 0x10, 0x11, 0x0f,
+ 0x11, 0x12, 0x10, 0x0c, 0x0c, 0x0b, 0x03, 0x03, 0x02, 0x02, 0x03, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x03, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x04, 0x02,
+ 0x06, 0x0e, 0x08, 0x02, 0x0f, 0x03, 0x01, 0x13, 0x02, 0x06, 0x34, 0x07,
+ 0x17, 0x93, 0x1e, 0x07, 0x9f, 0x16, 0x09, 0xa8, 0x17, 0x0d, 0xad, 0x18,
+ 0x14, 0xbd, 0x1d, 0x15, 0xc2, 0x1f, 0x14, 0xc0, 0x1e, 0x14, 0xc1, 0x1e,
+ 0x14, 0xbf, 0x1e, 0x14, 0xbf, 0x1e, 0x14, 0xbe, 0x1e, 0x14, 0xbe, 0x1e,
+ 0x15, 0xbe, 0x1e, 0x16, 0xbe, 0x1d, 0x15, 0xbe, 0x1d, 0x16, 0xbf, 0x1d,
+ 0x14, 0xc0, 0x1d, 0x14, 0xc2, 0x1f, 0x13, 0xc1, 0x1f, 0x13, 0xc1, 0x1f,
+ 0x13, 0xc1, 0x1f, 0x13, 0xc1, 0x1f, 0x13, 0xc1, 0x1f, 0x13, 0xc1, 0x1f,
+ 0x13, 0xc1, 0x1f, 0x14, 0xc2, 0x1f, 0x14, 0xc2, 0x1f, 0x13, 0xc0, 0x1f,
+ 0x13, 0xc1, 0x1f, 0x13, 0xc1, 0x1f, 0x13, 0xc1, 0x1f, 0x13, 0xc1, 0x1f,
+ 0x14, 0xc1, 0x1f, 0x13, 0xbf, 0x1e, 0x15, 0xbf, 0x1e, 0x15, 0xbf, 0x1e,
+ 0x15, 0xbf, 0x1e, 0x15, 0xbf, 0x1e, 0x15, 0xbf, 0x1e, 0x15, 0xbf, 0x1e,
+ 0x15, 0xbf, 0x1e, 0x13, 0xbd, 0x1e, 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e,
+ 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e, 0x13, 0xbe, 0x1e,
+ 0x13, 0xbe, 0x1e, 0x14, 0xc3, 0x1f, 0x16, 0xc2, 0x1f, 0x17, 0xbe, 0x20,
+ 0x17, 0xbe, 0x20, 0x15, 0xc1, 0x20, 0x17, 0xc2, 0x1f, 0x18, 0xc2, 0x1f,
+ 0x18, 0xc2, 0x1f, 0x15, 0xc0, 0x1e, 0x12, 0xc1, 0x1f, 0x16, 0xcc, 0x27,
+ 0x19, 0xa7, 0x26, 0x0b, 0x49, 0x11, 0x0d, 0x21, 0x0d, 0x10, 0x17, 0x0c,
+ 0x13, 0x13, 0x0d, 0x12, 0x12, 0x0f, 0x12, 0x11, 0x10, 0x12, 0x11, 0x10,
+ 0x12, 0x11, 0x10, 0x12, 0x11, 0x10, 0x12, 0x11, 0x10, 0x12, 0x11, 0x10,
+ 0x11, 0x12, 0x10, 0x11, 0x12, 0x0f, 0x10, 0x11, 0x0d, 0x12, 0x12, 0x10,
+ 0x08, 0x09, 0x05, 0x0a, 0x0b, 0x08, 0x0b, 0x0c, 0x09, 0x13, 0x14, 0x11,
+ 0x09, 0x09, 0x06, 0x01, 0x01, 0x00, 0x03, 0x04, 0x03, 0x0e, 0x0f, 0x0d,
+ 0x0e, 0x0e, 0x0d, 0x0e, 0x0f, 0x0d, 0x09, 0x0a, 0x08, 0x02, 0x02, 0x02,
+ 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01,
+ 0x01, 0x04, 0x02, 0x06, 0x0e, 0x08, 0x02, 0x10, 0x04, 0x02, 0x14, 0x03,
+ 0x06, 0x35, 0x07, 0x17, 0x93, 0x1e, 0x07, 0xa0, 0x17, 0x0a, 0xa9, 0x17,
+ 0x0e, 0xaf, 0x19, 0x15, 0xbe, 0x1e, 0x17, 0xc3, 0x1f, 0x15, 0xc0, 0x1e,
+ 0x16, 0xc2, 0x1f, 0x15, 0xc0, 0x1e, 0x15, 0xbf, 0x1e, 0x15, 0xbe, 0x1e,
+ 0x15, 0xbe, 0x1e, 0x16, 0xbe, 0x1e, 0x17, 0xbf, 0x1e, 0x16, 0xbf, 0x1e,
+ 0x17, 0xbf, 0x1d, 0x15, 0xc0, 0x1e, 0x13, 0xc3, 0x20, 0x12, 0xc4, 0x20,
+ 0x13, 0xc4, 0x20, 0x13, 0xc4, 0x20, 0x13, 0xc4, 0x20, 0x13, 0xc4, 0x20,
+ 0x13, 0xc4, 0x20, 0x12, 0xc4, 0x20, 0x14, 0xc5, 0x21, 0x14, 0xc5, 0x21,
+ 0x12, 0xc3, 0x20, 0x12, 0xc4, 0x20, 0x12, 0xc4, 0x20, 0x12, 0xc4, 0x20,
+ 0x12, 0xc4, 0x20, 0x14, 0xc3, 0x20, 0x14, 0xc0, 0x1e, 0x16, 0xbf, 0x1e,
+ 0x16, 0xbf, 0x1e, 0x16, 0xbf, 0x1e, 0x16, 0xbf, 0x1e, 0x16, 0xbf, 0x1e,
+ 0x16, 0xbf, 0x1e, 0x16, 0xbf, 0x1e, 0x14, 0xbe, 0x1e, 0x14, 0xbf, 0x1e,
+ 0x14, 0xbf, 0x1e, 0x14, 0xbf, 0x1e, 0x14, 0xbf, 0x1e, 0x14, 0xbf, 0x1e,
+ 0x14, 0xbf, 0x1e, 0x14, 0xc0, 0x1e, 0x16, 0xc5, 0x20, 0x18, 0xc5, 0x20,
+ 0x18, 0xc1, 0x22, 0x19, 0xc1, 0x22, 0x16, 0xc4, 0x21, 0x18, 0xc5, 0x20,
+ 0x19, 0xc5, 0x20, 0x18, 0xc4, 0x20, 0x14, 0xc0, 0x1d, 0x11, 0xc2, 0x1f,
+ 0x16, 0xcd, 0x27, 0x19, 0xa7, 0x26, 0x0b, 0x48, 0x10, 0x0e, 0x20, 0x0d,
+ 0x11, 0x17, 0x0c, 0x15, 0x13, 0x0d, 0x13, 0x13, 0x10, 0x13, 0x12, 0x11,
+ 0x13, 0x12, 0x11, 0x13, 0x12, 0x11, 0x13, 0x12, 0x11, 0x13, 0x12, 0x11,
+ 0x13, 0x12, 0x11, 0x12, 0x13, 0x11, 0x12, 0x13, 0x10, 0x10, 0x11, 0x0e,
+ 0x11, 0x11, 0x0f, 0x07, 0x08, 0x05, 0x0a, 0x0b, 0x08, 0x0a, 0x0c, 0x0a,
+ 0x12, 0x13, 0x10, 0x08, 0x08, 0x04, 0x01, 0x01, 0x00, 0x02, 0x03, 0x02,
+ 0x0c, 0x0c, 0x0b, 0x0b, 0x0c, 0x0a, 0x0b, 0x0b, 0x0a, 0x07, 0x08, 0x07,
+ 0x02, 0x02, 0x01, 0x03, 0x04, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x01,
+ 0x00, 0x02, 0x01, 0x01, 0x04, 0x02, 0x06, 0x0e, 0x06, 0x02, 0x0f, 0x03,
+ 0x01, 0x12, 0x02, 0x05, 0x33, 0x07, 0x15, 0x91, 0x1d, 0x07, 0xa1, 0x17,
+ 0x0a, 0xa9, 0x17, 0x0e, 0xb0, 0x19, 0x16, 0xc0, 0x1e, 0x17, 0xc3, 0x20,
+ 0x15, 0xc1, 0x1e, 0x16, 0xc3, 0x1f, 0x17, 0xc2, 0x20, 0x17, 0xc2, 0x20,
+ 0x17, 0xc1, 0x20, 0x17, 0xc1, 0x20, 0x18, 0xc1, 0x20, 0x19, 0xc1, 0x20,
+ 0x18, 0xc1, 0x20, 0x19, 0xc2, 0x1f, 0x17, 0xc2, 0x20, 0x15, 0xc4, 0x20,
+ 0x14, 0xc4, 0x20, 0x15, 0xc4, 0x20, 0x15, 0xc4, 0x20, 0x15, 0xc4, 0x20,
+ 0x15, 0xc4, 0x20, 0x15, 0xc4, 0x20, 0x14, 0xc4, 0x20, 0x16, 0xc5, 0x21,
+ 0x16, 0xc5, 0x21, 0x14, 0xc4, 0x20, 0x14, 0xc5, 0x20, 0x14, 0xc5, 0x20,
+ 0x14, 0xc5, 0x20, 0x14, 0xc5, 0x20, 0x16, 0xc4, 0x20, 0x15, 0xc2, 0x1f,
+ 0x17, 0xc2, 0x1f, 0x17, 0xc2, 0x1f, 0x17, 0xc2, 0x1f, 0x17, 0xc2, 0x1f,
+ 0x17, 0xc2, 0x1f, 0x17, 0xc2, 0x1f, 0x17, 0xc2, 0x1f, 0x16, 0xc2, 0x20,
+ 0x16, 0xc3, 0x20, 0x16, 0xc3, 0x20, 0x16, 0xc3, 0x20, 0x16, 0xc3, 0x20,
+ 0x16, 0xc3, 0x20, 0x16, 0xc3, 0x20, 0x16, 0xc3, 0x20, 0x16, 0xc6, 0x20,
+ 0x18, 0xc6, 0x20, 0x18, 0xc3, 0x22, 0x18, 0xc2, 0x22, 0x16, 0xc5, 0x21,
+ 0x17, 0xc7, 0x20, 0x18, 0xc7, 0x20, 0x18, 0xc6, 0x20, 0x14, 0xc3, 0x1f,
+ 0x13, 0xc5, 0x20, 0x17, 0xcf, 0x29, 0x1a, 0xa9, 0x27, 0x0d, 0x4a, 0x11,
+ 0x0f, 0x22, 0x0d, 0x12, 0x18, 0x0d, 0x15, 0x14, 0x0e, 0x13, 0x12, 0x0f,
+ 0x13, 0x11, 0x11, 0x13, 0x11, 0x11, 0x13, 0x11, 0x11, 0x13, 0x11, 0x11,
+ 0x12, 0x11, 0x10, 0x12, 0x11, 0x10, 0x11, 0x12, 0x10, 0x11, 0x12, 0x10,
+ 0x12, 0x12, 0x10, 0x11, 0x12, 0x10, 0x08, 0x09, 0x06, 0x0b, 0x0c, 0x09,
+ 0x0c, 0x0e, 0x0b, 0x12, 0x13, 0x10, 0x08, 0x09, 0x05, 0x01, 0x02, 0x00,
+ 0x03, 0x04, 0x03, 0x0b, 0x0c, 0x0b, 0x08, 0x08, 0x07, 0x07, 0x08, 0x06,
+ 0x05, 0x05, 0x04, 0x01, 0x02, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x03, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x04, 0x02, 0x05, 0x0d, 0x06,
+ 0x01, 0x0e, 0x02, 0x01, 0x11, 0x02, 0x05, 0x32, 0x06, 0x14, 0x8f, 0x1c,
+ 0x07, 0xa2, 0x17, 0x09, 0xaa, 0x17, 0x0d, 0xb1, 0x1a, 0x16, 0xc1, 0x1f,
+ 0x18, 0xc4, 0x20, 0x16, 0xc2, 0x1f, 0x17, 0xc3, 0x20, 0x18, 0xc4, 0x21,
+ 0x18, 0xc3, 0x21, 0x19, 0xc2, 0x22, 0x19, 0xc2, 0x22, 0x19, 0xc2, 0x22,
+ 0x1a, 0xc3, 0x21, 0x19, 0xc3, 0x21, 0x1a, 0xc3, 0x20, 0x19, 0xc4, 0x21,
+ 0x16, 0xc3, 0x1f, 0x16, 0xc4, 0x1f, 0x16, 0xc4, 0x1f, 0x16, 0xc4, 0x1f,
+ 0x16, 0xc4, 0x1f, 0x16, 0xc4, 0x1f, 0x16, 0xc4, 0x1f, 0x16, 0xc3, 0x1f,
+ 0x17, 0xc5, 0x20, 0x17, 0xc5, 0x20, 0x17, 0xc4, 0x20, 0x17, 0xc4, 0x21,
+ 0x17, 0xc4, 0x21, 0x17, 0xc4, 0x21, 0x17, 0xc4, 0x21, 0x17, 0xc4, 0x21,
+ 0x17, 0xc4, 0x20, 0x18, 0xc4, 0x20, 0x18, 0xc4, 0x20, 0x18, 0xc4, 0x20,
+ 0x18, 0xc4, 0x20, 0x18, 0xc4, 0x20, 0x18, 0xc4, 0x20, 0x18, 0xc4, 0x1f,
+ 0x18, 0xc5, 0x21, 0x18, 0xc6, 0x21, 0x18, 0xc6, 0x21, 0x18, 0xc6, 0x21,
+ 0x18, 0xc6, 0x21, 0x18, 0xc6, 0x21, 0x18, 0xc6, 0x21, 0x18, 0xc6, 0x21,
+ 0x17, 0xc8, 0x1f, 0x18, 0xc7, 0x20, 0x19, 0xc4, 0x21, 0x18, 0xc3, 0x21,
+ 0x16, 0xc5, 0x20, 0x16, 0xc8, 0x20, 0x18, 0xc8, 0x20, 0x18, 0xc6, 0x20,
+ 0x15, 0xc5, 0x20, 0x14, 0xc7, 0x20, 0x18, 0xd1, 0x29, 0x1a, 0xab, 0x28,
+ 0x0e, 0x4b, 0x12, 0x0f, 0x23, 0x0e, 0x13, 0x18, 0x0d, 0x15, 0x14, 0x0e,
+ 0x13, 0x12, 0x0f, 0x12, 0x11, 0x11, 0x12, 0x11, 0x10, 0x12, 0x11, 0x10,
+ 0x12, 0x11, 0x10, 0x12, 0x11, 0x10, 0x12, 0x11, 0x10, 0x11, 0x11, 0x10,
+ 0x11, 0x11, 0x10, 0x13, 0x14, 0x11, 0x11, 0x13, 0x10, 0x09, 0x0a, 0x07,
+ 0x0c, 0x0d, 0x0a, 0x0d, 0x0e, 0x0c, 0x12, 0x13, 0x10, 0x09, 0x0a, 0x05,
+ 0x02, 0x02, 0x01, 0x04, 0x05, 0x03, 0x0b, 0x0c, 0x0a, 0x06, 0x06, 0x05,
+ 0x05, 0x05, 0x04, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x04, 0x02, 0x02, 0x01, 0x03, 0x02, 0x01, 0x04, 0x01,
+ 0x05, 0x0d, 0x05, 0x02, 0x0e, 0x02, 0x00, 0x0f, 0x00, 0x04, 0x30, 0x05,
+ 0x12, 0x8d, 0x1b, 0x06, 0xa3, 0x17, 0x09, 0xaa, 0x17, 0x0d, 0xb3, 0x1a,
+ 0x17, 0xc3, 0x1f, 0x18, 0xc6, 0x21, 0x16, 0xc4, 0x1f, 0x17, 0xc4, 0x20,
+ 0x1a, 0xc6, 0x22, 0x1a, 0xc6, 0x23, 0x1b, 0xc5, 0x24, 0x1b, 0xc5, 0x24,
+ 0x1b, 0xc5, 0x24, 0x1b, 0xc6, 0x23, 0x1b, 0xc6, 0x23, 0x1b, 0xc6, 0x22,
+ 0x1b, 0xc6, 0x22, 0x19, 0xc4, 0x1f, 0x19, 0xc4, 0x1f, 0x19, 0xc4, 0x1f,
+ 0x19, 0xc4, 0x1f, 0x19, 0xc4, 0x1f, 0x19, 0xc4, 0x1f, 0x19, 0xc4, 0x1f,
+ 0x19, 0xc3, 0x1f, 0x1a, 0xc5, 0x20, 0x1a, 0xc5, 0x20, 0x1a, 0xc4, 0x20,
+ 0x1a, 0xc4, 0x21, 0x1a, 0xc4, 0x21, 0x1a, 0xc4, 0x21, 0x1a, 0xc4, 0x21,
+ 0x1a, 0xc4, 0x21, 0x19, 0xc7, 0x21, 0x19, 0xc7, 0x21, 0x19, 0xc7, 0x21,
+ 0x19, 0xc7, 0x21, 0x19, 0xc7, 0x21, 0x19, 0xc7, 0x21, 0x19, 0xc7, 0x21,
+ 0x19, 0xc7, 0x20, 0x1a, 0xc9, 0x22, 0x1a, 0xc9, 0x22, 0x1a, 0xc9, 0x22,
+ 0x1a, 0xc9, 0x22, 0x1a, 0xc9, 0x22, 0x1a, 0xc9, 0x22, 0x1a, 0xc9, 0x22,
+ 0x1a, 0xc8, 0x22, 0x17, 0xc8, 0x20, 0x17, 0xc8, 0x20, 0x18, 0xc5, 0x21,
+ 0x17, 0xc4, 0x21, 0x15, 0xc6, 0x20, 0x15, 0xc9, 0x20, 0x17, 0xc9, 0x20,
+ 0x18, 0xc7, 0x20, 0x15, 0xc8, 0x21, 0x15, 0xcb, 0x21, 0x1a, 0xd4, 0x2a,
+ 0x1c, 0xad, 0x29, 0x0f, 0x4d, 0x12, 0x10, 0x24, 0x0e, 0x14, 0x19, 0x0d,
+ 0x15, 0x14, 0x0f, 0x13, 0x11, 0x0f, 0x12, 0x10, 0x10, 0x12, 0x10, 0x10,
+ 0x12, 0x10, 0x10, 0x12, 0x10, 0x10, 0x11, 0x10, 0x0f, 0x11, 0x10, 0x0f,
+ 0x10, 0x10, 0x0f, 0x11, 0x11, 0x10, 0x14, 0x15, 0x12, 0x12, 0x13, 0x10,
+ 0x0b, 0x0b, 0x08, 0x0d, 0x0e, 0x0b, 0x0f, 0x0f, 0x0d, 0x13, 0x13, 0x10,
+ 0x0a, 0x0a, 0x07, 0x02, 0x03, 0x01, 0x04, 0x06, 0x04, 0x0a, 0x0b, 0x0a,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x03, 0x01, 0x02, 0x01, 0x03, 0x02,
+ 0x02, 0x04, 0x02, 0x07, 0x0e, 0x06, 0x03, 0x0f, 0x03, 0x00, 0x10, 0x01,
+ 0x04, 0x31, 0x06, 0x12, 0x8e, 0x1a, 0x08, 0xa7, 0x18, 0x09, 0xae, 0x17,
+ 0x0d, 0xb7, 0x1b, 0x17, 0xc7, 0x21, 0x18, 0xc9, 0x22, 0x17, 0xc7, 0x21,
+ 0x19, 0xc8, 0x22, 0x1a, 0xc9, 0x22, 0x1a, 0xc8, 0x23, 0x1a, 0xc7, 0x24,
+ 0x1a, 0xc7, 0x24, 0x1a, 0xc7, 0x24, 0x1a, 0xc7, 0x23, 0x1a, 0xc7, 0x23,
+ 0x1a, 0xc8, 0x22, 0x1b, 0xc8, 0x22, 0x1a, 0xc6, 0x20, 0x1b, 0xc6, 0x20,
+ 0x1b, 0xc6, 0x20, 0x1b, 0xc6, 0x20, 0x1b, 0xc6, 0x20, 0x1b, 0xc6, 0x20,
+ 0x1b, 0xc6, 0x20, 0x1b, 0xc5, 0x20, 0x1c, 0xc7, 0x21, 0x1c, 0xc7, 0x21,
+ 0x1c, 0xc7, 0x21, 0x1b, 0xc6, 0x21, 0x1b, 0xc6, 0x21, 0x1b, 0xc6, 0x21,
+ 0x1b, 0xc6, 0x21, 0x1b, 0xc6, 0x21, 0x19, 0xc8, 0x22, 0x19, 0xc8, 0x21,
+ 0x19, 0xc8, 0x21, 0x19, 0xc8, 0x21, 0x19, 0xc8, 0x21, 0x19, 0xc8, 0x21,
+ 0x19, 0xc8, 0x21, 0x19, 0xc8, 0x21, 0x1a, 0xca, 0x22, 0x1a, 0xca, 0x22,
+ 0x1a, 0xca, 0x22, 0x1a, 0xca, 0x22, 0x1a, 0xca, 0x22, 0x1a, 0xca, 0x22,
+ 0x1a, 0xca, 0x22, 0x1a, 0xca, 0x22, 0x19, 0xca, 0x21, 0x19, 0xca, 0x21,
+ 0x1a, 0xc7, 0x22, 0x18, 0xc7, 0x23, 0x15, 0xc9, 0x22, 0x15, 0xcb, 0x21,
+ 0x17, 0xcb, 0x21, 0x18, 0xc9, 0x21, 0x16, 0xca, 0x21, 0x16, 0xcc, 0x23,
+ 0x1c, 0xd5, 0x2b, 0x1d, 0xad, 0x29, 0x0f, 0x4c, 0x12, 0x10, 0x24, 0x0e,
+ 0x14, 0x19, 0x0e, 0x15, 0x14, 0x10, 0x13, 0x12, 0x10, 0x13, 0x11, 0x11,
+ 0x13, 0x11, 0x11, 0x13, 0x11, 0x11, 0x13, 0x11, 0x11, 0x13, 0x11, 0x11,
+ 0x13, 0x11, 0x11, 0x11, 0x12, 0x11, 0x12, 0x12, 0x11, 0x14, 0x15, 0x12,
+ 0x12, 0x12, 0x10, 0x0b, 0x0b, 0x09, 0x0c, 0x0c, 0x0a, 0x0e, 0x0e, 0x0c,
+ 0x11, 0x11, 0x0f, 0x09, 0x0a, 0x06, 0x02, 0x03, 0x01, 0x06, 0x07, 0x05,
+ 0x0a, 0x0c, 0x0a, 0x02, 0x03, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x03, 0x01, 0x02,
+ 0x02, 0x03, 0x01, 0x02, 0x05, 0x02, 0x09, 0x10, 0x09, 0x07, 0x11, 0x07,
+ 0x02, 0x11, 0x03, 0x04, 0x32, 0x07, 0x11, 0x8e, 0x1a, 0x09, 0xab, 0x19,
+ 0x0a, 0xb1, 0x18, 0x0e, 0xbb, 0x1c, 0x18, 0xcc, 0x22, 0x19, 0xcd, 0x23,
+ 0x19, 0xca, 0x22, 0x1a, 0xcc, 0x23, 0x19, 0xca, 0x22, 0x19, 0xc9, 0x22,
+ 0x1a, 0xc8, 0x23, 0x1a, 0xc8, 0x23, 0x1a, 0xc8, 0x23, 0x1a, 0xc8, 0x23,
+ 0x1a, 0xc8, 0x24, 0x1a, 0xc9, 0x22, 0x1a, 0xc9, 0x22, 0x1c, 0xc9, 0x21,
+ 0x1e, 0xc9, 0x21, 0x1d, 0xc9, 0x21, 0x1d, 0xc9, 0x21, 0x1d, 0xc9, 0x21,
+ 0x1d, 0xc9, 0x21, 0x1d, 0xc9, 0x21, 0x1d, 0xc9, 0x21, 0x1d, 0xc9, 0x22,
+ 0x1d, 0xc9, 0x22, 0x1d, 0xc9, 0x22, 0x1c, 0xc9, 0x21, 0x1c, 0xc9, 0x21,
+ 0x1c, 0xc9, 0x21, 0x1c, 0xc9, 0x21, 0x1c, 0xc9, 0x21, 0x1a, 0xc9, 0x23,
+ 0x19, 0xc9, 0x22, 0x19, 0xc9, 0x22, 0x19, 0xc9, 0x22, 0x19, 0xc9, 0x22,
+ 0x19, 0xc9, 0x22, 0x19, 0xc9, 0x22, 0x19, 0xc9, 0x22, 0x19, 0xca, 0x22,
+ 0x19, 0xca, 0x22, 0x19, 0xca, 0x22, 0x19, 0xca, 0x22, 0x19, 0xca, 0x22,
+ 0x19, 0xca, 0x22, 0x19, 0xca, 0x22, 0x19, 0xcb, 0x22, 0x1b, 0xcc, 0x22,
+ 0x1a, 0xcb, 0x22, 0x1b, 0xc9, 0x23, 0x19, 0xc9, 0x24, 0x16, 0xcc, 0x23,
+ 0x16, 0xce, 0x22, 0x18, 0xce, 0x22, 0x19, 0xcc, 0x22, 0x17, 0xcb, 0x22,
+ 0x17, 0xcf, 0x24, 0x1d, 0xd7, 0x2c, 0x1e, 0xae, 0x2a, 0x0f, 0x4d, 0x13,
+ 0x11, 0x25, 0x0f, 0x14, 0x1a, 0x0f, 0x15, 0x15, 0x11, 0x14, 0x13, 0x11,
+ 0x14, 0x12, 0x12, 0x14, 0x12, 0x12, 0x14, 0x12, 0x12, 0x14, 0x12, 0x12,
+ 0x14, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x13, 0x12, 0x12, 0x13, 0x11,
+ 0x14, 0x14, 0x12, 0x12, 0x12, 0x10, 0x0a, 0x0b, 0x09, 0x0b, 0x0b, 0x09,
+ 0x0d, 0x0e, 0x0b, 0x0f, 0x10, 0x0d, 0x08, 0x09, 0x05, 0x02, 0x03, 0x01,
+ 0x06, 0x08, 0x06, 0x0b, 0x0c, 0x0a, 0x03, 0x04, 0x02, 0x00, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x03, 0x00, 0x02, 0x02, 0x02, 0x01, 0x02, 0x05, 0x02, 0x0b, 0x10, 0x0a,
+ 0x09, 0x11, 0x08, 0x02, 0x11, 0x03, 0x03, 0x33, 0x06, 0x0f, 0x8e, 0x19,
+ 0x0a, 0xb0, 0x1a, 0x09, 0xb5, 0x19, 0x0e, 0xbe, 0x1c, 0x19, 0xd0, 0x23,
+ 0x1a, 0xd2, 0x24, 0x1a, 0xcf, 0x23, 0x1b, 0xd0, 0x23, 0x1a, 0xcd, 0x22,
+ 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x23,
+ 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x24, 0x1a, 0xcc, 0x23, 0x1a, 0xcc, 0x23,
+ 0x1c, 0xce, 0x23, 0x1d, 0xce, 0x23, 0x1d, 0xce, 0x23, 0x1d, 0xce, 0x23,
+ 0x1d, 0xce, 0x23, 0x1d, 0xce, 0x23, 0x1d, 0xce, 0x23, 0x1d, 0xce, 0x23,
+ 0x1d, 0xcd, 0x23, 0x1d, 0xcd, 0x23, 0x1d, 0xcd, 0x23, 0x1c, 0xcd, 0x22,
+ 0x1c, 0xcd, 0x22, 0x1c, 0xcd, 0x22, 0x1c, 0xcd, 0x22, 0x1c, 0xcd, 0x22,
+ 0x1a, 0xcc, 0x23, 0x1a, 0xcc, 0x23, 0x1a, 0xcc, 0x23, 0x1a, 0xcc, 0x23,
+ 0x1a, 0xcc, 0x23, 0x1a, 0xcc, 0x23, 0x1a, 0xcc, 0x23, 0x1a, 0xcc, 0x23,
+ 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x23,
+ 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x23, 0x1a, 0xcb, 0x23, 0x1a, 0xcc, 0x22,
+ 0x1d, 0xce, 0x24, 0x1d, 0xcc, 0x23, 0x1c, 0xcc, 0x24, 0x1b, 0xcc, 0x25,
+ 0x18, 0xcf, 0x24, 0x17, 0xd0, 0x23, 0x1a, 0xd0, 0x23, 0x1a, 0xcf, 0x23,
+ 0x18, 0xcc, 0x22, 0x19, 0xd0, 0x25, 0x1f, 0xd7, 0x2d, 0x1e, 0xad, 0x2a,
+ 0x0e, 0x4b, 0x12, 0x10, 0x25, 0x10, 0x14, 0x1a, 0x10, 0x15, 0x16, 0x11,
+ 0x15, 0x14, 0x11, 0x15, 0x13, 0x13, 0x15, 0x13, 0x13, 0x15, 0x13, 0x13,
+ 0x15, 0x13, 0x13, 0x15, 0x13, 0x13, 0x15, 0x13, 0x13, 0x13, 0x14, 0x13,
+ 0x13, 0x13, 0x12, 0x14, 0x14, 0x12, 0x12, 0x13, 0x11, 0x0b, 0x0c, 0x0a,
+ 0x09, 0x0a, 0x07, 0x0d, 0x0e, 0x0b, 0x0e, 0x0f, 0x0c, 0x08, 0x09, 0x04,
+ 0x02, 0x03, 0x01, 0x06, 0x07, 0x05, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x02,
+ 0x01, 0x01, 0x00, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x03, 0x01, 0x02, 0x01, 0x02, 0x00, 0x03, 0x06, 0x02,
+ 0x0a, 0x10, 0x09, 0x09, 0x10, 0x09, 0x02, 0x10, 0x02, 0x03, 0x31, 0x05,
+ 0x0e, 0x8c, 0x17, 0x0b, 0xb5, 0x1a, 0x0a, 0xb6, 0x18, 0x0f, 0xc0, 0x1c,
+ 0x19, 0xd2, 0x23, 0x1a, 0xd5, 0x24, 0x1b, 0xd2, 0x23, 0x1c, 0xd3, 0x24,
+ 0x1b, 0xd0, 0x23, 0x1b, 0xcd, 0x23, 0x1b, 0xcd, 0x24, 0x1b, 0xcd, 0x24,
+ 0x1b, 0xcd, 0x24, 0x1b, 0xcd, 0x24, 0x1b, 0xcd, 0x24, 0x1a, 0xcf, 0x23,
+ 0x1b, 0xcf, 0x23, 0x1a, 0xd1, 0x25, 0x1b, 0xd1, 0x25, 0x1a, 0xd1, 0x25,
+ 0x1a, 0xd1, 0x25, 0x1a, 0xd1, 0x25, 0x1a, 0xd1, 0x25, 0x1a, 0xd1, 0x25,
+ 0x1a, 0xd1, 0x25, 0x1a, 0xd0, 0x24, 0x1a, 0xd0, 0x24, 0x1a, 0xd0, 0x25,
+ 0x1a, 0xd0, 0x24, 0x1a, 0xd0, 0x24, 0x1a, 0xd0, 0x24, 0x1a, 0xd0, 0x24,
+ 0x1b, 0xd0, 0x24, 0x1b, 0xce, 0x24, 0x1b, 0xce, 0x23, 0x1b, 0xce, 0x23,
+ 0x1b, 0xce, 0x23, 0x1b, 0xce, 0x23, 0x1b, 0xce, 0x23, 0x1b, 0xce, 0x23,
+ 0x1b, 0xce, 0x23, 0x1b, 0xcd, 0x23, 0x1b, 0xcd, 0x23, 0x1b, 0xcd, 0x23,
+ 0x1b, 0xcd, 0x23, 0x1b, 0xcd, 0x23, 0x1b, 0xcd, 0x23, 0x1b, 0xcd, 0x23,
+ 0x1c, 0xce, 0x23, 0x1e, 0xd0, 0x24, 0x1f, 0xce, 0x24, 0x1e, 0xce, 0x26,
+ 0x1d, 0xce, 0x26, 0x1a, 0xd1, 0x25, 0x1a, 0xd2, 0x25, 0x1c, 0xd1, 0x23,
+ 0x1d, 0xd0, 0x24, 0x1a, 0xcc, 0x23, 0x1b, 0xcf, 0x26, 0x1f, 0xd6, 0x2d,
+ 0x1d, 0xac, 0x29, 0x0d, 0x4a, 0x11, 0x0f, 0x25, 0x0f, 0x13, 0x1b, 0x10,
+ 0x14, 0x16, 0x11, 0x14, 0x14, 0x11, 0x14, 0x13, 0x12, 0x14, 0x14, 0x12,
+ 0x14, 0x14, 0x12, 0x14, 0x14, 0x12, 0x14, 0x14, 0x12, 0x14, 0x13, 0x12,
+ 0x13, 0x14, 0x12, 0x12, 0x14, 0x13, 0x14, 0x15, 0x12, 0x13, 0x13, 0x11,
+ 0x0d, 0x0d, 0x0b, 0x09, 0x0a, 0x06, 0x0d, 0x0e, 0x0b, 0x0d, 0x0e, 0x0b,
+ 0x08, 0x09, 0x04, 0x03, 0x03, 0x01, 0x05, 0x06, 0x04, 0x09, 0x0a, 0x08,
+ 0x02, 0x03, 0x02, 0x01, 0x01, 0x00, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x01, 0x02, 0x01, 0x01, 0x00,
+ 0x03, 0x07, 0x02, 0x0a, 0x0f, 0x09, 0x0a, 0x11, 0x09, 0x02, 0x10, 0x02,
+ 0x03, 0x2f, 0x05, 0x0d, 0x8c, 0x16, 0x0c, 0xba, 0x1b, 0x0c, 0xba, 0x19,
+ 0x10, 0xc3, 0x1d, 0x1b, 0xd5, 0x24, 0x1d, 0xd8, 0x26, 0x1d, 0xd6, 0x25,
+ 0x1e, 0xd6, 0x25, 0x1e, 0xd4, 0x24, 0x1e, 0xd1, 0x25, 0x1d, 0xd1, 0x25,
+ 0x1d, 0xd1, 0x25, 0x1d, 0xd1, 0x25, 0x1d, 0xd1, 0x25, 0x1d, 0xd1, 0x25,
+ 0x1d, 0xd3, 0x25, 0x1d, 0xd3, 0x25, 0x1a, 0xd5, 0x26, 0x1a, 0xd5, 0x27,
+ 0x1a, 0xd5, 0x27, 0x1a, 0xd5, 0x27, 0x1a, 0xd5, 0x27, 0x1a, 0xd5, 0x27,
+ 0x1a, 0xd5, 0x27, 0x1a, 0xd5, 0x27, 0x1a, 0xd4, 0x26, 0x1a, 0xd4, 0x26,
+ 0x1a, 0xd4, 0x27, 0x1a, 0xd5, 0x26, 0x1a, 0xd5, 0x26, 0x1a, 0xd5, 0x26,
+ 0x1a, 0xd5, 0x26, 0x1c, 0xd4, 0x26, 0x1d, 0xd2, 0x25, 0x1d, 0xd1, 0x25,
+ 0x1d, 0xd1, 0x25, 0x1d, 0xd1, 0x25, 0x1d, 0xd1, 0x25, 0x1d, 0xd1, 0x25,
+ 0x1d, 0xd1, 0x25, 0x1d, 0xd1, 0x25, 0x1d, 0xcf, 0x25, 0x1d, 0xd0, 0x25,
+ 0x1d, 0xd0, 0x25, 0x1d, 0xd0, 0x25, 0x1d, 0xd0, 0x25, 0x1d, 0xd0, 0x25,
+ 0x1d, 0xd0, 0x25, 0x1e, 0xd0, 0x24, 0x20, 0xd3, 0x26, 0x22, 0xd1, 0x26,
+ 0x21, 0xd0, 0x27, 0x20, 0xd0, 0x27, 0x1c, 0xd3, 0x26, 0x1c, 0xd4, 0x27,
+ 0x20, 0xd3, 0x25, 0x20, 0xd3, 0x26, 0x1e, 0xce, 0x24, 0x1e, 0xd1, 0x27,
+ 0x21, 0xd7, 0x2e, 0x1e, 0xab, 0x29, 0x0d, 0x49, 0x11, 0x0f, 0x25, 0x0e,
+ 0x12, 0x1b, 0x10, 0x12, 0x16, 0x11, 0x13, 0x14, 0x11, 0x14, 0x13, 0x12,
+ 0x14, 0x14, 0x12, 0x14, 0x14, 0x12, 0x14, 0x14, 0x12, 0x14, 0x14, 0x12,
+ 0x14, 0x13, 0x12, 0x14, 0x14, 0x12, 0x13, 0x14, 0x13, 0x14, 0x15, 0x12,
+ 0x14, 0x14, 0x12, 0x0e, 0x0f, 0x0c, 0x09, 0x0a, 0x05, 0x0d, 0x0e, 0x0c,
+ 0x0d, 0x0e, 0x0b, 0x08, 0x09, 0x04, 0x03, 0x04, 0x01, 0x05, 0x06, 0x03,
+ 0x07, 0x08, 0x06, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00, 0x03, 0x03, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x03, 0x01, 0x02,
+ 0x01, 0x01, 0x00, 0x02, 0x06, 0x02, 0x0a, 0x0e, 0x09, 0x0c, 0x12, 0x0b,
+ 0x06, 0x12, 0x06, 0x04, 0x30, 0x06, 0x10, 0x8e, 0x17, 0x13, 0xc2, 0x1f,
+ 0x13, 0xc2, 0x1d, 0x17, 0xca, 0x21, 0x21, 0xdb, 0x27, 0x25, 0xde, 0x29,
+ 0x25, 0xdd, 0x28, 0x25, 0xdd, 0x29, 0x27, 0xdc, 0x29, 0x27, 0xda, 0x29,
+ 0x26, 0xda, 0x2a, 0x26, 0xda, 0x2a, 0x26, 0xda, 0x2a, 0x26, 0xda, 0x2a,
+ 0x26, 0xd9, 0x2a, 0x25, 0xdb, 0x29, 0x25, 0xdb, 0x2a, 0x22, 0xdc, 0x2a,
+ 0x22, 0xdb, 0x2b, 0x22, 0xdb, 0x2b, 0x22, 0xdb, 0x2b, 0x22, 0xdb, 0x2b,
+ 0x22, 0xdb, 0x2b, 0x22, 0xdb, 0x2b, 0x22, 0xdb, 0x2b, 0x23, 0xdb, 0x2a,
+ 0x23, 0xdb, 0x2a, 0x22, 0xda, 0x2b, 0x22, 0xdb, 0x2b, 0x22, 0xdb, 0x2b,
+ 0x22, 0xdb, 0x2b, 0x22, 0xdb, 0x2b, 0x23, 0xdb, 0x2b, 0x24, 0xd8, 0x29,
+ 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29,
+ 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29, 0x25, 0xd7, 0x29,
+ 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29,
+ 0x25, 0xd8, 0x29, 0x25, 0xd8, 0x29, 0x27, 0xd8, 0x29, 0x28, 0xd9, 0x2a,
+ 0x2a, 0xd8, 0x2a, 0x28, 0xd7, 0x2b, 0x27, 0xd7, 0x2b, 0x24, 0xd9, 0x2a,
+ 0x24, 0xda, 0x2b, 0x28, 0xda, 0x29, 0x29, 0xd9, 0x2a, 0x27, 0xd6, 0x29,
+ 0x27, 0xd8, 0x2b, 0x29, 0xdd, 0x32, 0x23, 0xae, 0x2c, 0x10, 0x4b, 0x13,
+ 0x11, 0x25, 0x10, 0x13, 0x1d, 0x12, 0x13, 0x17, 0x12, 0x14, 0x15, 0x11,
+ 0x15, 0x13, 0x13, 0x15, 0x14, 0x13, 0x15, 0x14, 0x13, 0x15, 0x14, 0x13,
+ 0x15, 0x14, 0x13, 0x15, 0x13, 0x13, 0x14, 0x15, 0x13, 0x13, 0x14, 0x13,
+ 0x13, 0x13, 0x11, 0x14, 0x14, 0x11, 0x0e, 0x0f, 0x0b, 0x08, 0x09, 0x05,
+ 0x0f, 0x10, 0x0e, 0x0d, 0x0d, 0x0b, 0x07, 0x07, 0x03, 0x04, 0x05, 0x01,
+ 0x07, 0x08, 0x06, 0x08, 0x09, 0x07, 0x02, 0x03, 0x01, 0x01, 0x01, 0x00,
+ 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x03, 0x01, 0x02, 0x01, 0x01, 0x00, 0x03, 0x05, 0x01, 0x0a, 0x0e, 0x08,
+ 0x0e, 0x15, 0x0c, 0x09, 0x14, 0x08, 0x05, 0x31, 0x05, 0x13, 0x90, 0x19,
+ 0x19, 0xc8, 0x23, 0x18, 0xc8, 0x21, 0x1c, 0xcf, 0x23, 0x26, 0xe0, 0x2a,
+ 0x2a, 0xe3, 0x2c, 0x2a, 0xe2, 0x2b, 0x2b, 0xe2, 0x2b, 0x2e, 0xe2, 0x2c,
+ 0x2e, 0xe1, 0x2d, 0x2c, 0xe0, 0x2d, 0x2c, 0xe0, 0x2d, 0x2c, 0xe0, 0x2d,
+ 0x2c, 0xe0, 0x2d, 0x2c, 0xe0, 0x2d, 0x2b, 0xe2, 0x2d, 0x2b, 0xe2, 0x2e,
+ 0x29, 0xe1, 0x2d, 0x29, 0xe0, 0x2e, 0x29, 0xe0, 0x2e, 0x29, 0xe0, 0x2e,
+ 0x29, 0xe0, 0x2e, 0x29, 0xe0, 0x2e, 0x29, 0xe0, 0x2e, 0x29, 0xe0, 0x2e,
+ 0x2a, 0xe1, 0x2e, 0x2a, 0xe1, 0x2e, 0x29, 0xdf, 0x2e, 0x29, 0xdf, 0x2e,
+ 0x29, 0xdf, 0x2e, 0x29, 0xdf, 0x2e, 0x29, 0xdf, 0x2e, 0x2a, 0xdf, 0x2e,
+ 0x2b, 0xdd, 0x2d, 0x2b, 0xde, 0x2d, 0x2b, 0xde, 0x2d, 0x2b, 0xde, 0x2d,
+ 0x2b, 0xde, 0x2d, 0x2b, 0xde, 0x2d, 0x2b, 0xde, 0x2d, 0x2b, 0xdd, 0x2d,
+ 0x2c, 0xde, 0x2d, 0x2c, 0xde, 0x2d, 0x2c, 0xde, 0x2d, 0x2c, 0xde, 0x2d,
+ 0x2c, 0xde, 0x2d, 0x2c, 0xde, 0x2d, 0x2c, 0xde, 0x2d, 0x2d, 0xdd, 0x2c,
+ 0x2f, 0xde, 0x2d, 0x31, 0xdd, 0x2d, 0x2f, 0xdc, 0x2f, 0x2e, 0xdc, 0x2f,
+ 0x2b, 0xde, 0x2e, 0x2b, 0xdf, 0x2e, 0x2e, 0xdf, 0x2c, 0x30, 0xde, 0x2d,
+ 0x2f, 0xdc, 0x2c, 0x2d, 0xde, 0x2f, 0x2f, 0xe2, 0x36, 0x27, 0xb1, 0x2f,
+ 0x11, 0x4c, 0x14, 0x12, 0x26, 0x12, 0x14, 0x1e, 0x14, 0x13, 0x17, 0x13,
+ 0x14, 0x15, 0x12, 0x15, 0x13, 0x13, 0x15, 0x13, 0x13, 0x15, 0x13, 0x13,
+ 0x15, 0x13, 0x13, 0x15, 0x13, 0x13, 0x15, 0x13, 0x13, 0x13, 0x15, 0x13,
+ 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x13, 0x14, 0x11, 0x0e, 0x0f, 0x0b,
+ 0x09, 0x0a, 0x05, 0x10, 0x11, 0x0e, 0x0c, 0x0d, 0x0a, 0x06, 0x07, 0x02,
+ 0x05, 0x06, 0x02, 0x09, 0x0a, 0x08, 0x08, 0x09, 0x07, 0x02, 0x02, 0x01,
+ 0x01, 0x01, 0x00, 0x02, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x02, 0x03, 0x01, 0x02, 0x01, 0x00, 0x00, 0x02, 0x03, 0x01,
+ 0x0a, 0x0d, 0x08, 0x13, 0x18, 0x11, 0x0f, 0x1a, 0x0e, 0x08, 0x34, 0x08,
+ 0x17, 0x93, 0x1b, 0x23, 0xd1, 0x29, 0x22, 0xd3, 0x26, 0x26, 0xd8, 0x28,
+ 0x30, 0xe8, 0x2f, 0x35, 0xe9, 0x31, 0x34, 0xe9, 0x30, 0x36, 0xe9, 0x30,
+ 0x39, 0xeb, 0x32, 0x3a, 0xeb, 0x32, 0x37, 0xea, 0x33, 0x37, 0xea, 0x33,
+ 0x37, 0xea, 0x33, 0x37, 0xea, 0x33, 0x37, 0xea, 0x33, 0x36, 0xeb, 0x32,
+ 0x36, 0xeb, 0x33, 0x34, 0xe8, 0x32, 0x35, 0xe6, 0x33, 0x35, 0xe6, 0x33,
+ 0x35, 0xe6, 0x33, 0x35, 0xe6, 0x33, 0x35, 0xe6, 0x33, 0x35, 0xe6, 0x33,
+ 0x35, 0xe6, 0x33, 0x36, 0xe9, 0x33, 0x36, 0xe9, 0x33, 0x35, 0xe6, 0x33,
+ 0x35, 0xe6, 0x33, 0x35, 0xe6, 0x33, 0x35, 0xe6, 0x33, 0x35, 0xe6, 0x33,
+ 0x35, 0xe6, 0x33, 0x35, 0xe5, 0x32, 0x35, 0xe6, 0x32, 0x35, 0xe6, 0x32,
+ 0x35, 0xe6, 0x32, 0x35, 0xe6, 0x32, 0x35, 0xe6, 0x32, 0x35, 0xe6, 0x32,
+ 0x35, 0xe5, 0x32, 0x36, 0xe7, 0x32, 0x36, 0xe7, 0x32, 0x36, 0xe7, 0x32,
+ 0x36, 0xe7, 0x32, 0x36, 0xe7, 0x32, 0x36, 0xe7, 0x32, 0x36, 0xe7, 0x32,
+ 0x38, 0xe6, 0x32, 0x39, 0xe6, 0x32, 0x3b, 0xe5, 0x32, 0x39, 0xe3, 0x34,
+ 0x37, 0xe4, 0x35, 0x35, 0xe5, 0x33, 0x35, 0xe6, 0x33, 0x39, 0xe6, 0x32,
+ 0x3b, 0xe6, 0x32, 0x3c, 0xe6, 0x32, 0x38, 0xe7, 0x34, 0x38, 0xe8, 0x3b,
+ 0x2d, 0xb5, 0x32, 0x15, 0x4d, 0x16, 0x15, 0x26, 0x13, 0x15, 0x1e, 0x15,
+ 0x14, 0x18, 0x14, 0x16, 0x17, 0x13, 0x17, 0x14, 0x15, 0x17, 0x14, 0x15,
+ 0x17, 0x14, 0x15, 0x17, 0x14, 0x15, 0x17, 0x14, 0x15, 0x17, 0x14, 0x15,
+ 0x15, 0x16, 0x15, 0x14, 0x15, 0x14, 0x12, 0x13, 0x11, 0x13, 0x14, 0x11,
+ 0x0e, 0x0f, 0x0c, 0x0a, 0x0b, 0x06, 0x14, 0x15, 0x12, 0x0d, 0x0e, 0x0b,
+ 0x06, 0x07, 0x03, 0x07, 0x08, 0x04, 0x0c, 0x0d, 0x0c, 0x08, 0x09, 0x08,
+ 0x02, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x03, 0x01, 0x02, 0x02, 0x00, 0x00,
+ 0x04, 0x04, 0x01, 0x0d, 0x10, 0x0b, 0x1c, 0x22, 0x1a, 0x1c, 0x27, 0x1a,
+ 0x13, 0x3f, 0x11, 0x21, 0x99, 0x20, 0x33, 0xdc, 0x33, 0x32, 0xe0, 0x30,
+ 0x36, 0xe3, 0x32, 0x3f, 0xf0, 0x37, 0x43, 0xf1, 0x38, 0x44, 0xf1, 0x38,
+ 0x45, 0xf1, 0x38, 0x47, 0xf2, 0x3a, 0x47, 0xf3, 0x3a, 0x45, 0xf1, 0x3b,
+ 0x45, 0xf1, 0x3b, 0x45, 0xf1, 0x3b, 0x44, 0xf2, 0x3a, 0x44, 0xf2, 0x3a,
+ 0x44, 0xf3, 0x39, 0x45, 0xf3, 0x3a, 0x46, 0xf1, 0x39, 0x47, 0xef, 0x3a,
+ 0x47, 0xef, 0x3a, 0x47, 0xef, 0x3a, 0x47, 0xef, 0x3a, 0x47, 0xef, 0x3a,
+ 0x47, 0xef, 0x3a, 0x47, 0xef, 0x3a, 0x48, 0xf1, 0x3b, 0x48, 0xf1, 0x3b,
+ 0x47, 0xef, 0x3a, 0x47, 0xef, 0x3a, 0x47, 0xef, 0x3a, 0x47, 0xef, 0x3a,
+ 0x47, 0xef, 0x3a, 0x46, 0xef, 0x3a, 0x44, 0xed, 0x38, 0x43, 0xee, 0x39,
+ 0x43, 0xee, 0x39, 0x43, 0xee, 0x39, 0x43, 0xee, 0x39, 0x43, 0xee, 0x39,
+ 0x43, 0xee, 0x39, 0x43, 0xee, 0x39, 0x45, 0xf0, 0x3a, 0x45, 0xf0, 0x3a,
+ 0x45, 0xf0, 0x3a, 0x45, 0xf0, 0x3a, 0x45, 0xf0, 0x3a, 0x45, 0xf0, 0x3a,
+ 0x45, 0xf0, 0x3a, 0x46, 0xef, 0x39, 0x48, 0xef, 0x39, 0x49, 0xef, 0x39,
+ 0x47, 0xed, 0x3b, 0x45, 0xee, 0x3c, 0x43, 0xef, 0x3b, 0x44, 0xef, 0x3a,
+ 0x48, 0xef, 0x39, 0x4b, 0xef, 0x39, 0x4b, 0xef, 0x3a, 0x47, 0xef, 0x3c,
+ 0x44, 0xee, 0x41, 0x36, 0xb8, 0x37, 0x1a, 0x50, 0x19, 0x19, 0x29, 0x16,
+ 0x18, 0x21, 0x18, 0x17, 0x1b, 0x17, 0x19, 0x1a, 0x17, 0x1b, 0x18, 0x18,
+ 0x1a, 0x18, 0x18, 0x1a, 0x18, 0x18, 0x1a, 0x18, 0x18, 0x1a, 0x18, 0x18,
+ 0x1a, 0x18, 0x18, 0x18, 0x19, 0x18, 0x18, 0x19, 0x17, 0x17, 0x18, 0x15,
+ 0x19, 0x1a, 0x17, 0x14, 0x15, 0x12, 0x12, 0x13, 0x0e, 0x21, 0x22, 0x1e,
+ 0x15, 0x17, 0x13, 0x0c, 0x0d, 0x09, 0x0f, 0x10, 0x0c, 0x12, 0x13, 0x11,
+ 0x09, 0x0a, 0x09, 0x02, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x00, 0x05, 0x05, 0x02, 0x10, 0x13, 0x0d, 0x27, 0x2d, 0x24,
+ 0x2b, 0x36, 0x28, 0x1f, 0x4b, 0x1b, 0x2b, 0x9f, 0x26, 0x45, 0xe8, 0x3d,
+ 0x45, 0xef, 0x3a, 0x48, 0xf0, 0x3b, 0x50, 0xf8, 0x40, 0x53, 0xfa, 0x40,
+ 0x55, 0xfa, 0x42, 0x56, 0xfa, 0x41, 0x55, 0xf9, 0x41, 0x55, 0xfa, 0x41,
+ 0x55, 0xf8, 0x42, 0x55, 0xf8, 0x42, 0x55, 0xf9, 0x42, 0x53, 0xfa, 0x41,
+ 0x53, 0xfa, 0x41, 0x53, 0xfa, 0x40, 0x55, 0xfa, 0x41, 0x59, 0xf9, 0x41,
+ 0x5a, 0xf8, 0x43, 0x5a, 0xf8, 0x43, 0x5a, 0xf8, 0x43, 0x5a, 0xf8, 0x43,
+ 0x5a, 0xf8, 0x43, 0x5a, 0xf8, 0x43, 0x5a, 0xf8, 0x43, 0x5b, 0xf9, 0x43,
+ 0x5b, 0xf9, 0x43, 0x5a, 0xf8, 0x43, 0x5a, 0xf8, 0x43, 0x5a, 0xf8, 0x43,
+ 0x5a, 0xf8, 0x43, 0x5a, 0xf8, 0x43, 0x58, 0xf8, 0x42, 0x54, 0xf6, 0x40,
+ 0x52, 0xf6, 0x40, 0x53, 0xf6, 0x40, 0x53, 0xf6, 0x40, 0x53, 0xf6, 0x40,
+ 0x53, 0xf6, 0x40, 0x53, 0xf6, 0x40, 0x53, 0xf6, 0x40, 0x55, 0xf8, 0x42,
+ 0x55, 0xf8, 0x41, 0x55, 0xf8, 0x41, 0x55, 0xf8, 0x41, 0x55, 0xf8, 0x41,
+ 0x55, 0xf8, 0x41, 0x55, 0xf8, 0x42, 0x55, 0xf9, 0x40, 0x58, 0xf9, 0x40,
+ 0x58, 0xf9, 0x41, 0x56, 0xf7, 0x44, 0x54, 0xf8, 0x44, 0x52, 0xf9, 0x42,
+ 0x54, 0xf9, 0x41, 0x58, 0xf9, 0x42, 0x5b, 0xf9, 0x41, 0x5b, 0xf8, 0x43,
+ 0x57, 0xf7, 0x44, 0x50, 0xf3, 0x48, 0x3e, 0xbc, 0x3b, 0x20, 0x53, 0x1c,
+ 0x1d, 0x2b, 0x19, 0x1c, 0x24, 0x1b, 0x1a, 0x1e, 0x1a, 0x1d, 0x1e, 0x1c,
+ 0x1f, 0x1c, 0x1c, 0x1e, 0x1c, 0x1c, 0x1e, 0x1c, 0x1c, 0x1e, 0x1c, 0x1c,
+ 0x1e, 0x1c, 0x1c, 0x1e, 0x1c, 0x1c, 0x1c, 0x1d, 0x1c, 0x1c, 0x1d, 0x1c,
+ 0x1d, 0x1e, 0x1c, 0x1f, 0x20, 0x1d, 0x1b, 0x1c, 0x19, 0x1b, 0x1c, 0x18,
+ 0x2f, 0x30, 0x2d, 0x20, 0x21, 0x1d, 0x14, 0x15, 0x11, 0x18, 0x19, 0x16,
+ 0x17, 0x18, 0x18, 0x0a, 0x0b, 0x0a, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x02, 0x01, 0x02, 0x03, 0x00, 0x00, 0x06, 0x04, 0x02, 0x12, 0x15, 0x0f,
+ 0x31, 0x37, 0x2d, 0x39, 0x44, 0x34, 0x2a, 0x54, 0x23, 0x34, 0xa1, 0x2a,
+ 0x55, 0xef, 0x46, 0x57, 0xf8, 0x44, 0x5a, 0xf8, 0x44, 0x5f, 0xfd, 0x47,
+ 0x61, 0xfe, 0x47, 0x63, 0xff, 0x48, 0x64, 0xfe, 0x47, 0x63, 0xfc, 0x47,
+ 0x63, 0xfd, 0x47, 0x64, 0xfc, 0x48, 0x64, 0xfc, 0x48, 0x63, 0xfd, 0x48,
+ 0x61, 0xfe, 0x47, 0x61, 0xfe, 0x47, 0x61, 0xff, 0x45, 0x62, 0xff, 0x46,
+ 0x66, 0xff, 0x47, 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48,
+ 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48,
+ 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48,
+ 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48, 0x68, 0xfe, 0x48, 0x67, 0xfe, 0x47,
+ 0x63, 0xfc, 0x45, 0x61, 0xfc, 0x46, 0x62, 0xfc, 0x46, 0x62, 0xfc, 0x46,
+ 0x62, 0xfc, 0x46, 0x62, 0xfc, 0x46, 0x62, 0xfc, 0x46, 0x61, 0xfc, 0x46,
+ 0x63, 0xfe, 0x47, 0x63, 0xfe, 0x46, 0x63, 0xfe, 0x46, 0x63, 0xfe, 0x46,
+ 0x63, 0xfe, 0x46, 0x63, 0xfe, 0x46, 0x63, 0xfe, 0x47, 0x63, 0xff, 0x46,
+ 0x65, 0xff, 0x45, 0x65, 0xff, 0x47, 0x63, 0xfd, 0x49, 0x61, 0xfd, 0x49,
+ 0x5f, 0xff, 0x47, 0x61, 0xff, 0x46, 0x66, 0xff, 0x47, 0x69, 0xfe, 0x46,
+ 0x69, 0xfe, 0x48, 0x64, 0xfc, 0x49, 0x5a, 0xf7, 0x4c, 0x46, 0xbf, 0x3f,
+ 0x25, 0x55, 0x1f, 0x22, 0x2e, 0x1c, 0x20, 0x27, 0x1f, 0x1f, 0x22, 0x1f,
+ 0x21, 0x21, 0x20, 0x23, 0x20, 0x20, 0x22, 0x20, 0x1f, 0x21, 0x20, 0x1f,
+ 0x21, 0x20, 0x1f, 0x21, 0x20, 0x1f, 0x22, 0x20, 0x1f, 0x20, 0x21, 0x1f,
+ 0x20, 0x20, 0x1f, 0x21, 0x22, 0x1f, 0x22, 0x24, 0x21, 0x20, 0x21, 0x1e,
+ 0x23, 0x24, 0x21, 0x3e, 0x3f, 0x3c, 0x29, 0x2a, 0x27, 0x1b, 0x1c, 0x19,
+ 0x21, 0x22, 0x1f, 0x1d, 0x1f, 0x1d, 0x0b, 0x0c, 0x0b, 0x02, 0x02, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x04, 0x02, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x01,
+ 0x11, 0x14, 0x0e, 0x35, 0x3a, 0x30, 0x3e, 0x48, 0x38, 0x2c, 0x55, 0x24,
+ 0x36, 0x9e, 0x2a, 0x5c, 0xee, 0x48, 0x60, 0xf8, 0x48, 0x62, 0xf8, 0x47,
+ 0x65, 0xfd, 0x49, 0x66, 0xfb, 0x47, 0x67, 0xfd, 0x47, 0x69, 0xfd, 0x47,
+ 0x6a, 0xfb, 0x48, 0x6a, 0xfc, 0x48, 0x6b, 0xfb, 0x4a, 0x6b, 0xfb, 0x49,
+ 0x6a, 0xfc, 0x49, 0x68, 0xfd, 0x49, 0x68, 0xfd, 0x48, 0x66, 0xff, 0x46,
+ 0x67, 0xff, 0x46, 0x68, 0xff, 0x47, 0x68, 0xff, 0x47, 0x68, 0xff, 0x47,
+ 0x68, 0xff, 0x47, 0x68, 0xff, 0x47, 0x69, 0xff, 0x47, 0x69, 0xff, 0x47,
+ 0x69, 0xff, 0x47, 0x68, 0xff, 0x47, 0x68, 0xff, 0x47, 0x68, 0xff, 0x47,
+ 0x68, 0xff, 0x47, 0x68, 0xff, 0x47, 0x68, 0xff, 0x47, 0x68, 0xff, 0x47,
+ 0x69, 0xff, 0x47, 0x68, 0xfe, 0x46, 0x69, 0xfe, 0x47, 0x68, 0xfe, 0x47,
+ 0x68, 0xfe, 0x47, 0x68, 0xfe, 0x47, 0x68, 0xfe, 0x47, 0x68, 0xfe, 0x47,
+ 0x69, 0xfe, 0x47, 0x68, 0xfe, 0x46, 0x68, 0xfe, 0x46, 0x68, 0xfe, 0x46,
+ 0x68, 0xfe, 0x46, 0x68, 0xfe, 0x46, 0x68, 0xfe, 0x46, 0x68, 0xfe, 0x47,
+ 0x68, 0xfe, 0x46, 0x69, 0xff, 0x45, 0x69, 0xff, 0x46, 0x67, 0xfc, 0x49,
+ 0x66, 0xfc, 0x4a, 0x63, 0xff, 0x48, 0x66, 0xff, 0x47, 0x6b, 0xfe, 0x46,
+ 0x6e, 0xfd, 0x46, 0x6e, 0xfd, 0x47, 0x68, 0xfb, 0x49, 0x5f, 0xf7, 0x4c,
+ 0x4b, 0xc0, 0x3f, 0x28, 0x55, 0x1f, 0x25, 0x2f, 0x1e, 0x24, 0x29, 0x21,
+ 0x22, 0x24, 0x22, 0x23, 0x22, 0x21, 0x24, 0x22, 0x22, 0x24, 0x22, 0x21,
+ 0x23, 0x22, 0x21, 0x23, 0x22, 0x21, 0x23, 0x22, 0x21, 0x24, 0x22, 0x21,
+ 0x22, 0x23, 0x21, 0x21, 0x22, 0x21, 0x20, 0x22, 0x20, 0x22, 0x24, 0x21,
+ 0x21, 0x23, 0x20, 0x27, 0x28, 0x25, 0x46, 0x48, 0x43, 0x2e, 0x30, 0x2c,
+ 0x1d, 0x1e, 0x1b, 0x24, 0x25, 0x22, 0x20, 0x21, 0x1f, 0x0b, 0x0c, 0x0c,
+ 0x01, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+ 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x06, 0x03, 0x05, 0x03, 0x01, 0x01,
+ 0x02, 0x02, 0x01, 0x11, 0x13, 0x0d, 0x38, 0x3d, 0x32, 0x43, 0x4d, 0x3d,
+ 0x30, 0x56, 0x26, 0x38, 0x9a, 0x2a, 0x64, 0xed, 0x4c, 0x68, 0xf8, 0x4d,
+ 0x69, 0xf8, 0x4b, 0x6b, 0xfd, 0x4b, 0x6b, 0xfa, 0x49, 0x6d, 0xfd, 0x48,
+ 0x6e, 0xfb, 0x48, 0x71, 0xfb, 0x49, 0x71, 0xfb, 0x49, 0x72, 0xfb, 0x4b,
+ 0x72, 0xfa, 0x4a, 0x71, 0xfa, 0x4a, 0x6f, 0xfb, 0x4a, 0x6f, 0xfc, 0x4a,
+ 0x6d, 0xfe, 0x48, 0x6d, 0xff, 0x48, 0x6c, 0xff, 0x48, 0x6b, 0xff, 0x47,
+ 0x6b, 0xff, 0x47, 0x6b, 0xff, 0x47, 0x6b, 0xff, 0x47, 0x6c, 0xff, 0x48,
+ 0x6c, 0xff, 0x48, 0x6c, 0xff, 0x48, 0x6b, 0xff, 0x47, 0x6b, 0xff, 0x47,
+ 0x6b, 0xff, 0x47, 0x6b, 0xff, 0x47, 0x6b, 0xff, 0x47, 0x6b, 0xff, 0x47,
+ 0x6b, 0xff, 0x47, 0x6d, 0xff, 0x47, 0x6e, 0xff, 0x48, 0x70, 0xff, 0x49,
+ 0x70, 0xff, 0x49, 0x70, 0xff, 0x49, 0x70, 0xff, 0x49, 0x70, 0xff, 0x49,
+ 0x70, 0xff, 0x49, 0x71, 0xff, 0x49, 0x6f, 0xfe, 0x47, 0x6f, 0xfe, 0x47,
+ 0x6f, 0xfe, 0x47, 0x6f, 0xfe, 0x47, 0x6f, 0xfe, 0x47, 0x6f, 0xfe, 0x47,
+ 0x6f, 0xfe, 0x48, 0x6f, 0xfd, 0x48, 0x6d, 0xff, 0x46, 0x6d, 0xfe, 0x47,
+ 0x6c, 0xfc, 0x4a, 0x6b, 0xfc, 0x4b, 0x68, 0xfe, 0x48, 0x6c, 0xff, 0x48,
+ 0x71, 0xfd, 0x47, 0x74, 0xfc, 0x47, 0x73, 0xfc, 0x48, 0x6c, 0xfb, 0x4a,
+ 0x64, 0xf6, 0x4d, 0x50, 0xbf, 0x3f, 0x2b, 0x56, 0x20, 0x29, 0x31, 0x20,
+ 0x27, 0x2a, 0x24, 0x26, 0x25, 0x24, 0x26, 0x23, 0x23, 0x25, 0x23, 0x23,
+ 0x26, 0x23, 0x23, 0x25, 0x23, 0x23, 0x25, 0x23, 0x23, 0x25, 0x23, 0x23,
+ 0x25, 0x23, 0x23, 0x23, 0x24, 0x23, 0x23, 0x23, 0x22, 0x21, 0x22, 0x20,
+ 0x22, 0x23, 0x21, 0x22, 0x23, 0x20, 0x2b, 0x2c, 0x28, 0x4d, 0x4d, 0x4a,
+ 0x33, 0x33, 0x30, 0x20, 0x21, 0x1e, 0x28, 0x29, 0x26, 0x23, 0x24, 0x22,
+ 0x0c, 0x0c, 0x0b, 0x01, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x01, 0x02, 0x00, 0x03, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x05, 0x02, 0x04,
+ 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x0f, 0x12, 0x0c, 0x3a, 0x3e, 0x33,
+ 0x4b, 0x54, 0x45, 0x35, 0x57, 0x2b, 0x3d, 0x92, 0x2d, 0x6f, 0xec, 0x55,
+ 0x6e, 0xfa, 0x51, 0x6c, 0xfa, 0x4c, 0x6e, 0xfd, 0x4b, 0x71, 0xfb, 0x4b,
+ 0x77, 0xfd, 0x4d, 0x78, 0xfb, 0x4b, 0x79, 0xfc, 0x4c, 0x79, 0xfc, 0x4c,
+ 0x77, 0xfc, 0x4d, 0x78, 0xfc, 0x4d, 0x78, 0xfc, 0x4d, 0x78, 0xfc, 0x4e,
+ 0x78, 0xfc, 0x4e, 0x76, 0xfe, 0x4c, 0x76, 0xff, 0x4c, 0x76, 0xfe, 0x4c,
+ 0x77, 0xfe, 0x4b, 0x77, 0xfe, 0x4b, 0x77, 0xfe, 0x4b, 0x77, 0xfe, 0x4b,
+ 0x77, 0xfe, 0x4c, 0x77, 0xfe, 0x4c, 0x77, 0xfe, 0x4b, 0x78, 0xff, 0x4c,
+ 0x77, 0xfe, 0x4c, 0x77, 0xfe, 0x4c, 0x77, 0xfe, 0x4c, 0x77, 0xfe, 0x4c,
+ 0x77, 0xfe, 0x4c, 0x77, 0xfe, 0x4c, 0x79, 0xff, 0x4c, 0x79, 0xfe, 0x4d,
+ 0x7b, 0xfe, 0x4d, 0x7a, 0xfe, 0x4d, 0x7a, 0xfe, 0x4d, 0x7a, 0xfe, 0x4d,
+ 0x7a, 0xfe, 0x4d, 0x7a, 0xfe, 0x4d, 0x7b, 0xfe, 0x4d, 0x7a, 0xfe, 0x4c,
+ 0x7a, 0xfe, 0x4c, 0x7a, 0xfe, 0x4c, 0x7a, 0xfe, 0x4c, 0x7a, 0xfe, 0x4c,
+ 0x7a, 0xfe, 0x4c, 0x7a, 0xfd, 0x4c, 0x78, 0xfd, 0x4b, 0x75, 0xff, 0x49,
+ 0x74, 0xfe, 0x4b, 0x74, 0xfb, 0x4f, 0x75, 0xfb, 0x4f, 0x73, 0xfe, 0x4c,
+ 0x76, 0xfe, 0x4c, 0x7a, 0xfb, 0x4e, 0x7b, 0xfa, 0x4f, 0x77, 0xfb, 0x4f,
+ 0x72, 0xfa, 0x50, 0x6e, 0xf5, 0x56, 0x53, 0xb9, 0x42, 0x2d, 0x54, 0x23,
+ 0x2b, 0x33, 0x24, 0x28, 0x2c, 0x25, 0x28, 0x28, 0x25, 0x27, 0x25, 0x24,
+ 0x28, 0x25, 0x24, 0x28, 0x25, 0x24, 0x28, 0x25, 0x24, 0x28, 0x25, 0x24,
+ 0x28, 0x25, 0x24, 0x28, 0x25, 0x24, 0x27, 0x26, 0x24, 0x26, 0x25, 0x24,
+ 0x25, 0x24, 0x22, 0x26, 0x25, 0x22, 0x26, 0x25, 0x22, 0x2e, 0x2d, 0x2a,
+ 0x50, 0x4e, 0x4a, 0x36, 0x35, 0x31, 0x29, 0x28, 0x25, 0x31, 0x30, 0x2e,
+ 0x27, 0x27, 0x26, 0x0a, 0x0a, 0x0b, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02,
+ 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x0e, 0x10, 0x0a,
+ 0x3b, 0x3e, 0x36, 0x55, 0x5b, 0x4d, 0x3b, 0x58, 0x30, 0x43, 0x8a, 0x2f,
+ 0x7b, 0xea, 0x5e, 0x74, 0xfd, 0x55, 0x6f, 0xfd, 0x4e, 0x71, 0xfe, 0x4b,
+ 0x78, 0xfe, 0x4d, 0x83, 0xfe, 0x52, 0x83, 0xfb, 0x4f, 0x82, 0xfd, 0x4f,
+ 0x81, 0xfe, 0x4e, 0x7e, 0xfe, 0x4f, 0x7f, 0xfe, 0x4f, 0x7f, 0xfe, 0x50,
+ 0x80, 0xfd, 0x52, 0x80, 0xfc, 0x53, 0x7e, 0xfe, 0x51, 0x80, 0xfe, 0x51,
+ 0x83, 0xfd, 0x51, 0x85, 0xfd, 0x51, 0x84, 0xfd, 0x51, 0x84, 0xfd, 0x51,
+ 0x85, 0xfd, 0x51, 0x84, 0xfc, 0x50, 0x84, 0xfc, 0x50, 0x84, 0xfc, 0x50,
+ 0x86, 0xfe, 0x52, 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x51,
+ 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x51,
+ 0x85, 0xfd, 0x51, 0x86, 0xfd, 0x51, 0x86, 0xfd, 0x51, 0x86, 0xfd, 0x51,
+ 0x86, 0xfd, 0x51, 0x86, 0xfd, 0x51, 0x86, 0xfd, 0x51, 0x86, 0xfd, 0x51,
+ 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x51,
+ 0x86, 0xfe, 0x51, 0x86, 0xfe, 0x52, 0x85, 0xfd, 0x51, 0x83, 0xfe, 0x4f,
+ 0x7d, 0xff, 0x4d, 0x7c, 0xfe, 0x4f, 0x7e, 0xfb, 0x54, 0x7f, 0xfb, 0x54,
+ 0x7d, 0xfe, 0x4f, 0x81, 0xfe, 0x51, 0x84, 0xfa, 0x55, 0x83, 0xf9, 0x57,
+ 0x7b, 0xfb, 0x57, 0x78, 0xfa, 0x58, 0x7a, 0xf3, 0x60, 0x58, 0xb1, 0x46,
+ 0x2e, 0x51, 0x25, 0x2c, 0x36, 0x28, 0x29, 0x2f, 0x27, 0x29, 0x2b, 0x26,
+ 0x28, 0x28, 0x25, 0x2a, 0x28, 0x25, 0x2a, 0x28, 0x25, 0x2b, 0x28, 0x25,
+ 0x2b, 0x28, 0x25, 0x2a, 0x28, 0x25, 0x2b, 0x28, 0x25, 0x2b, 0x28, 0x25,
+ 0x2a, 0x28, 0x25, 0x2a, 0x27, 0x24, 0x2b, 0x27, 0x25, 0x2a, 0x27, 0x24,
+ 0x30, 0x2e, 0x2b, 0x51, 0x4d, 0x4b, 0x38, 0x35, 0x33, 0x32, 0x2e, 0x2c,
+ 0x3b, 0x37, 0x37, 0x2c, 0x2b, 0x2a, 0x09, 0x09, 0x09, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
+ 0x0d, 0x0f, 0x09, 0x3a, 0x3d, 0x36, 0x5c, 0x61, 0x55, 0x44, 0x5d, 0x39,
+ 0x43, 0x84, 0x31, 0x7e, 0xe8, 0x63, 0x72, 0xfa, 0x57, 0x6d, 0xfe, 0x50,
+ 0x70, 0xff, 0x4d, 0x76, 0xff, 0x4f, 0x84, 0xfd, 0x55, 0x84, 0xfb, 0x53,
+ 0x80, 0xfd, 0x52, 0x7e, 0xff, 0x50, 0x7b, 0xff, 0x50, 0x7c, 0xff, 0x51,
+ 0x7d, 0xfe, 0x52, 0x80, 0xfc, 0x55, 0x80, 0xfb, 0x56, 0x7e, 0xfd, 0x54,
+ 0x7e, 0xfd, 0x54, 0x81, 0xfd, 0x54, 0x83, 0xfd, 0x54, 0x82, 0xfd, 0x54,
+ 0x82, 0xfd, 0x54, 0x83, 0xfd, 0x54, 0x81, 0xfc, 0x53, 0x81, 0xfc, 0x53,
+ 0x81, 0xfc, 0x53, 0x83, 0xfe, 0x55, 0x83, 0xfd, 0x55, 0x83, 0xfd, 0x55,
+ 0x83, 0xfd, 0x55, 0x83, 0xfd, 0x55, 0x83, 0xfd, 0x55, 0x83, 0xfd, 0x55,
+ 0x83, 0xfe, 0x55, 0x82, 0xfc, 0x54, 0x82, 0xfc, 0x54, 0x82, 0xfc, 0x54,
+ 0x82, 0xfc, 0x54, 0x82, 0xfc, 0x54, 0x82, 0xfc, 0x54, 0x82, 0xfc, 0x54,
+ 0x82, 0xfc, 0x54, 0x83, 0xfe, 0x55, 0x83, 0xfe, 0x55, 0x83, 0xfe, 0x55,
+ 0x83, 0xfe, 0x55, 0x83, 0xfe, 0x55, 0x83, 0xfd, 0x55, 0x82, 0xfc, 0x54,
+ 0x80, 0xfd, 0x52, 0x7b, 0xfe, 0x51, 0x7a, 0xfd, 0x53, 0x7d, 0xf9, 0x58,
+ 0x7e, 0xfa, 0x57, 0x7e, 0xfe, 0x51, 0x7f, 0xfe, 0x52, 0x82, 0xfa, 0x58,
+ 0x80, 0xf9, 0x5a, 0x78, 0xfb, 0x59, 0x75, 0xf9, 0x59, 0x7d, 0xf2, 0x61,
+ 0x59, 0xad, 0x47, 0x32, 0x53, 0x28, 0x31, 0x3a, 0x2b, 0x2e, 0x31, 0x29,
+ 0x2d, 0x2f, 0x29, 0x2d, 0x2c, 0x28, 0x2e, 0x2c, 0x28, 0x2e, 0x2c, 0x28,
+ 0x2f, 0x2c, 0x29, 0x2f, 0x2c, 0x29, 0x2f, 0x2c, 0x29, 0x2f, 0x2c, 0x29,
+ 0x30, 0x2c, 0x29, 0x30, 0x2c, 0x29, 0x30, 0x2b, 0x28, 0x30, 0x2b, 0x29,
+ 0x30, 0x2c, 0x2a, 0x34, 0x30, 0x2e, 0x53, 0x4d, 0x4b, 0x3d, 0x38, 0x36,
+ 0x41, 0x3b, 0x3a, 0x4e, 0x49, 0x49, 0x31, 0x2f, 0x2e, 0x09, 0x09, 0x09,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00,
+ 0x02, 0x03, 0x00, 0x0d, 0x0f, 0x08, 0x39, 0x3b, 0x34, 0x5e, 0x63, 0x57,
+ 0x4b, 0x65, 0x41, 0x3e, 0x83, 0x30, 0x75, 0xe6, 0x61, 0x69, 0xf5, 0x55,
+ 0x67, 0xfd, 0x51, 0x6a, 0xff, 0x51, 0x6f, 0xfe, 0x50, 0x79, 0xfd, 0x55,
+ 0x7a, 0xfa, 0x54, 0x77, 0xfd, 0x51, 0x74, 0xfe, 0x51, 0x71, 0xff, 0x51,
+ 0x72, 0xfe, 0x51, 0x73, 0xfd, 0x52, 0x76, 0xfb, 0x54, 0x77, 0xfa, 0x55,
+ 0x74, 0xfc, 0x53, 0x73, 0xfc, 0x53, 0x72, 0xfd, 0x53, 0x71, 0xfd, 0x53,
+ 0x71, 0xfd, 0x53, 0x71, 0xfd, 0x53, 0x71, 0xfd, 0x53, 0x71, 0xfd, 0x53,
+ 0x71, 0xfd, 0x53, 0x71, 0xfd, 0x53, 0x72, 0xfe, 0x55, 0x72, 0xfd, 0x54,
+ 0x72, 0xfd, 0x54, 0x72, 0xfd, 0x54, 0x72, 0xfd, 0x54, 0x72, 0xfd, 0x54,
+ 0x72, 0xfd, 0x54, 0x72, 0xfd, 0x54, 0x72, 0xfb, 0x53, 0x72, 0xfb, 0x53,
+ 0x72, 0xfb, 0x53, 0x72, 0xfb, 0x53, 0x72, 0xfb, 0x53, 0x72, 0xfb, 0x53,
+ 0x72, 0xfb, 0x53, 0x72, 0xfb, 0x53, 0x73, 0xfd, 0x54, 0x73, 0xfd, 0x54,
+ 0x73, 0xfd, 0x54, 0x73, 0xfd, 0x54, 0x73, 0xfe, 0x54, 0x72, 0xfc, 0x54,
+ 0x72, 0xfb, 0x53, 0x72, 0xfc, 0x52, 0x70, 0xfd, 0x53, 0x70, 0xfb, 0x54,
+ 0x72, 0xf7, 0x58, 0x72, 0xf9, 0x57, 0x71, 0xfe, 0x50, 0x72, 0xff, 0x50,
+ 0x75, 0xfc, 0x54, 0x74, 0xfb, 0x56, 0x6e, 0xfc, 0x55, 0x6c, 0xf8, 0x54,
+ 0x74, 0xf1, 0x5b, 0x58, 0xaf, 0x44, 0x36, 0x59, 0x2a, 0x36, 0x3d, 0x2d,
+ 0x34, 0x34, 0x2b, 0x34, 0x32, 0x2d, 0x32, 0x31, 0x2d, 0x32, 0x31, 0x2d,
+ 0x31, 0x31, 0x2d, 0x32, 0x31, 0x2e, 0x33, 0x31, 0x2e, 0x34, 0x31, 0x2e,
+ 0x34, 0x31, 0x2e, 0x34, 0x31, 0x2e, 0x34, 0x31, 0x2e, 0x33, 0x30, 0x2d,
+ 0x33, 0x30, 0x2d, 0x35, 0x32, 0x2f, 0x37, 0x34, 0x31, 0x54, 0x4f, 0x4c,
+ 0x41, 0x3c, 0x3a, 0x4e, 0x49, 0x47, 0x60, 0x5c, 0x5b, 0x33, 0x32, 0x31,
+ 0x0a, 0x0a, 0x0a, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x00, 0x03, 0x03, 0x00, 0x0d, 0x0e, 0x08, 0x35, 0x38, 0x31,
+ 0x5c, 0x61, 0x55, 0x4c, 0x68, 0x44, 0x37, 0x81, 0x2e, 0x6b, 0xe5, 0x5e,
+ 0x60, 0xf3, 0x53, 0x61, 0xfc, 0x52, 0x63, 0xff, 0x52, 0x65, 0xfd, 0x50,
+ 0x6d, 0xfc, 0x53, 0x70, 0xfb, 0x53, 0x6c, 0xfc, 0x51, 0x69, 0xfd, 0x50,
+ 0x66, 0xff, 0x50, 0x66, 0xfe, 0x50, 0x67, 0xfd, 0x51, 0x6b, 0xfb, 0x53,
+ 0x6d, 0xfa, 0x53, 0x69, 0xfb, 0x52, 0x67, 0xfb, 0x52, 0x63, 0xfe, 0x52,
+ 0x61, 0xfe, 0x52, 0x61, 0xfe, 0x52, 0x61, 0xfe, 0x52, 0x61, 0xfe, 0x52,
+ 0x61, 0xfe, 0x52, 0x61, 0xfe, 0x52, 0x61, 0xfe, 0x52, 0x61, 0xfd, 0x52,
+ 0x61, 0xfd, 0x52, 0x61, 0xfd, 0x52, 0x61, 0xfd, 0x52, 0x61, 0xfd, 0x52,
+ 0x61, 0xfd, 0x52, 0x61, 0xfd, 0x52, 0x61, 0xfd, 0x52, 0x62, 0xfb, 0x51,
+ 0x62, 0xfb, 0x51, 0x62, 0xfb, 0x51, 0x62, 0xfb, 0x51, 0x62, 0xfb, 0x51,
+ 0x62, 0xfb, 0x51, 0x62, 0xfb, 0x51, 0x62, 0xfb, 0x51, 0x63, 0xfd, 0x52,
+ 0x63, 0xfd, 0x52, 0x63, 0xfd, 0x52, 0x63, 0xfd, 0x52, 0x63, 0xfd, 0x52,
+ 0x62, 0xfb, 0x52, 0x62, 0xfb, 0x51, 0x64, 0xfb, 0x51, 0x66, 0xfc, 0x53,
+ 0x66, 0xfa, 0x54, 0x68, 0xf7, 0x57, 0x66, 0xf9, 0x55, 0x66, 0xfe, 0x4e,
+ 0x66, 0xff, 0x4d, 0x68, 0xfe, 0x50, 0x68, 0xfc, 0x52, 0x64, 0xfd, 0x50,
+ 0x62, 0xf7, 0x4e, 0x6b, 0xf0, 0x55, 0x54, 0xaf, 0x41, 0x38, 0x5d, 0x2a,
+ 0x39, 0x3f, 0x2d, 0x37, 0x34, 0x2c, 0x38, 0x33, 0x2f, 0x36, 0x34, 0x30,
+ 0x33, 0x34, 0x30, 0x33, 0x34, 0x30, 0x33, 0x34, 0x30, 0x34, 0x34, 0x30,
+ 0x36, 0x34, 0x30, 0x36, 0x34, 0x30, 0x36, 0x34, 0x30, 0x36, 0x34, 0x30,
+ 0x35, 0x33, 0x30, 0x35, 0x32, 0x2f, 0x38, 0x35, 0x32, 0x39, 0x37, 0x34,
+ 0x53, 0x4f, 0x4c, 0x43, 0x3e, 0x3c, 0x56, 0x51, 0x4f, 0x6b, 0x67, 0x66,
+ 0x33, 0x32, 0x31, 0x0a, 0x0b, 0x0b, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x02, 0x02, 0x00, 0x0a, 0x0b, 0x06,
+ 0x2a, 0x2c, 0x27, 0x49, 0x4e, 0x42, 0x39, 0x56, 0x33, 0x29, 0x7a, 0x25,
+ 0x5c, 0xe5, 0x57, 0x54, 0xf6, 0x50, 0x54, 0xfd, 0x4e, 0x55, 0xff, 0x4f,
+ 0x57, 0xfe, 0x4d, 0x5e, 0xfd, 0x50, 0x5f, 0xfc, 0x4f, 0x5b, 0xfd, 0x4d,
+ 0x59, 0xfe, 0x4c, 0x56, 0xff, 0x4c, 0x56, 0xfe, 0x4c, 0x58, 0xfe, 0x4d,
+ 0x5c, 0xfc, 0x4f, 0x5e, 0xfb, 0x50, 0x5b, 0xfd, 0x4e, 0x59, 0xfd, 0x4e,
+ 0x55, 0xfe, 0x4e, 0x54, 0xfe, 0x4e, 0x54, 0xfe, 0x4e, 0x54, 0xfe, 0x4e,
+ 0x54, 0xfe, 0x4e, 0x54, 0xfe, 0x4e, 0x54, 0xfe, 0x4e, 0x54, 0xfe, 0x4e,
+ 0x53, 0xfe, 0x4e, 0x53, 0xfe, 0x4e, 0x53, 0xfe, 0x4e, 0x53, 0xfe, 0x4d,
+ 0x53, 0xfe, 0x4e, 0x53, 0xfe, 0x4e, 0x53, 0xfe, 0x4e, 0x53, 0xfe, 0x4e,
+ 0x55, 0xfd, 0x4e, 0x54, 0xfd, 0x4e, 0x54, 0xfd, 0x4e, 0x54, 0xfd, 0x4e,
+ 0x54, 0xfd, 0x4e, 0x54, 0xfd, 0x4e, 0x54, 0xfd, 0x4e, 0x54, 0xfd, 0x4e,
+ 0x55, 0xfe, 0x4e, 0x55, 0xfe, 0x4e, 0x55, 0xfe, 0x4e, 0x55, 0xfe, 0x4e,
+ 0x55, 0xfe, 0x4e, 0x54, 0xfd, 0x4e, 0x54, 0xfd, 0x4e, 0x57, 0xfd, 0x4e,
+ 0x5a, 0xfd, 0x50, 0x5b, 0xfc, 0x50, 0x5c, 0xf9, 0x52, 0x5a, 0xfb, 0x50,
+ 0x58, 0xfe, 0x49, 0x58, 0xff, 0x49, 0x5b, 0xfe, 0x4c, 0x5c, 0xfd, 0x4d,
+ 0x59, 0xfe, 0x4c, 0x5a, 0xfa, 0x4e, 0x62, 0xf0, 0x53, 0x48, 0xa9, 0x3b,
+ 0x2f, 0x57, 0x25, 0x30, 0x3a, 0x28, 0x30, 0x31, 0x29, 0x31, 0x2f, 0x2c,
+ 0x30, 0x2f, 0x2b, 0x2e, 0x2f, 0x2b, 0x2f, 0x2f, 0x2b, 0x2f, 0x2f, 0x2b,
+ 0x30, 0x2f, 0x2b, 0x31, 0x2f, 0x2b, 0x30, 0x2f, 0x2b, 0x30, 0x2f, 0x2b,
+ 0x30, 0x2f, 0x2b, 0x2f, 0x2d, 0x2a, 0x2e, 0x2d, 0x2a, 0x34, 0x32, 0x2f,
+ 0x37, 0x35, 0x31, 0x4e, 0x4a, 0x47, 0x3b, 0x37, 0x34, 0x49, 0x45, 0x42,
+ 0x59, 0x55, 0x54, 0x2c, 0x2b, 0x2a, 0x09, 0x09, 0x09, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00,
+ 0x07, 0x08, 0x05, 0x21, 0x23, 0x1e, 0x39, 0x3e, 0x33, 0x28, 0x47, 0x24,
+ 0x1e, 0x76, 0x1e, 0x52, 0xe5, 0x53, 0x4b, 0xfa, 0x4e, 0x4a, 0xfe, 0x4b,
+ 0x4a, 0xff, 0x4a, 0x4c, 0xfe, 0x4a, 0x53, 0xfe, 0x4d, 0x53, 0xfd, 0x4c,
+ 0x4f, 0xfe, 0x4a, 0x4d, 0xfe, 0x49, 0x4a, 0xff, 0x48, 0x4a, 0xff, 0x49,
+ 0x4c, 0xff, 0x4a, 0x50, 0xfd, 0x4c, 0x53, 0xfc, 0x4d, 0x50, 0xfe, 0x4b,
+ 0x4f, 0xfe, 0x4b, 0x4c, 0xff, 0x4a, 0x4b, 0xff, 0x4a, 0x4b, 0xff, 0x4a,
+ 0x4b, 0xff, 0x4a, 0x4b, 0xff, 0x4a, 0x4b, 0xff, 0x4b, 0x4b, 0xff, 0x4b,
+ 0x4b, 0xff, 0x4b, 0x4b, 0xfe, 0x4a, 0x4b, 0xfe, 0x4a, 0x4b, 0xfe, 0x4a,
+ 0x4b, 0xfe, 0x4a, 0x4b, 0xfe, 0x4b, 0x4b, 0xfe, 0x4b, 0x4b, 0xfe, 0x4b,
+ 0x4b, 0xff, 0x4b, 0x4c, 0xfe, 0x4b, 0x4b, 0xfe, 0x4b, 0x4b, 0xfe, 0x4b,
+ 0x4b, 0xfe, 0x4b, 0x4b, 0xfe, 0x4b, 0x4b, 0xfe, 0x4b, 0x4b, 0xfe, 0x4b,
+ 0x4b, 0xfe, 0x4b, 0x4c, 0xff, 0x4b, 0x4c, 0xfe, 0x4b, 0x4c, 0xfe, 0x4b,
+ 0x4c, 0xfe, 0x4b, 0x4c, 0xff, 0x4b, 0x4b, 0xfe, 0x4b, 0x4b, 0xfe, 0x4b,
+ 0x4e, 0xfe, 0x4b, 0x52, 0xfe, 0x4c, 0x53, 0xfd, 0x4e, 0x53, 0xfc, 0x4e,
+ 0x51, 0xfd, 0x4b, 0x4f, 0xff, 0x46, 0x4f, 0xff, 0x46, 0x52, 0xff, 0x49,
+ 0x53, 0xfe, 0x4a, 0x51, 0xfe, 0x4a, 0x56, 0xfc, 0x4e, 0x5d, 0xef, 0x53,
+ 0x3f, 0xa3, 0x37, 0x26, 0x52, 0x21, 0x28, 0x36, 0x23, 0x2a, 0x2d, 0x26,
+ 0x2c, 0x2a, 0x29, 0x2b, 0x2a, 0x27, 0x2a, 0x2a, 0x27, 0x2a, 0x2a, 0x27,
+ 0x2a, 0x2a, 0x27, 0x2b, 0x2a, 0x27, 0x2c, 0x2a, 0x27, 0x2b, 0x2a, 0x27,
+ 0x2b, 0x2a, 0x27, 0x2b, 0x2a, 0x27, 0x29, 0x28, 0x25, 0x29, 0x29, 0x26,
+ 0x30, 0x2f, 0x2c, 0x35, 0x33, 0x2f, 0x48, 0x45, 0x42, 0x34, 0x30, 0x2d,
+ 0x3c, 0x39, 0x36, 0x48, 0x45, 0x43, 0x25, 0x25, 0x24, 0x07, 0x08, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x03, 0x01, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x03, 0x04, 0x03, 0x16, 0x17, 0x13, 0x25, 0x28, 0x1f,
+ 0x14, 0x32, 0x11, 0x11, 0x6c, 0x15, 0x42, 0xe0, 0x4a, 0x3f, 0xf9, 0x48,
+ 0x3b, 0xf9, 0x44, 0x3a, 0xf9, 0x42, 0x3c, 0xf9, 0x43, 0x43, 0xf9, 0x47,
+ 0x40, 0xf9, 0x45, 0x3e, 0xfa, 0x43, 0x3c, 0xfa, 0x42, 0x39, 0xfa, 0x42,
+ 0x39, 0xfa, 0x42, 0x3b, 0xfa, 0x43, 0x40, 0xfa, 0x44, 0x42, 0xf9, 0x46,
+ 0x41, 0xfa, 0x44, 0x40, 0xfa, 0x44, 0x3f, 0xfa, 0x43, 0x3f, 0xfa, 0x43,
+ 0x3f, 0xfa, 0x43, 0x3f, 0xfa, 0x44, 0x3f, 0xfa, 0x44, 0x3f, 0xfa, 0x44,
+ 0x3f, 0xfa, 0x44, 0x3f, 0xfa, 0x44, 0x3e, 0xfa, 0x44, 0x3e, 0xfa, 0x44,
+ 0x3e, 0xfa, 0x44, 0x3e, 0xfa, 0x43, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45,
+ 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45,
+ 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45,
+ 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45,
+ 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x45, 0x3e, 0xfa, 0x44,
+ 0x3e, 0xfa, 0x44, 0x40, 0xfa, 0x44, 0x45, 0xfa, 0x45, 0x47, 0xfa, 0x47,
+ 0x46, 0xf9, 0x47, 0x44, 0xfa, 0x44, 0x41, 0xfa, 0x40, 0x41, 0xfa, 0x40,
+ 0x44, 0xfa, 0x43, 0x45, 0xf9, 0x44, 0x45, 0xf9, 0x45, 0x4c, 0xf9, 0x4c,
+ 0x52, 0xea, 0x50, 0x30, 0x97, 0x2f, 0x1b, 0x47, 0x1a, 0x1d, 0x2d, 0x1d,
+ 0x20, 0x26, 0x20, 0x22, 0x23, 0x22, 0x22, 0x22, 0x1f, 0x22, 0x22, 0x1f,
+ 0x23, 0x22, 0x1f, 0x23, 0x22, 0x1f, 0x23, 0x22, 0x1f, 0x23, 0x22, 0x1f,
+ 0x22, 0x22, 0x1f, 0x22, 0x22, 0x1f, 0x22, 0x22, 0x1f, 0x21, 0x20, 0x1d,
+ 0x21, 0x20, 0x1e, 0x29, 0x27, 0x24, 0x2f, 0x2d, 0x29, 0x3f, 0x3d, 0x39,
+ 0x2a, 0x27, 0x23, 0x2b, 0x29, 0x25, 0x30, 0x2d, 0x2c, 0x1b, 0x1c, 0x1b,
+ 0x04, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x03, 0x04, 0x02, 0x11, 0x11, 0x0e,
+ 0x1a, 0x1e, 0x16, 0x0c, 0x27, 0x0a, 0x0b, 0x5a, 0x0f, 0x33, 0xc3, 0x3b,
+ 0x32, 0xde, 0x3b, 0x2c, 0xde, 0x36, 0x29, 0xdd, 0x34, 0x2c, 0xde, 0x36,
+ 0x32, 0xde, 0x39, 0x30, 0xdd, 0x37, 0x2c, 0xdf, 0x36, 0x2b, 0xe0, 0x35,
+ 0x29, 0xe1, 0x35, 0x2a, 0xe0, 0x35, 0x2b, 0xe0, 0x36, 0x2f, 0xe0, 0x37,
+ 0x32, 0xdf, 0x38, 0x31, 0xe1, 0x36, 0x31, 0xe0, 0x36, 0x30, 0xe0, 0x36,
+ 0x30, 0xe0, 0x36, 0x30, 0xe0, 0x36, 0x30, 0xe0, 0x37, 0x30, 0xe0, 0x37,
+ 0x30, 0xe0, 0x37, 0x31, 0xe1, 0x38, 0x31, 0xe1, 0x38, 0x31, 0xe1, 0x37,
+ 0x31, 0xe1, 0x37, 0x31, 0xe1, 0x37, 0x31, 0xe1, 0x37, 0x31, 0xe1, 0x38,
+ 0x31, 0xe1, 0x38, 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39, 0x32, 0xe2, 0x39,
+ 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39,
+ 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39,
+ 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39, 0x31, 0xe2, 0x39, 0x32, 0xe2, 0x39,
+ 0x31, 0xe1, 0x38, 0x31, 0xe1, 0x38, 0x32, 0xe1, 0x38, 0x35, 0xe3, 0x38,
+ 0x36, 0xe3, 0x3a, 0x36, 0xe1, 0x3a, 0x33, 0xe1, 0x38, 0x31, 0xe2, 0x34,
+ 0x31, 0xe1, 0x34, 0x35, 0xe0, 0x37, 0x36, 0xdf, 0x38, 0x34, 0xdd, 0x38,
+ 0x3c, 0xdd, 0x3f, 0x3f, 0xcc, 0x41, 0x21, 0x7c, 0x22, 0x10, 0x36, 0x11,
+ 0x12, 0x20, 0x13, 0x14, 0x1b, 0x17, 0x16, 0x18, 0x19, 0x16, 0x17, 0x16,
+ 0x17, 0x17, 0x14, 0x17, 0x17, 0x14, 0x17, 0x17, 0x14, 0x17, 0x17, 0x14,
+ 0x17, 0x16, 0x14, 0x16, 0x17, 0x14, 0x16, 0x17, 0x14, 0x16, 0x16, 0x14,
+ 0x16, 0x16, 0x14, 0x15, 0x15, 0x14, 0x1b, 0x1a, 0x18, 0x21, 0x20, 0x1c,
+ 0x2e, 0x2c, 0x2a, 0x1d, 0x1b, 0x18, 0x1c, 0x1b, 0x18, 0x1f, 0x1c, 0x1b,
+ 0x15, 0x15, 0x14, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x02, 0x02, 0x01, 0x03, 0x04, 0x02,
+ 0x0c, 0x0d, 0x0b, 0x13, 0x17, 0x10, 0x08, 0x1e, 0x06, 0x08, 0x46, 0x0a,
+ 0x23, 0xa0, 0x29, 0x24, 0xbe, 0x2d, 0x1c, 0xbd, 0x27, 0x18, 0xbc, 0x24,
+ 0x1c, 0xbd, 0x26, 0x21, 0xbe, 0x29, 0x1f, 0xbb, 0x28, 0x1b, 0xc1, 0x27,
+ 0x1a, 0xc2, 0x26, 0x19, 0xc3, 0x27, 0x1a, 0xc3, 0x27, 0x1c, 0xc2, 0x27,
+ 0x1e, 0xc1, 0x28, 0x22, 0xc0, 0x29, 0x20, 0xc2, 0x27, 0x20, 0xc2, 0x27,
+ 0x22, 0xc1, 0x28, 0x22, 0xc1, 0x28, 0x22, 0xc1, 0x27, 0x22, 0xc2, 0x29,
+ 0x22, 0xc2, 0x29, 0x22, 0xc2, 0x28, 0x23, 0xc2, 0x2a, 0x23, 0xc2, 0x2a,
+ 0x23, 0xc3, 0x29, 0x23, 0xc3, 0x29, 0x23, 0xc3, 0x29, 0x23, 0xc4, 0x2a,
+ 0x23, 0xc4, 0x2a, 0x23, 0xc4, 0x2a, 0x24, 0xc5, 0x2b, 0x24, 0xc5, 0x2b,
+ 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b,
+ 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b,
+ 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b, 0x25, 0xc5, 0x2b,
+ 0x25, 0xc5, 0x2b, 0x24, 0xc4, 0x2a, 0x24, 0xc4, 0x2a, 0x24, 0xc4, 0x2a,
+ 0x24, 0xc6, 0x2a, 0x24, 0xc6, 0x2b, 0x24, 0xc4, 0x2c, 0x22, 0xc5, 0x2a,
+ 0x20, 0xc7, 0x27, 0x21, 0xc4, 0x27, 0x24, 0xc2, 0x29, 0x25, 0xbf, 0x2a,
+ 0x22, 0xba, 0x2a, 0x28, 0xbb, 0x31, 0x2b, 0xa8, 0x30, 0x10, 0x5c, 0x14,
+ 0x06, 0x23, 0x07, 0x08, 0x11, 0x09, 0x08, 0x0e, 0x0d, 0x09, 0x0c, 0x0e,
+ 0x09, 0x0b, 0x0a, 0x0a, 0x0b, 0x08, 0x0a, 0x0b, 0x09, 0x0b, 0x0b, 0x09,
+ 0x0b, 0x0b, 0x09, 0x09, 0x0a, 0x08, 0x09, 0x0a, 0x08, 0x0a, 0x0a, 0x08,
+ 0x0a, 0x0a, 0x09, 0x0c, 0x0c, 0x0b, 0x09, 0x09, 0x08, 0x0b, 0x0b, 0x0a,
+ 0x10, 0x10, 0x0f, 0x1b, 0x1a, 0x19, 0x10, 0x0e, 0x0e, 0x0e, 0x0d, 0x0c,
+ 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0e, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x03, 0x01,
+ 0x02, 0x04, 0x01, 0x09, 0x0b, 0x08, 0x11, 0x15, 0x0f, 0x0e, 0x1c, 0x0b,
+ 0x0c, 0x32, 0x0b, 0x1a, 0x6f, 0x1c, 0x1b, 0x8a, 0x20, 0x13, 0x8a, 0x1a,
+ 0x10, 0x8b, 0x18, 0x13, 0x8b, 0x1a, 0x17, 0x8b, 0x1d, 0x15, 0x89, 0x1c,
+ 0x11, 0x8f, 0x1b, 0x10, 0x90, 0x1a, 0x10, 0x92, 0x1b, 0x11, 0x91, 0x1b,
+ 0x13, 0x90, 0x1b, 0x14, 0x8f, 0x1c, 0x17, 0x8e, 0x1c, 0x16, 0x90, 0x1a,
+ 0x16, 0x90, 0x1a, 0x18, 0x90, 0x1c, 0x18, 0x90, 0x1c, 0x18, 0x90, 0x1c,
+ 0x18, 0x91, 0x1d, 0x18, 0x91, 0x1d, 0x18, 0x91, 0x1d, 0x19, 0x92, 0x1e,
+ 0x19, 0x92, 0x1e, 0x1a, 0x93, 0x1f, 0x1a, 0x93, 0x1f, 0x1a, 0x93, 0x1f,
+ 0x1a, 0x94, 0x1f, 0x1a, 0x94, 0x1f, 0x1a, 0x94, 0x1f, 0x1b, 0x95, 0x20,
+ 0x1b, 0x95, 0x20, 0x1d, 0x95, 0x21, 0x1c, 0x95, 0x21, 0x1c, 0x95, 0x21,
+ 0x1c, 0x95, 0x21, 0x1c, 0x95, 0x21, 0x1c, 0x95, 0x21, 0x1c, 0x95, 0x21,
+ 0x1c, 0x95, 0x21, 0x1c, 0x95, 0x21, 0x1c, 0x95, 0x21, 0x1c, 0x95, 0x21,
+ 0x1c, 0x95, 0x21, 0x1d, 0x95, 0x21, 0x1b, 0x95, 0x1f, 0x1b, 0x94, 0x20,
+ 0x1a, 0x94, 0x20, 0x18, 0x96, 0x1f, 0x17, 0x96, 0x1f, 0x18, 0x94, 0x20,
+ 0x16, 0x95, 0x1f, 0x14, 0x97, 0x1d, 0x15, 0x94, 0x1d, 0x19, 0x91, 0x1f,
+ 0x1a, 0x8e, 0x1f, 0x16, 0x8a, 0x1d, 0x19, 0x89, 0x20, 0x1a, 0x7a, 0x1f,
+ 0x09, 0x40, 0x0c, 0x08, 0x19, 0x07, 0x09, 0x0c, 0x09, 0x07, 0x0a, 0x0b,
+ 0x07, 0x09, 0x0b, 0x06, 0x08, 0x08, 0x07, 0x08, 0x06, 0x07, 0x08, 0x07,
+ 0x07, 0x08, 0x06, 0x07, 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x07, 0x06,
+ 0x06, 0x07, 0x06, 0x06, 0x07, 0x07, 0x09, 0x09, 0x09, 0x07, 0x06, 0x06,
+ 0x06, 0x05, 0x05, 0x09, 0x09, 0x08, 0x10, 0x0f, 0x0e, 0x0c, 0x0b, 0x0b,
+ 0x0c, 0x0c, 0x0b, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
+ 0x02, 0x03, 0x01, 0x03, 0x03, 0x01, 0x0b, 0x0b, 0x08, 0x17, 0x19, 0x15,
+ 0x1b, 0x21, 0x18, 0x16, 0x29, 0x13, 0x1b, 0x49, 0x19, 0x1a, 0x5d, 0x1b,
+ 0x14, 0x60, 0x16, 0x14, 0x63, 0x16, 0x15, 0x61, 0x16, 0x18, 0x61, 0x19,
+ 0x19, 0x60, 0x1a, 0x13, 0x63, 0x17, 0x12, 0x64, 0x16, 0x11, 0x66, 0x18,
+ 0x13, 0x65, 0x18, 0x14, 0x64, 0x18, 0x16, 0x62, 0x19, 0x18, 0x62, 0x19,
+ 0x18, 0x64, 0x17, 0x17, 0x65, 0x17, 0x18, 0x66, 0x1a, 0x17, 0x66, 0x1a,
+ 0x17, 0x66, 0x19, 0x18, 0x67, 0x1a, 0x18, 0x67, 0x1a, 0x18, 0x68, 0x1a,
+ 0x18, 0x68, 0x1b, 0x18, 0x68, 0x1b, 0x1a, 0x6a, 0x1d, 0x1a, 0x6a, 0x1c,
+ 0x1a, 0x6a, 0x1c, 0x1b, 0x6b, 0x1d, 0x1b, 0x6b, 0x1d, 0x1b, 0x6b, 0x1d,
+ 0x1b, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e, 0x1c, 0x6c, 0x1f, 0x1b, 0x6c, 0x1e,
+ 0x1b, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e,
+ 0x1b, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e,
+ 0x1b, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e, 0x1c, 0x6c, 0x1e, 0x1b, 0x6c, 0x1e,
+ 0x1b, 0x6b, 0x1d, 0x19, 0x6b, 0x1d, 0x17, 0x6c, 0x1e, 0x16, 0x6b, 0x1d,
+ 0x16, 0x6b, 0x1e, 0x15, 0x6b, 0x1c, 0x14, 0x6c, 0x1b, 0x16, 0x69, 0x1b,
+ 0x19, 0x67, 0x1c, 0x1a, 0x66, 0x1c, 0x16, 0x64, 0x18, 0x14, 0x5f, 0x17,
+ 0x16, 0x57, 0x17, 0x0d, 0x34, 0x0d, 0x13, 0x1c, 0x0e, 0x14, 0x13, 0x11,
+ 0x11, 0x10, 0x11, 0x10, 0x11, 0x11, 0x0f, 0x10, 0x0f, 0x0e, 0x10, 0x0e,
+ 0x0f, 0x10, 0x0f, 0x0f, 0x10, 0x0e, 0x0f, 0x10, 0x0e, 0x0e, 0x0f, 0x0e,
+ 0x0d, 0x0f, 0x0e, 0x0e, 0x0f, 0x0e, 0x0e, 0x0f, 0x0e, 0x10, 0x11, 0x0f,
+ 0x0e, 0x0f, 0x0e, 0x0c, 0x0c, 0x0b, 0x0f, 0x0f, 0x0e, 0x12, 0x11, 0x11,
+ 0x13, 0x12, 0x12, 0x19, 0x17, 0x17, 0x19, 0x18, 0x18, 0x0c, 0x0b, 0x0c,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x02, 0x00, 0x02, 0x03, 0x01, 0x02, 0x03, 0x01, 0x0b, 0x0b, 0x08,
+ 0x1a, 0x1b, 0x18, 0x24, 0x25, 0x21, 0x1d, 0x20, 0x19, 0x1a, 0x27, 0x16,
+ 0x19, 0x36, 0x16, 0x14, 0x39, 0x13, 0x16, 0x3f, 0x14, 0x15, 0x3b, 0x13,
+ 0x18, 0x3a, 0x16, 0x19, 0x3b, 0x17, 0x13, 0x3c, 0x14, 0x12, 0x3d, 0x13,
+ 0x12, 0x3f, 0x15, 0x13, 0x3e, 0x15, 0x14, 0x3d, 0x15, 0x17, 0x3c, 0x16,
+ 0x18, 0x3d, 0x16, 0x18, 0x3d, 0x14, 0x17, 0x3e, 0x14, 0x17, 0x41, 0x16,
+ 0x15, 0x41, 0x16, 0x15, 0x41, 0x16, 0x17, 0x42, 0x17, 0x17, 0x42, 0x17,
+ 0x17, 0x42, 0x17, 0x17, 0x42, 0x18, 0x17, 0x42, 0x18, 0x19, 0x44, 0x1a,
+ 0x19, 0x44, 0x19, 0x19, 0x44, 0x19, 0x1a, 0x45, 0x19, 0x1a, 0x45, 0x19,
+ 0x1a, 0x45, 0x19, 0x1a, 0x46, 0x1a, 0x1a, 0x46, 0x1a, 0x1a, 0x46, 0x1c,
+ 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b,
+ 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b,
+ 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b, 0x1a, 0x46, 0x1b,
+ 0x1a, 0x47, 0x1c, 0x1a, 0x45, 0x1a, 0x17, 0x45, 0x1a, 0x15, 0x45, 0x1b,
+ 0x14, 0x44, 0x1a, 0x15, 0x45, 0x1b, 0x14, 0x44, 0x19, 0x13, 0x45, 0x18,
+ 0x15, 0x42, 0x19, 0x19, 0x41, 0x19, 0x19, 0x42, 0x19, 0x16, 0x43, 0x14,
+ 0x10, 0x3b, 0x0f, 0x11, 0x38, 0x10, 0x11, 0x28, 0x0e, 0x1c, 0x1f, 0x14,
+ 0x1e, 0x17, 0x18, 0x19, 0x14, 0x15, 0x17, 0x15, 0x16, 0x16, 0x15, 0x15,
+ 0x14, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x14, 0x15, 0x13,
+ 0x15, 0x16, 0x14, 0x13, 0x14, 0x14, 0x13, 0x14, 0x14, 0x13, 0x14, 0x14,
+ 0x15, 0x15, 0x14, 0x14, 0x15, 0x14, 0x11, 0x11, 0x11, 0x13, 0x13, 0x12,
+ 0x13, 0x12, 0x11, 0x19, 0x17, 0x17, 0x21, 0x20, 0x1f, 0x22, 0x20, 0x20,
+ 0x0c, 0x0c, 0x0c, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x02, 0x01, 0x02, 0x02, 0x01,
+ 0x08, 0x08, 0x06, 0x16, 0x17, 0x15, 0x1e, 0x1e, 0x1d, 0x19, 0x17, 0x16,
+ 0x13, 0x17, 0x10, 0x12, 0x24, 0x11, 0x0e, 0x28, 0x0d, 0x10, 0x2d, 0x0f,
+ 0x0f, 0x2a, 0x0e, 0x12, 0x28, 0x11, 0x13, 0x29, 0x11, 0x0e, 0x2a, 0x0f,
+ 0x0c, 0x2b, 0x0e, 0x0d, 0x2d, 0x0f, 0x0d, 0x2c, 0x0f, 0x0e, 0x2b, 0x0f,
+ 0x11, 0x2a, 0x10, 0x12, 0x2a, 0x11, 0x12, 0x2b, 0x0f, 0x11, 0x2c, 0x10,
+ 0x11, 0x2d, 0x11, 0x10, 0x2d, 0x11, 0x10, 0x2d, 0x11, 0x11, 0x2e, 0x12,
+ 0x11, 0x2e, 0x12, 0x11, 0x2f, 0x12, 0x11, 0x2f, 0x12, 0x11, 0x2f, 0x12,
+ 0x13, 0x30, 0x14, 0x13, 0x30, 0x13, 0x13, 0x30, 0x13, 0x14, 0x31, 0x13,
+ 0x14, 0x31, 0x13, 0x14, 0x31, 0x14, 0x14, 0x31, 0x14, 0x14, 0x31, 0x14,
+ 0x14, 0x32, 0x16, 0x14, 0x32, 0x15, 0x14, 0x32, 0x15, 0x14, 0x32, 0x15,
+ 0x14, 0x32, 0x15, 0x14, 0x32, 0x15, 0x14, 0x32, 0x15, 0x14, 0x32, 0x15,
+ 0x14, 0x32, 0x15, 0x14, 0x32, 0x15, 0x14, 0x32, 0x15, 0x14, 0x32, 0x15,
+ 0x14, 0x32, 0x15, 0x14, 0x32, 0x16, 0x14, 0x31, 0x14, 0x12, 0x31, 0x14,
+ 0x12, 0x31, 0x16, 0x10, 0x30, 0x15, 0x11, 0x31, 0x14, 0x11, 0x30, 0x13,
+ 0x0f, 0x30, 0x13, 0x12, 0x2e, 0x14, 0x15, 0x2d, 0x14, 0x16, 0x2e, 0x13,
+ 0x13, 0x30, 0x0f, 0x0c, 0x2a, 0x0a, 0x0e, 0x28, 0x0b, 0x0e, 0x1f, 0x0b,
+ 0x19, 0x19, 0x12, 0x1b, 0x13, 0x16, 0x16, 0x11, 0x13, 0x14, 0x12, 0x13,
+ 0x13, 0x13, 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x12, 0x11,
+ 0x11, 0x12, 0x11, 0x12, 0x13, 0x12, 0x11, 0x12, 0x12, 0x11, 0x11, 0x12,
+ 0x11, 0x11, 0x11, 0x11, 0x10, 0x0f, 0x12, 0x12, 0x11, 0x10, 0x10, 0x0f,
+ 0x12, 0x11, 0x10, 0x10, 0x0f, 0x0e, 0x14, 0x13, 0x12, 0x1b, 0x1a, 0x19,
+ 0x1b, 0x1a, 0x1a, 0x09, 0x09, 0x09, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00,
+ 0x01, 0x01, 0x00, 0x05, 0x04, 0x04, 0x10, 0x10, 0x0f, 0x15, 0x14, 0x15,
+ 0x12, 0x10, 0x11, 0x0b, 0x0d, 0x0b, 0x0a, 0x19, 0x0c, 0x07, 0x1b, 0x07,
+ 0x07, 0x20, 0x0a, 0x07, 0x1d, 0x0a, 0x0b, 0x1b, 0x0b, 0x0c, 0x1b, 0x0c,
+ 0x06, 0x1c, 0x0a, 0x05, 0x1d, 0x09, 0x05, 0x1f, 0x09, 0x05, 0x1e, 0x0a,
+ 0x06, 0x1e, 0x0a, 0x09, 0x1c, 0x0b, 0x0a, 0x1c, 0x0b, 0x0a, 0x1d, 0x0a,
+ 0x0a, 0x1e, 0x0b, 0x0a, 0x1f, 0x0b, 0x09, 0x1e, 0x0b, 0x09, 0x1e, 0x0b,
+ 0x0b, 0x1f, 0x0d, 0x0b, 0x1f, 0x0d, 0x0b, 0x1f, 0x0c, 0x0b, 0x1f, 0x0c,
+ 0x0a, 0x1f, 0x0c, 0x0c, 0x21, 0x0d, 0x0c, 0x21, 0x0d, 0x0c, 0x21, 0x0d,
+ 0x0c, 0x21, 0x0d, 0x0c, 0x21, 0x0d, 0x0c, 0x21, 0x0d, 0x0c, 0x20, 0x0e,
+ 0x0c, 0x20, 0x0e, 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e,
+ 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e,
+ 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e,
+ 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e, 0x0c, 0x21, 0x0e,
+ 0x0b, 0x21, 0x0e, 0x0d, 0x21, 0x0e, 0x0c, 0x20, 0x0e, 0x0c, 0x20, 0x0c,
+ 0x0c, 0x21, 0x0d, 0x0b, 0x1f, 0x0d, 0x0d, 0x1e, 0x0e, 0x10, 0x1d, 0x0f,
+ 0x11, 0x1d, 0x0e, 0x0e, 0x20, 0x0c, 0x09, 0x1d, 0x06, 0x09, 0x1d, 0x08,
+ 0x0a, 0x15, 0x07, 0x13, 0x11, 0x0e, 0x15, 0x0e, 0x11, 0x10, 0x0c, 0x0f,
+ 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0d, 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d,
+ 0x0c, 0x0d, 0x0d, 0x0c, 0x0d, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d,
+ 0x0c, 0x0c, 0x0d, 0x0c, 0x0c, 0x0d, 0x0b, 0x09, 0x09, 0x0d, 0x0d, 0x0c,
+ 0x0d, 0x0d, 0x0c, 0x10, 0x0f, 0x0e, 0x0b, 0x0a, 0x09, 0x0f, 0x0d, 0x0d,
+ 0x12, 0x11, 0x10, 0x11, 0x10, 0x0f, 0x06, 0x06, 0x05, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x0b, 0x0b, 0x0a,
+ 0x0b, 0x0c, 0x0c, 0x0b, 0x0d, 0x0b, 0x07, 0x10, 0x09, 0x06, 0x1e, 0x0b,
+ 0x02, 0x1f, 0x05, 0x02, 0x21, 0x07, 0x03, 0x20, 0x09, 0x08, 0x1e, 0x09,
+ 0x07, 0x1c, 0x09, 0x04, 0x1e, 0x09, 0x02, 0x1f, 0x09, 0x02, 0x21, 0x08,
+ 0x02, 0x20, 0x09, 0x03, 0x20, 0x09, 0x06, 0x1e, 0x09, 0x07, 0x1e, 0x09,
+ 0x05, 0x1f, 0x09, 0x06, 0x20, 0x0a, 0x07, 0x1f, 0x09, 0x07, 0x1f, 0x09,
+ 0x07, 0x1f, 0x09, 0x08, 0x1f, 0x0a, 0x08, 0x1f, 0x0a, 0x08, 0x1f, 0x0a,
+ 0x08, 0x1f, 0x0a, 0x08, 0x1f, 0x0a, 0x09, 0x20, 0x0a, 0x09, 0x20, 0x0a,
+ 0x09, 0x20, 0x0a, 0x09, 0x20, 0x0a, 0x09, 0x20, 0x0a, 0x09, 0x20, 0x0b,
+ 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b,
+ 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b,
+ 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b,
+ 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b,
+ 0x09, 0x20, 0x0b, 0x09, 0x20, 0x0b, 0x0c, 0x20, 0x0b, 0x0d, 0x20, 0x0b,
+ 0x0b, 0x20, 0x09, 0x0b, 0x20, 0x09, 0x0a, 0x1e, 0x0b, 0x0b, 0x1d, 0x0c,
+ 0x0e, 0x1c, 0x0c, 0x0e, 0x1c, 0x0b, 0x0c, 0x1e, 0x0a, 0x09, 0x1e, 0x08,
+ 0x08, 0x1c, 0x09, 0x06, 0x11, 0x05, 0x0c, 0x0b, 0x09, 0x0e, 0x0a, 0x0b,
+ 0x09, 0x08, 0x09, 0x07, 0x07, 0x08, 0x08, 0x09, 0x07, 0x07, 0x08, 0x08,
+ 0x07, 0x08, 0x08, 0x07, 0x08, 0x08, 0x07, 0x08, 0x08, 0x07, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x07, 0x07, 0x08, 0x07, 0x07, 0x07, 0x05, 0x03, 0x03,
+ 0x08, 0x07, 0x06, 0x09, 0x09, 0x07, 0x0c, 0x0b, 0x0a, 0x08, 0x06, 0x05,
+ 0x09, 0x07, 0x07, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x06, 0x03, 0x03, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x02, 0x04, 0x02, 0x02, 0x03, 0x02,
+ 0x09, 0x09, 0x09, 0x07, 0x08, 0x07, 0x06, 0x11, 0x07, 0x08, 0x21, 0x0c,
+ 0x08, 0x31, 0x0e, 0x03, 0x31, 0x09, 0x02, 0x31, 0x08, 0x06, 0x31, 0x0b,
+ 0x0a, 0x2f, 0x0c, 0x08, 0x2c, 0x0b, 0x07, 0x2f, 0x0c, 0x05, 0x30, 0x0c,
+ 0x04, 0x32, 0x0b, 0x04, 0x31, 0x0c, 0x05, 0x31, 0x0c, 0x08, 0x2f, 0x0c,
+ 0x09, 0x2f, 0x0c, 0x07, 0x30, 0x0c, 0x08, 0x30, 0x0c, 0x09, 0x2e, 0x0b,
+ 0x0a, 0x2e, 0x0b, 0x0a, 0x2e, 0x0b, 0x0a, 0x2f, 0x0c, 0x0a, 0x2f, 0x0c,
+ 0x0a, 0x2f, 0x0c, 0x0a, 0x2f, 0x0c, 0x0a, 0x2f, 0x0c, 0x0b, 0x2e, 0x0c,
+ 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c,
+ 0x0b, 0x30, 0x0d, 0x0b, 0x2f, 0x0d, 0x0b, 0x2f, 0x0d, 0x0b, 0x2e, 0x0d,
+ 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d,
+ 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d,
+ 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d,
+ 0x0b, 0x2e, 0x0d, 0x0b, 0x2e, 0x0d, 0x0c, 0x2f, 0x0d, 0x0f, 0x2e, 0x0d,
+ 0x10, 0x2e, 0x0d, 0x0e, 0x30, 0x0b, 0x0e, 0x30, 0x0b, 0x0c, 0x2d, 0x0d,
+ 0x0d, 0x2b, 0x0f, 0x10, 0x2a, 0x0e, 0x0f, 0x2a, 0x0e, 0x0d, 0x2b, 0x0c,
+ 0x0e, 0x2d, 0x0e, 0x0b, 0x28, 0x0e, 0x04, 0x16, 0x08, 0x06, 0x09, 0x06,
+ 0x07, 0x08, 0x07, 0x04, 0x07, 0x05, 0x03, 0x04, 0x04, 0x04, 0x05, 0x03,
+ 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04,
+ 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x03, 0x03,
+ 0x03, 0x01, 0x01, 0x04, 0x04, 0x03, 0x04, 0x05, 0x04, 0x08, 0x08, 0x07,
+ 0x07, 0x05, 0x04, 0x07, 0x05, 0x04, 0x09, 0x07, 0x06, 0x06, 0x04, 0x03,
+ 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x03, 0x05, 0x03,
+ 0x02, 0x03, 0x02, 0x08, 0x07, 0x08, 0x03, 0x06, 0x03, 0x04, 0x15, 0x04,
+ 0x0b, 0x31, 0x10, 0x0b, 0x41, 0x11, 0x05, 0x42, 0x0c, 0x03, 0x3f, 0x0a,
+ 0x09, 0x40, 0x0e, 0x0d, 0x3e, 0x0f, 0x0c, 0x3a, 0x0f, 0x0b, 0x3d, 0x10,
+ 0x09, 0x3e, 0x10, 0x08, 0x40, 0x0f, 0x08, 0x40, 0x10, 0x09, 0x3f, 0x10,
+ 0x0a, 0x3d, 0x0f, 0x0b, 0x3d, 0x0f, 0x0a, 0x3e, 0x10, 0x0a, 0x3f, 0x0e,
+ 0x0c, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e,
+ 0x0d, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e,
+ 0x0d, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e, 0x0d, 0x3c, 0x0e,
+ 0x0d, 0x3c, 0x0e, 0x0d, 0x3d, 0x0f, 0x0d, 0x3d, 0x0f, 0x0d, 0x3d, 0x0f,
+ 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f,
+ 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f,
+ 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f,
+ 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f, 0x0d, 0x3c, 0x0f, 0x0f, 0x3c, 0x0f,
+ 0x12, 0x3a, 0x10, 0x14, 0x3b, 0x0f, 0x12, 0x3e, 0x0c, 0x11, 0x3e, 0x0d,
+ 0x0e, 0x3c, 0x0f, 0x0f, 0x38, 0x11, 0x11, 0x37, 0x10, 0x11, 0x37, 0x10,
+ 0x0e, 0x37, 0x0e, 0x11, 0x3b, 0x13, 0x0e, 0x33, 0x13, 0x04, 0x1b, 0x0a,
+ 0x02, 0x08, 0x03, 0x03, 0x07, 0x05, 0x02, 0x07, 0x03, 0x02, 0x03, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x08, 0x05, 0x05, 0x08, 0x05, 0x05, 0x06, 0x04, 0x03, 0x08, 0x06, 0x05,
+ 0x05, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x03, 0x04, 0x03, 0x05, 0x05, 0x05, 0x0c, 0x0c, 0x0c, 0x07, 0x0b, 0x07,
+ 0x07, 0x19, 0x07, 0x12, 0x39, 0x16, 0x0e, 0x45, 0x13, 0x0b, 0x48, 0x10,
+ 0x0a, 0x46, 0x0d, 0x0f, 0x45, 0x10, 0x13, 0x43, 0x12, 0x14, 0x41, 0x13,
+ 0x12, 0x43, 0x13, 0x10, 0x43, 0x13, 0x0e, 0x45, 0x12, 0x0f, 0x45, 0x13,
+ 0x0f, 0x44, 0x13, 0x0f, 0x42, 0x12, 0x10, 0x42, 0x12, 0x0f, 0x44, 0x12,
+ 0x0f, 0x45, 0x11, 0x10, 0x43, 0x11, 0x10, 0x43, 0x12, 0x10, 0x43, 0x12,
+ 0x10, 0x43, 0x12, 0x10, 0x43, 0x12, 0x10, 0x42, 0x11, 0x10, 0x43, 0x11,
+ 0x10, 0x42, 0x11, 0x10, 0x43, 0x12, 0x10, 0x43, 0x12, 0x10, 0x43, 0x12,
+ 0x10, 0x43, 0x12, 0x10, 0x43, 0x12, 0x10, 0x44, 0x12, 0x10, 0x44, 0x12,
+ 0x10, 0x44, 0x12, 0x11, 0x43, 0x12, 0x11, 0x43, 0x12, 0x11, 0x43, 0x12,
+ 0x11, 0x43, 0x12, 0x11, 0x43, 0x12, 0x11, 0x43, 0x12, 0x11, 0x43, 0x12,
+ 0x11, 0x43, 0x12, 0x11, 0x43, 0x13, 0x11, 0x43, 0x13, 0x11, 0x43, 0x12,
+ 0x11, 0x43, 0x12, 0x11, 0x43, 0x12, 0x11, 0x43, 0x12, 0x11, 0x43, 0x12,
+ 0x12, 0x43, 0x13, 0x16, 0x41, 0x14, 0x16, 0x42, 0x13, 0x14, 0x45, 0x10,
+ 0x11, 0x46, 0x10, 0x0e, 0x45, 0x12, 0x0e, 0x42, 0x14, 0x11, 0x41, 0x13,
+ 0x11, 0x41, 0x12, 0x0e, 0x41, 0x10, 0x12, 0x44, 0x15, 0x10, 0x3b, 0x16,
+ 0x09, 0x25, 0x0e, 0x07, 0x0f, 0x06, 0x08, 0x0c, 0x07, 0x06, 0x0b, 0x06,
+ 0x06, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06,
+ 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x08, 0x07, 0x07, 0x07, 0x05, 0x06,
+ 0x08, 0x06, 0x07, 0x0d, 0x0a, 0x0a, 0x0e, 0x0b, 0x0b, 0x0b, 0x08, 0x07,
+ 0x0d, 0x0b, 0x0a, 0x0b, 0x08, 0x09, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x01, 0x01, 0x02, 0x03, 0x02, 0x06, 0x07, 0x06, 0x10, 0x10, 0x10,
+ 0x0a, 0x10, 0x0b, 0x0a, 0x1c, 0x09, 0x18, 0x3f, 0x1a, 0x11, 0x47, 0x14,
+ 0x0f, 0x4b, 0x11, 0x0f, 0x4a, 0x10, 0x13, 0x48, 0x12, 0x18, 0x45, 0x14,
+ 0x1a, 0x44, 0x16, 0x17, 0x46, 0x14, 0x15, 0x46, 0x14, 0x13, 0x48, 0x13,
+ 0x14, 0x48, 0x14, 0x14, 0x47, 0x14, 0x14, 0x45, 0x14, 0x15, 0x45, 0x14,
+ 0x13, 0x46, 0x14, 0x12, 0x46, 0x13, 0x12, 0x46, 0x14, 0x12, 0x46, 0x15,
+ 0x12, 0x46, 0x14, 0x12, 0x46, 0x14, 0x12, 0x46, 0x15, 0x12, 0x45, 0x14,
+ 0x12, 0x46, 0x14, 0x12, 0x45, 0x14, 0x13, 0x46, 0x15, 0x13, 0x46, 0x14,
+ 0x13, 0x46, 0x14, 0x13, 0x46, 0x14, 0x13, 0x46, 0x14, 0x13, 0x47, 0x15,
+ 0x13, 0x47, 0x15, 0x13, 0x47, 0x15, 0x14, 0x46, 0x15, 0x14, 0x46, 0x15,
+ 0x14, 0x46, 0x15, 0x14, 0x46, 0x15, 0x14, 0x46, 0x15, 0x14, 0x46, 0x15,
+ 0x14, 0x46, 0x15, 0x14, 0x46, 0x15, 0x14, 0x47, 0x16, 0x14, 0x47, 0x16,
+ 0x14, 0x46, 0x15, 0x14, 0x46, 0x15, 0x14, 0x46, 0x15, 0x14, 0x46, 0x15,
+ 0x13, 0x46, 0x15, 0x15, 0x46, 0x15, 0x18, 0x44, 0x17, 0x18, 0x45, 0x16,
+ 0x15, 0x49, 0x12, 0x12, 0x4b, 0x12, 0x0f, 0x4a, 0x14, 0x0e, 0x47, 0x15,
+ 0x11, 0x47, 0x14, 0x12, 0x47, 0x13, 0x0e, 0x47, 0x12, 0x12, 0x49, 0x15,
+ 0x12, 0x40, 0x17, 0x0e, 0x2c, 0x11, 0x0b, 0x14, 0x09, 0x0d, 0x0f, 0x0a,
+ 0x0b, 0x0e, 0x09, 0x0a, 0x0b, 0x09, 0x0a, 0x0a, 0x09, 0x0b, 0x0a, 0x0b,
+ 0x0b, 0x0a, 0x0a, 0x0c, 0x0a, 0x0a, 0x0c, 0x0a, 0x0a, 0x0c, 0x0a, 0x0a,
+ 0x0c, 0x0a, 0x0a, 0x0b, 0x0a, 0x0a, 0x0b, 0x0a, 0x0a, 0x0c, 0x0b, 0x0c,
+ 0x0a, 0x0a, 0x0a, 0x0d, 0x0a, 0x0b, 0x10, 0x0d, 0x0d, 0x13, 0x10, 0x10,
+ 0x0f, 0x0b, 0x0c, 0x12, 0x0e, 0x0f, 0x10, 0x0d, 0x0e, 0x08, 0x08, 0x08,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x02, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x0a, 0x0a, 0x09,
+ 0x15, 0x16, 0x15, 0x10, 0x16, 0x0f, 0x0e, 0x20, 0x0d, 0x1f, 0x45, 0x1f,
+ 0x15, 0x48, 0x15, 0x15, 0x4e, 0x14, 0x16, 0x4d, 0x13, 0x19, 0x4b, 0x14,
+ 0x1e, 0x48, 0x16, 0x22, 0x49, 0x1a, 0x1e, 0x48, 0x18, 0x1c, 0x48, 0x17,
+ 0x1a, 0x4a, 0x16, 0x1b, 0x4a, 0x17, 0x1b, 0x49, 0x17, 0x1a, 0x47, 0x17,
+ 0x1b, 0x47, 0x17, 0x19, 0x49, 0x16, 0x18, 0x49, 0x16, 0x16, 0x4a, 0x17,
+ 0x15, 0x4a, 0x18, 0x15, 0x4a, 0x18, 0x15, 0x4a, 0x18, 0x15, 0x4a, 0x18,
+ 0x15, 0x48, 0x17, 0x15, 0x49, 0x17, 0x15, 0x49, 0x17, 0x16, 0x4b, 0x18,
+ 0x16, 0x4b, 0x18, 0x16, 0x4b, 0x18, 0x16, 0x4b, 0x18, 0x16, 0x4b, 0x18,
+ 0x16, 0x4b, 0x18, 0x16, 0x4b, 0x18, 0x16, 0x4b, 0x18, 0x18, 0x4b, 0x18,
+ 0x18, 0x4b, 0x18, 0x18, 0x4b, 0x18, 0x18, 0x4b, 0x18, 0x18, 0x4b, 0x18,
+ 0x18, 0x4b, 0x18, 0x18, 0x4b, 0x18, 0x18, 0x4b, 0x18, 0x18, 0x4b, 0x19,
+ 0x18, 0x4b, 0x19, 0x18, 0x4b, 0x18, 0x18, 0x4b, 0x18, 0x18, 0x4b, 0x18,
+ 0x18, 0x4b, 0x18, 0x17, 0x4b, 0x18, 0x19, 0x4a, 0x19, 0x1b, 0x49, 0x1b,
+ 0x1a, 0x4a, 0x1a, 0x17, 0x4d, 0x16, 0x13, 0x4f, 0x15, 0x10, 0x4f, 0x17,
+ 0x10, 0x4e, 0x17, 0x12, 0x4e, 0x17, 0x13, 0x4e, 0x16, 0x10, 0x4e, 0x13,
+ 0x14, 0x4f, 0x16, 0x14, 0x46, 0x19, 0x14, 0x34, 0x15, 0x10, 0x1a, 0x0c,
+ 0x13, 0x14, 0x0d, 0x11, 0x12, 0x0d, 0x0f, 0x10, 0x0e, 0x0f, 0x0f, 0x0e,
+ 0x10, 0x0f, 0x10, 0x10, 0x0f, 0x0f, 0x12, 0x0f, 0x0f, 0x12, 0x0f, 0x0f,
+ 0x12, 0x0f, 0x0f, 0x12, 0x0f, 0x0f, 0x11, 0x0f, 0x0f, 0x11, 0x0f, 0x0f,
+ 0x12, 0x11, 0x11, 0x10, 0x0e, 0x0f, 0x13, 0x0f, 0x10, 0x15, 0x12, 0x13,
+ 0x19, 0x16, 0x16, 0x13, 0x0f, 0x10, 0x17, 0x14, 0x15, 0x16, 0x14, 0x14,
+ 0x0c, 0x0c, 0x0c, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x03,
+ 0x0e, 0x0d, 0x0d, 0x19, 0x19, 0x18, 0x12, 0x1a, 0x12, 0x0f, 0x23, 0x0d,
+ 0x21, 0x45, 0x1e, 0x1a, 0x47, 0x17, 0x1a, 0x49, 0x16, 0x1c, 0x4a, 0x16,
+ 0x1c, 0x48, 0x16, 0x21, 0x47, 0x18, 0x23, 0x47, 0x19, 0x20, 0x48, 0x18,
+ 0x1f, 0x48, 0x18, 0x1e, 0x49, 0x18, 0x1f, 0x48, 0x18, 0x1f, 0x48, 0x18,
+ 0x1e, 0x47, 0x18, 0x1e, 0x47, 0x18, 0x1d, 0x47, 0x18, 0x1c, 0x47, 0x18,
+ 0x1b, 0x48, 0x18, 0x1a, 0x48, 0x19, 0x1a, 0x48, 0x19, 0x1a, 0x48, 0x19,
+ 0x1a, 0x48, 0x19, 0x1a, 0x47, 0x18, 0x1a, 0x48, 0x18, 0x1a, 0x47, 0x18,
+ 0x1b, 0x49, 0x19, 0x1b, 0x49, 0x19, 0x1b, 0x49, 0x19, 0x1b, 0x49, 0x19,
+ 0x1b, 0x49, 0x19, 0x1b, 0x49, 0x19, 0x1b, 0x49, 0x19, 0x1b, 0x49, 0x19,
+ 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19,
+ 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19,
+ 0x1c, 0x49, 0x1a, 0x1c, 0x49, 0x1a, 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19,
+ 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19, 0x1c, 0x49, 0x19, 0x1d, 0x48, 0x19,
+ 0x1e, 0x48, 0x1b, 0x1e, 0x48, 0x1b, 0x1c, 0x4a, 0x19, 0x18, 0x4b, 0x17,
+ 0x17, 0x4c, 0x18, 0x17, 0x4c, 0x17, 0x18, 0x4c, 0x18, 0x18, 0x4b, 0x18,
+ 0x17, 0x4b, 0x16, 0x1a, 0x4b, 0x18, 0x1a, 0x45, 0x1a, 0x17, 0x35, 0x15,
+ 0x10, 0x1b, 0x0c, 0x12, 0x15, 0x0e, 0x11, 0x12, 0x0e, 0x11, 0x11, 0x0f,
+ 0x10, 0x10, 0x0f, 0x11, 0x10, 0x10, 0x11, 0x10, 0x10, 0x12, 0x10, 0x10,
+ 0x12, 0x10, 0x10, 0x12, 0x10, 0x10, 0x12, 0x10, 0x10, 0x12, 0x10, 0x10,
+ 0x12, 0x10, 0x10, 0x12, 0x11, 0x11, 0x11, 0x10, 0x10, 0x14, 0x10, 0x11,
+ 0x14, 0x11, 0x12, 0x1a, 0x18, 0x17, 0x14, 0x11, 0x11, 0x18, 0x16, 0x16,
+ 0x1a, 0x18, 0x18, 0x0f, 0x0e, 0x0e, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00,
+ 0x07, 0x04, 0x04, 0x13, 0x12, 0x11, 0x1c, 0x1d, 0x1a, 0x16, 0x1d, 0x13,
+ 0x10, 0x27, 0x0d, 0x21, 0x45, 0x1c, 0x20, 0x45, 0x19, 0x1e, 0x43, 0x17,
+ 0x20, 0x47, 0x19, 0x1f, 0x44, 0x18, 0x21, 0x46, 0x19, 0x22, 0x45, 0x18,
+ 0x22, 0x46, 0x19, 0x22, 0x46, 0x19, 0x21, 0x45, 0x1a, 0x21, 0x45, 0x19,
+ 0x21, 0x45, 0x19, 0x21, 0x45, 0x19, 0x21, 0x45, 0x19, 0x21, 0x44, 0x1b,
+ 0x20, 0x44, 0x1b, 0x20, 0x45, 0x19, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a,
+ 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x19, 0x20, 0x46, 0x19,
+ 0x20, 0x45, 0x19, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a,
+ 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a,
+ 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a,
+ 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a,
+ 0x20, 0x45, 0x1a, 0x20, 0x46, 0x1a, 0x20, 0x46, 0x1a, 0x20, 0x45, 0x1a,
+ 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a, 0x20, 0x45, 0x1a,
+ 0x21, 0x45, 0x1a, 0x21, 0x46, 0x19, 0x21, 0x46, 0x1a, 0x20, 0x45, 0x1b,
+ 0x1f, 0x45, 0x1b, 0x21, 0x47, 0x19, 0x21, 0x47, 0x18, 0x1f, 0x47, 0x19,
+ 0x1f, 0x46, 0x1a, 0x1f, 0x46, 0x19, 0x21, 0x46, 0x1a, 0x21, 0x44, 0x1b,
+ 0x1b, 0x33, 0x16, 0x0f, 0x1a, 0x0d, 0x0f, 0x14, 0x0f, 0x0f, 0x12, 0x0f,
+ 0x11, 0x11, 0x10, 0x10, 0x11, 0x0f, 0x11, 0x10, 0x10, 0x11, 0x10, 0x0f,
+ 0x12, 0x10, 0x0f, 0x12, 0x10, 0x0f, 0x12, 0x10, 0x0f, 0x12, 0x10, 0x0f,
+ 0x11, 0x10, 0x0f, 0x11, 0x10, 0x0f, 0x12, 0x11, 0x10, 0x12, 0x10, 0x10,
+ 0x13, 0x11, 0x11, 0x12, 0x10, 0x10, 0x1a, 0x18, 0x18, 0x14, 0x13, 0x12,
+ 0x18, 0x17, 0x16, 0x1d, 0x1c, 0x1b, 0x10, 0x10, 0x10, 0x04, 0x04, 0x04,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x08, 0x05, 0x04, 0x15, 0x14, 0x12, 0x1d, 0x1e, 0x1a,
+ 0x16, 0x1e, 0x12, 0x11, 0x29, 0x0c, 0x21, 0x43, 0x1a, 0x23, 0x43, 0x1a,
+ 0x20, 0x3f, 0x18, 0x22, 0x43, 0x1a, 0x20, 0x41, 0x18, 0x22, 0x44, 0x19,
+ 0x21, 0x43, 0x18, 0x22, 0x44, 0x18, 0x22, 0x44, 0x18, 0x22, 0x42, 0x1a,
+ 0x22, 0x42, 0x19, 0x22, 0x42, 0x19, 0x23, 0x43, 0x19, 0x23, 0x43, 0x19,
+ 0x23, 0x41, 0x1b, 0x23, 0x41, 0x1b, 0x22, 0x42, 0x19, 0x22, 0x42, 0x19,
+ 0x22, 0x42, 0x19, 0x22, 0x42, 0x19, 0x22, 0x42, 0x19, 0x22, 0x43, 0x19,
+ 0x22, 0x43, 0x19, 0x22, 0x43, 0x19, 0x22, 0x42, 0x19, 0x22, 0x42, 0x19,
+ 0x22, 0x42, 0x19, 0x22, 0x42, 0x19, 0x22, 0x42, 0x19, 0x22, 0x42, 0x19,
+ 0x22, 0x42, 0x19, 0x22, 0x42, 0x19, 0x23, 0x42, 0x19, 0x23, 0x42, 0x19,
+ 0x23, 0x42, 0x19, 0x23, 0x42, 0x19, 0x23, 0x42, 0x19, 0x23, 0x42, 0x19,
+ 0x23, 0x42, 0x19, 0x23, 0x42, 0x19, 0x23, 0x42, 0x19, 0x23, 0x42, 0x19,
+ 0x23, 0x42, 0x19, 0x23, 0x42, 0x19, 0x23, 0x42, 0x19, 0x23, 0x42, 0x19,
+ 0x23, 0x42, 0x19, 0x23, 0x42, 0x19, 0x22, 0x44, 0x18, 0x22, 0x43, 0x19,
+ 0x23, 0x40, 0x1c, 0x23, 0x40, 0x1b, 0x25, 0x42, 0x18, 0x25, 0x43, 0x17,
+ 0x23, 0x43, 0x18, 0x23, 0x42, 0x1a, 0x24, 0x43, 0x1a, 0x25, 0x42, 0x1b,
+ 0x24, 0x41, 0x1a, 0x1c, 0x32, 0x15, 0x0e, 0x1a, 0x0d, 0x0d, 0x14, 0x0f,
+ 0x0e, 0x11, 0x0f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x11, 0x0f, 0x0f,
+ 0x11, 0x0f, 0x0f, 0x11, 0x0f, 0x0f, 0x11, 0x0f, 0x0f, 0x11, 0x0f, 0x0f,
+ 0x11, 0x0f, 0x0f, 0x11, 0x0f, 0x0f, 0x11, 0x0f, 0x0f, 0x11, 0x0f, 0x0e,
+ 0x11, 0x0f, 0x0e, 0x11, 0x10, 0x10, 0x10, 0x0f, 0x0f, 0x1a, 0x19, 0x18,
+ 0x14, 0x14, 0x12, 0x16, 0x15, 0x14, 0x1c, 0x1b, 0x1a, 0x10, 0x10, 0x10,
+ 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x07, 0x04, 0x03, 0x14, 0x12, 0x11,
+ 0x1b, 0x1c, 0x18, 0x13, 0x1b, 0x10, 0x11, 0x27, 0x0d, 0x20, 0x42, 0x1a,
+ 0x21, 0x42, 0x19, 0x1e, 0x3f, 0x17, 0x21, 0x42, 0x19, 0x1f, 0x3f, 0x17,
+ 0x21, 0x43, 0x18, 0x20, 0x42, 0x17, 0x20, 0x42, 0x17, 0x20, 0x43, 0x17,
+ 0x20, 0x41, 0x19, 0x20, 0x41, 0x18, 0x21, 0x41, 0x18, 0x22, 0x41, 0x18,
+ 0x22, 0x41, 0x18, 0x22, 0x40, 0x1a, 0x22, 0x40, 0x1a, 0x20, 0x41, 0x18,
+ 0x20, 0x41, 0x18, 0x20, 0x41, 0x18, 0x20, 0x41, 0x18, 0x20, 0x41, 0x18,
+ 0x20, 0x41, 0x18, 0x20, 0x41, 0x18, 0x20, 0x41, 0x18, 0x20, 0x41, 0x18,
+ 0x20, 0x41, 0x18, 0x20, 0x41, 0x18, 0x20, 0x41, 0x18, 0x20, 0x41, 0x18,
+ 0x20, 0x41, 0x18, 0x20, 0x41, 0x18, 0x20, 0x41, 0x18, 0x22, 0x41, 0x18,
+ 0x22, 0x41, 0x18, 0x22, 0x41, 0x18, 0x22, 0x41, 0x18, 0x22, 0x41, 0x18,
+ 0x22, 0x41, 0x18, 0x22, 0x41, 0x18, 0x22, 0x41, 0x18, 0x22, 0x41, 0x18,
+ 0x22, 0x41, 0x18, 0x22, 0x41, 0x18, 0x22, 0x41, 0x18, 0x22, 0x41, 0x18,
+ 0x22, 0x41, 0x18, 0x22, 0x41, 0x18, 0x22, 0x41, 0x18, 0x20, 0x43, 0x17,
+ 0x20, 0x42, 0x18, 0x22, 0x3f, 0x1b, 0x22, 0x3e, 0x1a, 0x23, 0x41, 0x17,
+ 0x23, 0x42, 0x16, 0x22, 0x41, 0x17, 0x22, 0x41, 0x18, 0x23, 0x42, 0x19,
+ 0x24, 0x41, 0x1a, 0x23, 0x3f, 0x19, 0x1b, 0x31, 0x14, 0x0e, 0x19, 0x0c,
+ 0x0e, 0x13, 0x0e, 0x0e, 0x10, 0x0e, 0x10, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e,
+ 0x10, 0x0e, 0x0e, 0x10, 0x0e, 0x0e, 0x10, 0x0e, 0x0e, 0x10, 0x0e, 0x0e,
+ 0x10, 0x0e, 0x0e, 0x10, 0x0e, 0x0e, 0x10, 0x0e, 0x0e, 0x10, 0x0e, 0x0e,
+ 0x10, 0x0e, 0x0e, 0x10, 0x0e, 0x0e, 0x11, 0x10, 0x0f, 0x11, 0x0f, 0x0f,
+ 0x1a, 0x18, 0x18, 0x14, 0x12, 0x12, 0x14, 0x13, 0x12, 0x17, 0x16, 0x16,
+ 0x0f, 0x0f, 0x0e, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x06, 0x03, 0x03,
+ 0x12, 0x10, 0x10, 0x18, 0x19, 0x15, 0x11, 0x19, 0x0d, 0x11, 0x27, 0x0c,
+ 0x20, 0x41, 0x19, 0x1f, 0x41, 0x18, 0x1c, 0x3e, 0x16, 0x20, 0x40, 0x18,
+ 0x1e, 0x3e, 0x16, 0x20, 0x42, 0x17, 0x1e, 0x41, 0x16, 0x1e, 0x40, 0x15,
+ 0x1e, 0x41, 0x15, 0x1e, 0x3f, 0x17, 0x1e, 0x3f, 0x16, 0x1f, 0x3f, 0x16,
+ 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3e, 0x18, 0x21, 0x3e, 0x18,
+ 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16,
+ 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16,
+ 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16,
+ 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x16, 0x21, 0x3f, 0x17,
+ 0x1e, 0x41, 0x15, 0x1e, 0x40, 0x16, 0x21, 0x3d, 0x19, 0x21, 0x3d, 0x19,
+ 0x20, 0x3f, 0x15, 0x20, 0x40, 0x14, 0x21, 0x3f, 0x15, 0x21, 0x3f, 0x16,
+ 0x22, 0x40, 0x18, 0x23, 0x3f, 0x18, 0x22, 0x3e, 0x17, 0x1a, 0x30, 0x13,
+ 0x0e, 0x18, 0x0b, 0x0e, 0x12, 0x0d, 0x0e, 0x0e, 0x0e, 0x0f, 0x0d, 0x0d,
+ 0x0f, 0x0d, 0x0e, 0x0f, 0x0d, 0x0e, 0x0f, 0x0d, 0x0e, 0x0f, 0x0d, 0x0e,
+ 0x0f, 0x0d, 0x0e, 0x0f, 0x0d, 0x0e, 0x0f, 0x0d, 0x0e, 0x0f, 0x0d, 0x0e,
+ 0x0f, 0x0d, 0x0e, 0x0f, 0x0d, 0x0e, 0x0f, 0x0d, 0x0d, 0x10, 0x0f, 0x0e,
+ 0x10, 0x0f, 0x0f, 0x1a, 0x18, 0x18, 0x13, 0x12, 0x11, 0x11, 0x10, 0x0f,
+ 0x12, 0x12, 0x11, 0x0d, 0x0d, 0x0d, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
+ 0x06, 0x05, 0x03, 0x11, 0x10, 0x0f, 0x17, 0x17, 0x14, 0x11, 0x19, 0x0d,
+ 0x11, 0x26, 0x0c, 0x1f, 0x40, 0x18, 0x1e, 0x40, 0x17, 0x1c, 0x3d, 0x15,
+ 0x1f, 0x3f, 0x17, 0x1d, 0x3e, 0x15, 0x1f, 0x41, 0x16, 0x1e, 0x3f, 0x15,
+ 0x1e, 0x3f, 0x15, 0x1e, 0x40, 0x15, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x1f, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3e, 0x17,
+ 0x20, 0x3e, 0x17, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16, 0x1e, 0x3f, 0x16,
+ 0x1e, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16,
+ 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16,
+ 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16,
+ 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16, 0x20, 0x3f, 0x16,
+ 0x20, 0x3f, 0x16, 0x1e, 0x40, 0x15, 0x1e, 0x3f, 0x16, 0x20, 0x3c, 0x18,
+ 0x20, 0x3c, 0x18, 0x20, 0x3f, 0x15, 0x20, 0x40, 0x14, 0x20, 0x3f, 0x15,
+ 0x20, 0x3f, 0x16, 0x21, 0x40, 0x17, 0x22, 0x3f, 0x17, 0x22, 0x3d, 0x17,
+ 0x1a, 0x2f, 0x13, 0x0e, 0x18, 0x0b, 0x0d, 0x12, 0x0c, 0x0d, 0x0e, 0x0c,
+ 0x0f, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d,
+ 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d,
+ 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x0c,
+ 0x0f, 0x0e, 0x0d, 0x10, 0x0f, 0x0e, 0x18, 0x17, 0x17, 0x12, 0x11, 0x10,
+ 0x0f, 0x0e, 0x0d, 0x0f, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x00, 0x06, 0x06, 0x04, 0x11, 0x11, 0x0f, 0x17, 0x17, 0x14,
+ 0x10, 0x18, 0x0c, 0x12, 0x27, 0x0c, 0x1f, 0x3e, 0x17, 0x1d, 0x3f, 0x16,
+ 0x1b, 0x3d, 0x14, 0x1f, 0x3f, 0x17, 0x1d, 0x3d, 0x15, 0x1f, 0x40, 0x15,
+ 0x1d, 0x3f, 0x14, 0x1d, 0x3f, 0x14, 0x1d, 0x3f, 0x14, 0x1d, 0x3e, 0x16,
+ 0x1d, 0x3e, 0x15, 0x1e, 0x3e, 0x15, 0x20, 0x3e, 0x15, 0x20, 0x3e, 0x15,
+ 0x20, 0x3d, 0x17, 0x20, 0x3d, 0x17, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15,
+ 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15,
+ 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15,
+ 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x15,
+ 0x1f, 0x3e, 0x15, 0x1f, 0x3e, 0x16, 0x1d, 0x3f, 0x14, 0x1d, 0x3e, 0x15,
+ 0x20, 0x3c, 0x18, 0x20, 0x3b, 0x17, 0x1f, 0x3e, 0x15, 0x1f, 0x3f, 0x14,
+ 0x1f, 0x3e, 0x14, 0x1f, 0x3e, 0x15, 0x20, 0x3f, 0x17, 0x21, 0x3e, 0x16,
+ 0x22, 0x3d, 0x17, 0x1b, 0x30, 0x12, 0x0d, 0x19, 0x0a, 0x0c, 0x12, 0x0c,
+ 0x0c, 0x0e, 0x0b, 0x0e, 0x0c, 0x0c, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d,
+ 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d,
+ 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x0e, 0x0d,
+ 0x0d, 0x0d, 0x0c, 0x0e, 0x0e, 0x0d, 0x0f, 0x10, 0x0e, 0x17, 0x17, 0x16,
+ 0x11, 0x11, 0x10, 0x0d, 0x0d, 0x0c, 0x0e, 0x0e, 0x0c, 0x0b, 0x0b, 0x0b,
+ 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x08, 0x05, 0x10, 0x11, 0x0f,
+ 0x16, 0x15, 0x12, 0x10, 0x18, 0x0c, 0x12, 0x26, 0x0d, 0x1e, 0x3d, 0x17,
+ 0x1c, 0x3e, 0x15, 0x1b, 0x3c, 0x13, 0x1e, 0x3e, 0x15, 0x1c, 0x3c, 0x14,
+ 0x1e, 0x3e, 0x14, 0x1d, 0x3e, 0x13, 0x1d, 0x3e, 0x14, 0x1d, 0x3e, 0x14,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1e, 0x3e, 0x15, 0x1f, 0x3e, 0x15,
+ 0x1f, 0x3e, 0x15, 0x1f, 0x3d, 0x16, 0x1f, 0x3d, 0x16, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15,
+ 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x15, 0x1d, 0x3e, 0x14,
+ 0x1d, 0x3e, 0x15, 0x1f, 0x3b, 0x17, 0x1f, 0x3b, 0x16, 0x1f, 0x3d, 0x14,
+ 0x1f, 0x3e, 0x14, 0x1d, 0x3e, 0x14, 0x1d, 0x3e, 0x15, 0x1e, 0x3e, 0x16,
+ 0x1f, 0x3e, 0x15, 0x21, 0x3c, 0x17, 0x1b, 0x30, 0x12, 0x0d, 0x19, 0x0a,
+ 0x0c, 0x11, 0x0b, 0x0c, 0x0d, 0x0a, 0x0d, 0x0c, 0x0c, 0x0d, 0x0e, 0x0c,
+ 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c,
+ 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c, 0x0d, 0x0e, 0x0c,
+ 0x0d, 0x0e, 0x0c, 0x0c, 0x0c, 0x0b, 0x0d, 0x0d, 0x0c, 0x0e, 0x0f, 0x0d,
+ 0x15, 0x17, 0x15, 0x0f, 0x10, 0x0f, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0a,
+ 0x0b, 0x0b, 0x0a, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x07, 0x05,
+ 0x0f, 0x10, 0x0e, 0x14, 0x13, 0x10, 0x0f, 0x16, 0x0b, 0x11, 0x26, 0x0c,
+ 0x1b, 0x3a, 0x15, 0x1a, 0x3b, 0x14, 0x19, 0x3a, 0x12, 0x1c, 0x3d, 0x14,
+ 0x1a, 0x3b, 0x13, 0x1b, 0x3c, 0x13, 0x1a, 0x3b, 0x12, 0x1b, 0x3c, 0x13,
+ 0x1b, 0x3c, 0x13, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x13, 0x1b, 0x3c, 0x13,
+ 0x1c, 0x3b, 0x14, 0x1c, 0x3b, 0x14, 0x1c, 0x3b, 0x15, 0x1c, 0x3b, 0x15,
+ 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x13, 0x1b, 0x3c, 0x14, 0x1c, 0x39, 0x16, 0x1c, 0x39, 0x15,
+ 0x1c, 0x3c, 0x13, 0x1c, 0x3c, 0x12, 0x1b, 0x3c, 0x13, 0x1b, 0x3c, 0x14,
+ 0x1b, 0x3c, 0x15, 0x1c, 0x3b, 0x14, 0x1f, 0x3a, 0x16, 0x19, 0x2f, 0x12,
+ 0x0d, 0x18, 0x0a, 0x0c, 0x11, 0x0a, 0x0c, 0x0d, 0x0a, 0x0d, 0x0c, 0x0b,
+ 0x0c, 0x0d, 0x0b, 0x0c, 0x0d, 0x0b, 0x0c, 0x0d, 0x0b, 0x0c, 0x0d, 0x0b,
+ 0x0c, 0x0d, 0x0b, 0x0c, 0x0d, 0x0b, 0x0c, 0x0d, 0x0b, 0x0c, 0x0d, 0x0b,
+ 0x0c, 0x0d, 0x0b, 0x0d, 0x0d, 0x0c, 0x0c, 0x0c, 0x0b, 0x0c, 0x0c, 0x0b,
+ 0x0c, 0x0d, 0x0b, 0x13, 0x14, 0x12, 0x0e, 0x0e, 0x0d, 0x0b, 0x0b, 0x0a,
+ 0x0a, 0x0a, 0x09, 0x0a, 0x0a, 0x0a, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x07, 0x08, 0x05, 0x0e, 0x0e, 0x0c, 0x11, 0x11, 0x0e, 0x0d, 0x14, 0x0a,
+ 0x0f, 0x26, 0x0c, 0x17, 0x38, 0x13, 0x17, 0x38, 0x12, 0x17, 0x38, 0x11,
+ 0x18, 0x3b, 0x12, 0x18, 0x3a, 0x12, 0x19, 0x3a, 0x12, 0x18, 0x39, 0x11,
+ 0x19, 0x3a, 0x12, 0x19, 0x3a, 0x12, 0x19, 0x3a, 0x12, 0x19, 0x3a, 0x11,
+ 0x19, 0x3a, 0x12, 0x1a, 0x38, 0x13, 0x1a, 0x38, 0x13, 0x1a, 0x39, 0x13,
+ 0x1a, 0x39, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x11, 0x19, 0x3a, 0x13, 0x1a, 0x37, 0x15,
+ 0x1a, 0x37, 0x14, 0x1a, 0x3a, 0x11, 0x1a, 0x3a, 0x10, 0x19, 0x3a, 0x12,
+ 0x19, 0x3a, 0x13, 0x19, 0x3a, 0x13, 0x1a, 0x39, 0x13, 0x1c, 0x38, 0x14,
+ 0x17, 0x2e, 0x11, 0x0c, 0x17, 0x09, 0x0b, 0x10, 0x0a, 0x0b, 0x0c, 0x0a,
+ 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0c, 0x0b, 0x0a, 0x0c, 0x0b,
+ 0x0a, 0x0c, 0x0b, 0x0a, 0x0c, 0x0b, 0x0a, 0x0c, 0x0b, 0x0a, 0x0c, 0x0b,
+ 0x0a, 0x0c, 0x0b, 0x0a, 0x0b, 0x0a, 0x0b, 0x0c, 0x0b, 0x0a, 0x0b, 0x0a,
+ 0x0a, 0x0b, 0x09, 0x0a, 0x0b, 0x09, 0x10, 0x11, 0x10, 0x0c, 0x0e, 0x0b,
+ 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x08, 0x09, 0x09, 0x09, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x06, 0x07, 0x05, 0x0c, 0x0c, 0x0a, 0x0d, 0x0e, 0x0b,
+ 0x0a, 0x12, 0x08, 0x0c, 0x24, 0x0a, 0x12, 0x34, 0x10, 0x12, 0x34, 0x0f,
+ 0x12, 0x35, 0x0f, 0x14, 0x38, 0x10, 0x14, 0x37, 0x10, 0x14, 0x37, 0x10,
+ 0x14, 0x36, 0x10, 0x15, 0x37, 0x10, 0x15, 0x37, 0x10, 0x15, 0x36, 0x10,
+ 0x15, 0x36, 0x0f, 0x15, 0x36, 0x10, 0x15, 0x35, 0x11, 0x15, 0x35, 0x11,
+ 0x15, 0x35, 0x11, 0x15, 0x35, 0x11, 0x15, 0x36, 0x11, 0x15, 0x36, 0x11,
+ 0x15, 0x36, 0x11, 0x15, 0x36, 0x11, 0x15, 0x36, 0x11, 0x15, 0x36, 0x11,
+ 0x15, 0x36, 0x11, 0x15, 0x36, 0x11, 0x15, 0x36, 0x11, 0x15, 0x36, 0x11,
+ 0x15, 0x36, 0x11, 0x15, 0x36, 0x11, 0x15, 0x36, 0x11, 0x15, 0x36, 0x11,
+ 0x15, 0x36, 0x11, 0x15, 0x36, 0x11, 0x14, 0x36, 0x11, 0x14, 0x36, 0x11,
+ 0x14, 0x36, 0x11, 0x14, 0x36, 0x11, 0x14, 0x36, 0x11, 0x14, 0x36, 0x11,
+ 0x14, 0x36, 0x11, 0x14, 0x36, 0x11, 0x14, 0x36, 0x11, 0x14, 0x36, 0x11,
+ 0x14, 0x36, 0x11, 0x14, 0x36, 0x11, 0x14, 0x36, 0x11, 0x14, 0x36, 0x11,
+ 0x14, 0x36, 0x11, 0x14, 0x36, 0x11, 0x15, 0x37, 0x0f, 0x15, 0x36, 0x11,
+ 0x15, 0x34, 0x13, 0x15, 0x34, 0x12, 0x15, 0x36, 0x0f, 0x15, 0x37, 0x0e,
+ 0x14, 0x37, 0x10, 0x14, 0x36, 0x11, 0x14, 0x36, 0x11, 0x15, 0x35, 0x11,
+ 0x17, 0x35, 0x12, 0x14, 0x2c, 0x0f, 0x0a, 0x16, 0x08, 0x09, 0x10, 0x08,
+ 0x09, 0x0c, 0x08, 0x0a, 0x0c, 0x09, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x0a,
+ 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09,
+ 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a,
+ 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x07, 0x08, 0x06, 0x0c, 0x0e, 0x0c,
+ 0x09, 0x0b, 0x09, 0x08, 0x08, 0x08, 0x07, 0x07, 0x06, 0x07, 0x07, 0x07,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x04, 0x05, 0x03, 0x09, 0x09, 0x07,
+ 0x0a, 0x0b, 0x07, 0x06, 0x0f, 0x05, 0x0a, 0x22, 0x09, 0x0e, 0x2f, 0x0e,
+ 0x0e, 0x30, 0x0d, 0x0e, 0x31, 0x0d, 0x10, 0x34, 0x0e, 0x10, 0x33, 0x0e,
+ 0x10, 0x33, 0x0e, 0x10, 0x33, 0x0e, 0x11, 0x33, 0x0e, 0x11, 0x33, 0x0e,
+ 0x11, 0x33, 0x0e, 0x11, 0x33, 0x0e, 0x11, 0x33, 0x0f, 0x11, 0x33, 0x10,
+ 0x11, 0x33, 0x0f, 0x11, 0x32, 0x0f, 0x11, 0x32, 0x0f, 0x11, 0x34, 0x10,
+ 0x11, 0x33, 0x10, 0x11, 0x33, 0x10, 0x11, 0x33, 0x10, 0x11, 0x33, 0x10,
+ 0x11, 0x33, 0x10, 0x11, 0x33, 0x10, 0x11, 0x33, 0x10, 0x11, 0x33, 0x10,
+ 0x11, 0x33, 0x10, 0x11, 0x33, 0x10, 0x11, 0x33, 0x10, 0x11, 0x33, 0x10,
+ 0x11, 0x33, 0x10, 0x11, 0x33, 0x10, 0x11, 0x33, 0x10, 0x10, 0x33, 0x10,
+ 0x10, 0x33, 0x10, 0x10, 0x33, 0x10, 0x10, 0x33, 0x10, 0x10, 0x33, 0x10,
+ 0x10, 0x33, 0x10, 0x10, 0x33, 0x10, 0x10, 0x33, 0x10, 0x10, 0x33, 0x10,
+ 0x10, 0x33, 0x10, 0x10, 0x33, 0x10, 0x10, 0x33, 0x10, 0x10, 0x33, 0x10,
+ 0x10, 0x33, 0x10, 0x10, 0x33, 0x10, 0x10, 0x33, 0x10, 0x11, 0x33, 0x0e,
+ 0x11, 0x33, 0x10, 0x11, 0x31, 0x10, 0x11, 0x31, 0x10, 0x11, 0x33, 0x0e,
+ 0x11, 0x33, 0x0d, 0x10, 0x33, 0x0f, 0x10, 0x32, 0x10, 0x0f, 0x32, 0x0e,
+ 0x11, 0x32, 0x0e, 0x13, 0x33, 0x10, 0x11, 0x29, 0x0d, 0x06, 0x15, 0x06,
+ 0x05, 0x0f, 0x07, 0x05, 0x0b, 0x05, 0x08, 0x0b, 0x08, 0x07, 0x09, 0x08,
+ 0x08, 0x09, 0x09, 0x08, 0x09, 0x08, 0x08, 0x09, 0x08, 0x08, 0x09, 0x08,
+ 0x08, 0x09, 0x08, 0x08, 0x09, 0x08, 0x08, 0x09, 0x08, 0x08, 0x08, 0x08,
+ 0x09, 0x09, 0x09, 0x07, 0x07, 0x07, 0x06, 0x06, 0x05, 0x05, 0x05, 0x04,
+ 0x0a, 0x0a, 0x09, 0x07, 0x07, 0x06, 0x06, 0x06, 0x05, 0x05, 0x04, 0x04,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x04, 0x02,
+ 0x07, 0x07, 0x05, 0x07, 0x08, 0x04, 0x04, 0x0c, 0x03, 0x08, 0x1e, 0x08,
+ 0x09, 0x2b, 0x0b, 0x09, 0x2c, 0x0a, 0x09, 0x2d, 0x0a, 0x0c, 0x30, 0x0c,
+ 0x0c, 0x30, 0x0c, 0x0c, 0x30, 0x0c, 0x0c, 0x30, 0x0c, 0x0d, 0x30, 0x0c,
+ 0x0d, 0x30, 0x0c, 0x0d, 0x30, 0x0c, 0x0d, 0x30, 0x0c, 0x0d, 0x30, 0x0d,
+ 0x0d, 0x31, 0x0e, 0x0d, 0x31, 0x0d, 0x0d, 0x2f, 0x0d, 0x0d, 0x2f, 0x0d,
+ 0x0d, 0x31, 0x0e, 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e,
+ 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e,
+ 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e,
+ 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e, 0x0d, 0x30, 0x0e,
+ 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e,
+ 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e,
+ 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e,
+ 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e, 0x0c, 0x30, 0x0e,
+ 0x0d, 0x30, 0x0c, 0x0d, 0x30, 0x0e, 0x0d, 0x2e, 0x0e, 0x0d, 0x2e, 0x0e,
+ 0x0d, 0x30, 0x0c, 0x0d, 0x30, 0x0c, 0x0c, 0x30, 0x0e, 0x0c, 0x2f, 0x0e,
+ 0x0b, 0x2f, 0x0c, 0x0d, 0x2f, 0x0c, 0x10, 0x30, 0x0e, 0x0e, 0x27, 0x0b,
+ 0x04, 0x14, 0x03, 0x02, 0x0d, 0x05, 0x02, 0x0a, 0x04, 0x06, 0x0a, 0x07,
+ 0x06, 0x09, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x05, 0x05, 0x05, 0x04, 0x04, 0x03,
+ 0x03, 0x03, 0x02, 0x07, 0x07, 0x07, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x03, 0x04, 0x02, 0x06, 0x06, 0x04, 0x05, 0x07, 0x02, 0x02, 0x0c, 0x01,
+ 0x06, 0x1e, 0x06, 0x06, 0x28, 0x09, 0x06, 0x29, 0x08, 0x07, 0x2b, 0x09,
+ 0x0a, 0x2e, 0x0b, 0x0b, 0x2e, 0x0b, 0x0a, 0x2e, 0x0b, 0x0b, 0x2e, 0x0b,
+ 0x0c, 0x2e, 0x0b, 0x0c, 0x2e, 0x0b, 0x0c, 0x2e, 0x0b, 0x0c, 0x2e, 0x0b,
+ 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0d, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c,
+ 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c,
+ 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c,
+ 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c,
+ 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c, 0x0c, 0x2e, 0x0c,
+ 0x0c, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c,
+ 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c,
+ 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c,
+ 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c, 0x0b, 0x2e, 0x0c,
+ 0x0b, 0x2e, 0x0c, 0x0c, 0x2f, 0x0b, 0x0c, 0x2e, 0x0c, 0x0c, 0x2c, 0x0d,
+ 0x0c, 0x2c, 0x0d, 0x0b, 0x2e, 0x0b, 0x0c, 0x2e, 0x0a, 0x0a, 0x2e, 0x0c,
+ 0x0a, 0x2e, 0x0d, 0x09, 0x2d, 0x0b, 0x0b, 0x2d, 0x0b, 0x0e, 0x2d, 0x0d,
+ 0x0d, 0x25, 0x0b, 0x03, 0x13, 0x03, 0x01, 0x0d, 0x06, 0x01, 0x0a, 0x03,
+ 0x05, 0x0a, 0x07, 0x05, 0x08, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x04, 0x04, 0x04,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x04, 0x04, 0x04, 0x03, 0x02, 0x03,
+ 0x02, 0x02, 0x03, 0x01, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x00, 0x04, 0x04, 0x03, 0x04, 0x06, 0x03, 0x02, 0x06, 0x01,
+ 0x01, 0x0d, 0x01, 0x04, 0x1e, 0x06, 0x03, 0x26, 0x06, 0x03, 0x27, 0x06,
+ 0x04, 0x29, 0x07, 0x08, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x08, 0x2c, 0x0a,
+ 0x09, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a,
+ 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0b, 0x0a, 0x2c, 0x0b,
+ 0x0a, 0x2c, 0x0b, 0x0a, 0x2c, 0x0b, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a,
+ 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a,
+ 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a,
+ 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a,
+ 0x0a, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a, 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a,
+ 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a,
+ 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a,
+ 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a,
+ 0x09, 0x2c, 0x0a, 0x09, 0x2c, 0x0a, 0x0a, 0x2d, 0x09, 0x0a, 0x2c, 0x0a,
+ 0x0a, 0x2a, 0x0d, 0x0a, 0x2a, 0x0d, 0x09, 0x2c, 0x0a, 0x0a, 0x2c, 0x0a,
+ 0x08, 0x2c, 0x0a, 0x08, 0x2c, 0x0b, 0x08, 0x2b, 0x0a, 0x09, 0x2b, 0x0a,
+ 0x0c, 0x2b, 0x0c, 0x0b, 0x24, 0x0c, 0x02, 0x12, 0x04, 0x01, 0x0d, 0x06,
+ 0x01, 0x09, 0x03, 0x05, 0x09, 0x06, 0x05, 0x07, 0x07, 0x07, 0x06, 0x07,
+ 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x06, 0x06,
+ 0x07, 0x06, 0x06, 0x07, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x06, 0x03, 0x03, 0x06, 0x03,
+ 0x01, 0x05, 0x01, 0x01, 0x0d, 0x02, 0x04, 0x1d, 0x06, 0x01, 0x23, 0x05,
+ 0x01, 0x24, 0x05, 0x02, 0x26, 0x06, 0x06, 0x29, 0x09, 0x08, 0x2a, 0x09,
+ 0x07, 0x29, 0x09, 0x08, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09,
+ 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x0a,
+ 0x09, 0x29, 0x0a, 0x09, 0x2a, 0x0a, 0x09, 0x2a, 0x0a, 0x09, 0x29, 0x09,
+ 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09,
+ 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09,
+ 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09,
+ 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x09, 0x29, 0x09, 0x07, 0x29, 0x09,
+ 0x07, 0x29, 0x09, 0x07, 0x29, 0x09, 0x07, 0x29, 0x09, 0x07, 0x29, 0x09,
+ 0x07, 0x29, 0x09, 0x07, 0x29, 0x09, 0x07, 0x29, 0x09, 0x07, 0x29, 0x09,
+ 0x07, 0x29, 0x09, 0x07, 0x29, 0x09, 0x07, 0x29, 0x09, 0x07, 0x29, 0x09,
+ 0x07, 0x29, 0x09, 0x07, 0x29, 0x09, 0x07, 0x29, 0x09, 0x09, 0x2a, 0x08,
+ 0x09, 0x29, 0x09, 0x09, 0x28, 0x0b, 0x09, 0x28, 0x0c, 0x07, 0x29, 0x0a,
+ 0x07, 0x29, 0x09, 0x05, 0x29, 0x09, 0x05, 0x2a, 0x0a, 0x07, 0x29, 0x09,
+ 0x07, 0x28, 0x09, 0x0b, 0x29, 0x0b, 0x0b, 0x22, 0x0b, 0x02, 0x11, 0x04,
+ 0x01, 0x0c, 0x07, 0x02, 0x09, 0x04, 0x05, 0x08, 0x07, 0x04, 0x06, 0x07,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07,
+ 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x06, 0x05,
+ 0x03, 0x06, 0x03, 0x01, 0x06, 0x01, 0x02, 0x0e, 0x03, 0x04, 0x1c, 0x08,
+ 0x01, 0x21, 0x04, 0x00, 0x23, 0x04, 0x01, 0x25, 0x06, 0x05, 0x28, 0x08,
+ 0x07, 0x29, 0x0a, 0x08, 0x28, 0x09, 0x09, 0x28, 0x09, 0x08, 0x28, 0x09,
+ 0x08, 0x28, 0x09, 0x08, 0x28, 0x09, 0x08, 0x28, 0x09, 0x08, 0x28, 0x09,
+ 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x0a, 0x27, 0x0a, 0x0a, 0x27, 0x0a,
+ 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a,
+ 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a,
+ 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a,
+ 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a, 0x08, 0x28, 0x0a,
+ 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a,
+ 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a,
+ 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a,
+ 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a, 0x06, 0x28, 0x0a, 0x06, 0x28, 0x09,
+ 0x08, 0x28, 0x08, 0x08, 0x28, 0x09, 0x08, 0x27, 0x0a, 0x08, 0x27, 0x0b,
+ 0x06, 0x28, 0x09, 0x06, 0x28, 0x09, 0x04, 0x28, 0x0a, 0x04, 0x29, 0x0a,
+ 0x06, 0x28, 0x0a, 0x07, 0x27, 0x09, 0x0c, 0x28, 0x0b, 0x0c, 0x22, 0x0b,
+ 0x03, 0x11, 0x03, 0x02, 0x0b, 0x07, 0x03, 0x08, 0x06, 0x07, 0x08, 0x08,
+ 0x04, 0x07, 0x07, 0x05, 0x07, 0x07, 0x05, 0x07, 0x07, 0x05, 0x07, 0x07,
+ 0x05, 0x07, 0x07, 0x05, 0x07, 0x07, 0x05, 0x07, 0x07, 0x05, 0x07, 0x07,
+ 0x05, 0x07, 0x07, 0x05, 0x06, 0x06, 0x03, 0x05, 0x05, 0x03, 0x05, 0x05,
+ 0x02, 0x04, 0x04, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x03, 0x07, 0x05, 0x03, 0x07, 0x04, 0x01, 0x07, 0x01, 0x03, 0x0f, 0x04,
+ 0x05, 0x1c, 0x09, 0x01, 0x1f, 0x04, 0x00, 0x22, 0x03, 0x01, 0x23, 0x06,
+ 0x04, 0x26, 0x07, 0x06, 0x28, 0x09, 0x08, 0x26, 0x09, 0x09, 0x27, 0x09,
+ 0x07, 0x27, 0x09, 0x07, 0x27, 0x09, 0x07, 0x27, 0x09, 0x07, 0x27, 0x09,
+ 0x07, 0x27, 0x09, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a, 0x0a, 0x25, 0x0a,
+ 0x0a, 0x25, 0x0a, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a,
+ 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a,
+ 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a,
+ 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a, 0x07, 0x27, 0x0a,
+ 0x07, 0x27, 0x0a, 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a,
+ 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a,
+ 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a,
+ 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a, 0x05, 0x27, 0x0a,
+ 0x05, 0x27, 0x09, 0x07, 0x26, 0x08, 0x07, 0x27, 0x09, 0x07, 0x25, 0x09,
+ 0x07, 0x25, 0x0a, 0x05, 0x27, 0x09, 0x05, 0x27, 0x09, 0x03, 0x27, 0x0a,
+ 0x04, 0x27, 0x09, 0x06, 0x27, 0x0a, 0x07, 0x26, 0x09, 0x0c, 0x27, 0x0b,
+ 0x0d, 0x22, 0x0b, 0x03, 0x10, 0x03, 0x03, 0x0b, 0x07, 0x04, 0x08, 0x06,
+ 0x08, 0x08, 0x09, 0x04, 0x07, 0x07, 0x03, 0x07, 0x07, 0x03, 0x07, 0x07,
+ 0x03, 0x07, 0x07, 0x03, 0x07, 0x07, 0x03, 0x07, 0x07, 0x03, 0x07, 0x07,
+ 0x03, 0x07, 0x07, 0x03, 0x07, 0x07, 0x04, 0x07, 0x07, 0x02, 0x06, 0x06,
+ 0x03, 0x06, 0x06, 0x03, 0x05, 0x05, 0x01, 0x02, 0x02, 0x01, 0x03, 0x03,
+ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x03, 0x07, 0x05, 0x02, 0x05, 0x03, 0x01, 0x05, 0x01,
+ 0x03, 0x0e, 0x03, 0x07, 0x1c, 0x09, 0x01, 0x1f, 0x04, 0x00, 0x21, 0x02,
+ 0x01, 0x22, 0x05, 0x04, 0x25, 0x06, 0x07, 0x27, 0x09, 0x08, 0x25, 0x08,
+ 0x09, 0x26, 0x08, 0x08, 0x26, 0x08, 0x08, 0x26, 0x08, 0x08, 0x26, 0x08,
+ 0x08, 0x26, 0x08, 0x08, 0x26, 0x09, 0x08, 0x26, 0x0a, 0x08, 0x26, 0x0a,
+ 0x0a, 0x24, 0x0a, 0x0a, 0x24, 0x0a, 0x08, 0x26, 0x0a, 0x08, 0x26, 0x0a,
+ 0x08, 0x26, 0x0a, 0x08, 0x26, 0x0a, 0x08, 0x26, 0x0a, 0x08, 0x26, 0x0a,
+ 0x08, 0x26, 0x0a, 0x08, 0x26, 0x0a, 0x08, 0x25, 0x0a, 0x08, 0x25, 0x0a,
+ 0x08, 0x25, 0x0a, 0x08, 0x25, 0x0a, 0x08, 0x25, 0x0a, 0x08, 0x25, 0x0a,
+ 0x08, 0x25, 0x0a, 0x08, 0x25, 0x0a, 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a,
+ 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a,
+ 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a,
+ 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a, 0x06, 0x25, 0x0a,
+ 0x06, 0x25, 0x0a, 0x06, 0x25, 0x08, 0x08, 0x25, 0x07, 0x08, 0x25, 0x08,
+ 0x08, 0x24, 0x09, 0x08, 0x24, 0x0a, 0x06, 0x25, 0x08, 0x05, 0x25, 0x08,
+ 0x03, 0x25, 0x0a, 0x04, 0x25, 0x09, 0x06, 0x26, 0x09, 0x07, 0x25, 0x08,
+ 0x0c, 0x26, 0x0b, 0x0d, 0x20, 0x0b, 0x03, 0x0f, 0x03, 0x03, 0x0a, 0x07,
+ 0x05, 0x06, 0x06, 0x08, 0x07, 0x08, 0x04, 0x06, 0x06, 0x02, 0x06, 0x06,
+ 0x02, 0x06, 0x06, 0x02, 0x06, 0x06, 0x02, 0x06, 0x06, 0x02, 0x06, 0x06,
+ 0x02, 0x06, 0x06, 0x02, 0x06, 0x06, 0x02, 0x06, 0x06, 0x03, 0x07, 0x07,
+ 0x02, 0x05, 0x05, 0x02, 0x05, 0x05, 0x02, 0x05, 0x05, 0x01, 0x02, 0x02,
+ 0x02, 0x04, 0x04, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x06, 0x04, 0x01, 0x04, 0x02,
+ 0x00, 0x04, 0x00, 0x02, 0x0e, 0x03, 0x07, 0x1c, 0x09, 0x02, 0x1e, 0x03,
+ 0x00, 0x20, 0x02, 0x01, 0x21, 0x04, 0x05, 0x24, 0x06, 0x07, 0x26, 0x09,
+ 0x08, 0x24, 0x07, 0x09, 0x25, 0x07, 0x08, 0x25, 0x07, 0x08, 0x25, 0x07,
+ 0x08, 0x25, 0x07, 0x08, 0x25, 0x07, 0x08, 0x25, 0x08, 0x08, 0x25, 0x09,
+ 0x08, 0x25, 0x09, 0x09, 0x24, 0x09, 0x09, 0x24, 0x09, 0x08, 0x25, 0x09,
+ 0x08, 0x25, 0x09, 0x08, 0x25, 0x09, 0x08, 0x25, 0x09, 0x08, 0x25, 0x09,
+ 0x08, 0x25, 0x09, 0x08, 0x25, 0x09, 0x08, 0x25, 0x09, 0x08, 0x24, 0x09,
+ 0x08, 0x24, 0x09, 0x08, 0x24, 0x09, 0x08, 0x24, 0x09, 0x08, 0x24, 0x09,
+ 0x08, 0x24, 0x09, 0x08, 0x24, 0x09, 0x08, 0x24, 0x09, 0x06, 0x24, 0x09,
+ 0x06, 0x24, 0x09, 0x06, 0x24, 0x09, 0x06, 0x24, 0x09, 0x06, 0x24, 0x09,
+ 0x06, 0x24, 0x09, 0x06, 0x24, 0x09, 0x06, 0x24, 0x09, 0x06, 0x24, 0x09,
+ 0x06, 0x24, 0x09, 0x06, 0x24, 0x09, 0x06, 0x24, 0x09, 0x06, 0x24, 0x09,
+ 0x06, 0x24, 0x09, 0x06, 0x24, 0x09, 0x06, 0x24, 0x07, 0x08, 0x25, 0x06,
+ 0x08, 0x24, 0x07, 0x08, 0x24, 0x0a, 0x08, 0x23, 0x0a, 0x06, 0x24, 0x07,
+ 0x06, 0x24, 0x07, 0x03, 0x24, 0x09, 0x04, 0x24, 0x0a, 0x07, 0x25, 0x09,
+ 0x08, 0x24, 0x08, 0x0c, 0x26, 0x0a, 0x0d, 0x1f, 0x0a, 0x03, 0x0f, 0x03,
+ 0x04, 0x0a, 0x07, 0x06, 0x06, 0x05, 0x08, 0x07, 0x07, 0x04, 0x05, 0x05,
+ 0x02, 0x05, 0x05, 0x02, 0x05, 0x05, 0x02, 0x05, 0x05, 0x02, 0x05, 0x05,
+ 0x02, 0x05, 0x05, 0x02, 0x05, 0x05, 0x02, 0x05, 0x05, 0x02, 0x05, 0x05,
+ 0x03, 0x06, 0x06, 0x01, 0x04, 0x04, 0x01, 0x04, 0x04, 0x01, 0x04, 0x04,
+ 0x01, 0x02, 0x02, 0x02, 0x05, 0x05, 0x01, 0x04, 0x04, 0x00, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x06, 0x03,
+ 0x01, 0x03, 0x01, 0x00, 0x02, 0x00, 0x02, 0x0d, 0x02, 0x08, 0x1c, 0x08,
+ 0x02, 0x1d, 0x02, 0x00, 0x1f, 0x01, 0x02, 0x20, 0x03, 0x06, 0x23, 0x05,
+ 0x08, 0x24, 0x08, 0x08, 0x23, 0x06, 0x09, 0x23, 0x06, 0x09, 0x23, 0x06,
+ 0x09, 0x23, 0x06, 0x09, 0x23, 0x06, 0x09, 0x23, 0x06, 0x09, 0x23, 0x07,
+ 0x09, 0x23, 0x09, 0x09, 0x23, 0x09, 0x09, 0x23, 0x09, 0x09, 0x23, 0x09,
+ 0x09, 0x23, 0x09, 0x09, 0x23, 0x09, 0x09, 0x23, 0x09, 0x09, 0x23, 0x09,
+ 0x09, 0x23, 0x09, 0x09, 0x23, 0x09, 0x09, 0x23, 0x09, 0x09, 0x23, 0x09,
+ 0x09, 0x22, 0x09, 0x09, 0x22, 0x09, 0x09, 0x22, 0x09, 0x09, 0x22, 0x09,
+ 0x09, 0x22, 0x09, 0x09, 0x22, 0x09, 0x09, 0x22, 0x09, 0x09, 0x22, 0x09,
+ 0x07, 0x22, 0x09, 0x07, 0x22, 0x09, 0x07, 0x22, 0x09, 0x07, 0x22, 0x09,
+ 0x07, 0x22, 0x09, 0x07, 0x22, 0x09, 0x07, 0x22, 0x09, 0x07, 0x22, 0x09,
+ 0x07, 0x22, 0x09, 0x07, 0x22, 0x09, 0x07, 0x22, 0x09, 0x07, 0x22, 0x09,
+ 0x07, 0x22, 0x09, 0x07, 0x22, 0x09, 0x07, 0x22, 0x09, 0x07, 0x22, 0x06,
+ 0x09, 0x23, 0x05, 0x09, 0x22, 0x06, 0x09, 0x23, 0x09, 0x09, 0x22, 0x09,
+ 0x07, 0x23, 0x07, 0x06, 0x22, 0x06, 0x04, 0x22, 0x09, 0x04, 0x22, 0x0a,
+ 0x07, 0x23, 0x09, 0x08, 0x22, 0x07, 0x0c, 0x24, 0x0a, 0x0d, 0x1e, 0x0a,
+ 0x03, 0x0e, 0x03, 0x04, 0x09, 0x07, 0x07, 0x05, 0x04, 0x08, 0x06, 0x06,
+ 0x04, 0x04, 0x04, 0x01, 0x03, 0x03, 0x01, 0x03, 0x03, 0x01, 0x03, 0x03,
+ 0x01, 0x03, 0x03, 0x01, 0x03, 0x03, 0x01, 0x03, 0x03, 0x01, 0x03, 0x03,
+ 0x01, 0x03, 0x03, 0x02, 0x05, 0x05, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x02, 0x04, 0x04,
+ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x04, 0x02, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x02, 0x0d, 0x02,
+ 0x07, 0x1b, 0x08, 0x02, 0x1c, 0x02, 0x01, 0x1d, 0x01, 0x02, 0x1e, 0x03,
+ 0x06, 0x21, 0x05, 0x08, 0x21, 0x07, 0x07, 0x21, 0x06, 0x09, 0x21, 0x07,
+ 0x09, 0x21, 0x07, 0x09, 0x21, 0x07, 0x09, 0x21, 0x07, 0x09, 0x21, 0x07,
+ 0x09, 0x21, 0x08, 0x09, 0x21, 0x09, 0x09, 0x21, 0x09, 0x09, 0x21, 0x09,
+ 0x09, 0x21, 0x09, 0x07, 0x21, 0x08, 0x07, 0x21, 0x08, 0x07, 0x21, 0x08,
+ 0x07, 0x21, 0x08, 0x07, 0x21, 0x08, 0x07, 0x21, 0x08, 0x07, 0x21, 0x08,
+ 0x07, 0x21, 0x08, 0x08, 0x21, 0x09, 0x08, 0x21, 0x09, 0x08, 0x21, 0x09,
+ 0x08, 0x21, 0x09, 0x08, 0x21, 0x09, 0x08, 0x21, 0x09, 0x08, 0x21, 0x09,
+ 0x08, 0x21, 0x09, 0x07, 0x21, 0x09, 0x07, 0x21, 0x09, 0x07, 0x21, 0x09,
+ 0x07, 0x21, 0x09, 0x07, 0x21, 0x09, 0x07, 0x21, 0x09, 0x07, 0x21, 0x09,
+ 0x07, 0x21, 0x09, 0x07, 0x21, 0x09, 0x07, 0x21, 0x09, 0x07, 0x21, 0x09,
+ 0x07, 0x21, 0x09, 0x07, 0x21, 0x09, 0x07, 0x21, 0x09, 0x07, 0x21, 0x09,
+ 0x07, 0x21, 0x07, 0x09, 0x22, 0x06, 0x09, 0x21, 0x07, 0x09, 0x21, 0x09,
+ 0x09, 0x20, 0x09, 0x07, 0x22, 0x06, 0x07, 0x21, 0x06, 0x04, 0x21, 0x08,
+ 0x04, 0x21, 0x08, 0x07, 0x22, 0x08, 0x08, 0x21, 0x07, 0x0b, 0x22, 0x0a,
+ 0x0c, 0x1c, 0x09, 0x03, 0x0f, 0x03, 0x03, 0x09, 0x05, 0x06, 0x05, 0x03,
+ 0x08, 0x06, 0x06, 0x04, 0x04, 0x04, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03,
+ 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03,
+ 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x02, 0x03, 0x03,
+ 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x06, 0x06,
+ 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x04, 0x04, 0x04,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00,
+ 0x02, 0x0c, 0x02, 0x07, 0x1a, 0x08, 0x03, 0x1b, 0x03, 0x02, 0x1b, 0x01,
+ 0x03, 0x1c, 0x04, 0x06, 0x1f, 0x06, 0x07, 0x1f, 0x06, 0x07, 0x1f, 0x06,
+ 0x08, 0x1f, 0x08, 0x08, 0x1f, 0x08, 0x08, 0x1f, 0x08, 0x08, 0x1f, 0x08,
+ 0x08, 0x1f, 0x08, 0x08, 0x1f, 0x08, 0x08, 0x1f, 0x08, 0x08, 0x1f, 0x08,
+ 0x08, 0x1f, 0x08, 0x08, 0x1f, 0x08, 0x05, 0x1f, 0x06, 0x05, 0x1f, 0x07,
+ 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07,
+ 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x06, 0x07, 0x21, 0x08, 0x07, 0x21, 0x08,
+ 0x07, 0x21, 0x08, 0x07, 0x21, 0x08, 0x07, 0x21, 0x08, 0x07, 0x21, 0x08,
+ 0x07, 0x21, 0x08, 0x07, 0x21, 0x08, 0x06, 0x21, 0x08, 0x06, 0x21, 0x08,
+ 0x06, 0x21, 0x08, 0x06, 0x21, 0x08, 0x06, 0x21, 0x08, 0x06, 0x21, 0x08,
+ 0x06, 0x21, 0x08, 0x06, 0x21, 0x08, 0x06, 0x21, 0x08, 0x06, 0x21, 0x08,
+ 0x06, 0x21, 0x08, 0x06, 0x21, 0x08, 0x06, 0x21, 0x08, 0x06, 0x21, 0x08,
+ 0x06, 0x21, 0x08, 0x06, 0x21, 0x08, 0x08, 0x20, 0x07, 0x08, 0x1f, 0x08,
+ 0x08, 0x1f, 0x09, 0x08, 0x1f, 0x08, 0x08, 0x21, 0x06, 0x08, 0x21, 0x06,
+ 0x05, 0x20, 0x07, 0x05, 0x20, 0x06, 0x07, 0x20, 0x06, 0x07, 0x1f, 0x06,
+ 0x0a, 0x20, 0x0b, 0x0a, 0x1b, 0x0a, 0x03, 0x10, 0x04, 0x02, 0x09, 0x03,
+ 0x04, 0x07, 0x04, 0x07, 0x06, 0x06, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04,
+ 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04,
+ 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x03, 0x04, 0x04, 0x01, 0x02, 0x02, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x05, 0x05, 0x05, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x03, 0x00, 0x01, 0x0b, 0x02, 0x06, 0x19, 0x07, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x01, 0x04, 0x1b, 0x04, 0x07, 0x1d, 0x06, 0x07, 0x1d, 0x05,
+ 0x06, 0x1d, 0x05, 0x08, 0x1e, 0x07, 0x07, 0x1d, 0x07, 0x07, 0x1d, 0x07,
+ 0x07, 0x1d, 0x07, 0x07, 0x1d, 0x07, 0x07, 0x1d, 0x07, 0x07, 0x1d, 0x07,
+ 0x07, 0x1d, 0x07, 0x07, 0x1d, 0x07, 0x06, 0x1d, 0x07, 0x03, 0x1d, 0x05,
+ 0x02, 0x1d, 0x05, 0x02, 0x1d, 0x05, 0x02, 0x1d, 0x05, 0x02, 0x1d, 0x05,
+ 0x02, 0x1d, 0x05, 0x02, 0x1d, 0x05, 0x02, 0x1d, 0x05, 0x05, 0x1f, 0x07,
+ 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07,
+ 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07,
+ 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07,
+ 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07,
+ 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07,
+ 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x05, 0x1f, 0x07, 0x07, 0x1d, 0x07,
+ 0x07, 0x1d, 0x07, 0x08, 0x1d, 0x07, 0x08, 0x1d, 0x07, 0x07, 0x1f, 0x05,
+ 0x07, 0x1f, 0x06, 0x05, 0x1f, 0x05, 0x05, 0x1f, 0x04, 0x05, 0x1f, 0x05,
+ 0x06, 0x1e, 0x06, 0x09, 0x1e, 0x0b, 0x09, 0x19, 0x09, 0x04, 0x10, 0x03,
+ 0x01, 0x0a, 0x01, 0x02, 0x07, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x03, 0x03, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x04, 0x04, 0x04, 0x06, 0x05, 0x05, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0c, 0x01, 0x06, 0x19, 0x06,
+ 0x01, 0x1a, 0x02, 0x01, 0x1a, 0x02, 0x03, 0x1c, 0x03, 0x06, 0x1d, 0x05,
+ 0x06, 0x1d, 0x05, 0x06, 0x1d, 0x05, 0x07, 0x1d, 0x06, 0x05, 0x1c, 0x05,
+ 0x05, 0x1c, 0x05, 0x05, 0x1c, 0x05, 0x05, 0x1c, 0x05, 0x05, 0x1c, 0x05,
+ 0x05, 0x1c, 0x05, 0x05, 0x1c, 0x05, 0x05, 0x1c, 0x05, 0x05, 0x1c, 0x05,
+ 0x02, 0x1c, 0x03, 0x01, 0x1c, 0x04, 0x01, 0x1c, 0x04, 0x01, 0x1c, 0x04,
+ 0x01, 0x1c, 0x04, 0x01, 0x1c, 0x04, 0x01, 0x1c, 0x04, 0x01, 0x1c, 0x03,
+ 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05,
+ 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05,
+ 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05,
+ 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05,
+ 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05,
+ 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05, 0x03, 0x1e, 0x05,
+ 0x05, 0x1c, 0x06, 0x05, 0x1c, 0x06, 0x07, 0x1c, 0x06, 0x07, 0x1c, 0x06,
+ 0x05, 0x1d, 0x04, 0x05, 0x1d, 0x05, 0x03, 0x1e, 0x04, 0x03, 0x1e, 0x03,
+ 0x04, 0x1f, 0x05, 0x06, 0x1d, 0x06, 0x09, 0x1d, 0x0a, 0x09, 0x18, 0x09,
+ 0x03, 0x0f, 0x02, 0x00, 0x09, 0x01, 0x02, 0x06, 0x03, 0x05, 0x05, 0x05,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x05, 0x05, 0x05, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07,
+ 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0c, 0x01,
+ 0x05, 0x19, 0x04, 0x01, 0x1a, 0x02, 0x00, 0x1a, 0x02, 0x03, 0x1c, 0x02,
+ 0x06, 0x1d, 0x05, 0x06, 0x1d, 0x05, 0x06, 0x1d, 0x05, 0x06, 0x1d, 0x04,
+ 0x03, 0x1b, 0x03, 0x03, 0x1b, 0x03, 0x03, 0x1b, 0x03, 0x03, 0x1b, 0x03,
+ 0x03, 0x1b, 0x03, 0x03, 0x1b, 0x03, 0x03, 0x1b, 0x03, 0x03, 0x1b, 0x03,
+ 0x03, 0x1b, 0x03, 0x01, 0x1b, 0x02, 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02,
+ 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02,
+ 0x00, 0x1b, 0x02, 0x01, 0x1d, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1d, 0x03, 0x03, 0x1b, 0x04, 0x03, 0x1b, 0x04, 0x06, 0x1b, 0x04,
+ 0x06, 0x1b, 0x04, 0x03, 0x1b, 0x03, 0x03, 0x1b, 0x04, 0x01, 0x1e, 0x02,
+ 0x01, 0x1e, 0x02, 0x02, 0x1e, 0x05, 0x06, 0x1d, 0x06, 0x09, 0x1c, 0x09,
+ 0x09, 0x18, 0x09, 0x02, 0x0f, 0x02, 0x00, 0x08, 0x01, 0x02, 0x06, 0x03,
+ 0x05, 0x05, 0x05, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x05, 0x05, 0x05,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x07, 0x07, 0x07,
+ 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00,
+ 0x01, 0x0b, 0x01, 0x05, 0x18, 0x05, 0x01, 0x19, 0x02, 0x00, 0x19, 0x01,
+ 0x02, 0x1b, 0x02, 0x05, 0x1c, 0x05, 0x05, 0x1c, 0x05, 0x05, 0x1c, 0x04,
+ 0x05, 0x1c, 0x04, 0x03, 0x1a, 0x03, 0x03, 0x1a, 0x03, 0x03, 0x1a, 0x03,
+ 0x03, 0x1a, 0x03, 0x03, 0x1a, 0x03, 0x03, 0x1a, 0x03, 0x03, 0x1a, 0x03,
+ 0x03, 0x1a, 0x03, 0x03, 0x1a, 0x03, 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02,
+ 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02,
+ 0x00, 0x1b, 0x02, 0x00, 0x1b, 0x02, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03,
+ 0x01, 0x1c, 0x03, 0x01, 0x1c, 0x03, 0x03, 0x1a, 0x04, 0x03, 0x1b, 0x04,
+ 0x05, 0x1b, 0x04, 0x05, 0x1b, 0x04, 0x03, 0x1b, 0x03, 0x03, 0x1b, 0x04,
+ 0x01, 0x1d, 0x02, 0x01, 0x1d, 0x02, 0x02, 0x1d, 0x05, 0x04, 0x1c, 0x06,
+ 0x09, 0x1c, 0x09, 0x09, 0x17, 0x09, 0x02, 0x0f, 0x02, 0x00, 0x08, 0x00,
+ 0x02, 0x05, 0x02, 0x05, 0x04, 0x04, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x05, 0x05, 0x05, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x08, 0x08, 0x08, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x05,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x03, 0x00, 0x01, 0x0b, 0x01, 0x06, 0x17, 0x05, 0x01, 0x19, 0x02,
+ 0x00, 0x19, 0x01, 0x02, 0x1b, 0x01, 0x05, 0x1c, 0x04, 0x05, 0x1c, 0x04,
+ 0x04, 0x1b, 0x03, 0x04, 0x1c, 0x04, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x03, 0x1a, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1c, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1c, 0x02, 0x03, 0x1a, 0x05,
+ 0x02, 0x1a, 0x05, 0x04, 0x1a, 0x05, 0x04, 0x1a, 0x05, 0x02, 0x1a, 0x03,
+ 0x03, 0x1a, 0x03, 0x02, 0x1c, 0x01, 0x02, 0x1c, 0x01, 0x03, 0x1d, 0x04,
+ 0x04, 0x1c, 0x05, 0x09, 0x1c, 0x08, 0x09, 0x17, 0x08, 0x02, 0x0e, 0x02,
+ 0x00, 0x07, 0x00, 0x01, 0x05, 0x02, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x03, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x09, 0x09, 0x09, 0x0c, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b,
+ 0x07, 0x07, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0b, 0x01, 0x06, 0x17, 0x06,
+ 0x01, 0x18, 0x02, 0x00, 0x17, 0x00, 0x01, 0x1a, 0x01, 0x04, 0x1b, 0x04,
+ 0x04, 0x1b, 0x04, 0x03, 0x1a, 0x03, 0x03, 0x1a, 0x03, 0x02, 0x19, 0x02,
+ 0x02, 0x19, 0x02, 0x02, 0x19, 0x02, 0x02, 0x19, 0x02, 0x02, 0x19, 0x02,
+ 0x02, 0x19, 0x02, 0x02, 0x19, 0x02, 0x02, 0x19, 0x02, 0x02, 0x19, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02, 0x01, 0x1b, 0x02,
+ 0x03, 0x19, 0x05, 0x02, 0x1a, 0x05, 0x02, 0x1a, 0x05, 0x02, 0x1a, 0x05,
+ 0x02, 0x1a, 0x03, 0x03, 0x19, 0x03, 0x02, 0x1b, 0x01, 0x02, 0x1a, 0x01,
+ 0x03, 0x1b, 0x04, 0x03, 0x1a, 0x05, 0x09, 0x1b, 0x08, 0x09, 0x16, 0x08,
+ 0x02, 0x0e, 0x02, 0x00, 0x07, 0x00, 0x01, 0x04, 0x01, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x09, 0x09, 0x09, 0x0d, 0x0d, 0x0d,
+ 0x0c, 0x0c, 0x0c, 0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0b, 0x01,
+ 0x06, 0x16, 0x05, 0x01, 0x17, 0x02, 0x00, 0x16, 0x00, 0x01, 0x19, 0x01,
+ 0x03, 0x1a, 0x03, 0x03, 0x1a, 0x03, 0x02, 0x19, 0x02, 0x03, 0x1a, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x02, 0x1a, 0x03, 0x02, 0x1a, 0x03, 0x02, 0x1a, 0x03,
+ 0x02, 0x1a, 0x03, 0x02, 0x1a, 0x03, 0x02, 0x1a, 0x03, 0x02, 0x1a, 0x03,
+ 0x02, 0x1a, 0x03, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02, 0x02, 0x1a, 0x02,
+ 0x02, 0x1a, 0x02, 0x03, 0x19, 0x04, 0x02, 0x19, 0x04, 0x02, 0x19, 0x04,
+ 0x02, 0x19, 0x04, 0x02, 0x19, 0x02, 0x03, 0x19, 0x03, 0x01, 0x1a, 0x02,
+ 0x01, 0x1a, 0x02, 0x02, 0x1a, 0x04, 0x03, 0x19, 0x04, 0x07, 0x1b, 0x08,
+ 0x08, 0x16, 0x08, 0x02, 0x0e, 0x01, 0x00, 0x07, 0x00, 0x01, 0x04, 0x01,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x08, 0x08, 0x08,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07, 0x07, 0x07, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00,
+ 0x01, 0x0a, 0x01, 0x06, 0x16, 0x04, 0x01, 0x17, 0x01, 0x00, 0x16, 0x00,
+ 0x02, 0x18, 0x01, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x18, 0x02,
+ 0x03, 0x18, 0x03, 0x04, 0x19, 0x04, 0x04, 0x19, 0x04, 0x04, 0x19, 0x04,
+ 0x04, 0x19, 0x04, 0x04, 0x19, 0x04, 0x04, 0x19, 0x04, 0x04, 0x19, 0x04,
+ 0x04, 0x19, 0x04, 0x04, 0x19, 0x04, 0x03, 0x1a, 0x04, 0x03, 0x1a, 0x04,
+ 0x03, 0x1a, 0x04, 0x03, 0x1a, 0x04, 0x03, 0x1a, 0x04, 0x03, 0x1a, 0x04,
+ 0x03, 0x1a, 0x04, 0x03, 0x1a, 0x04, 0x03, 0x18, 0x02, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x18, 0x03, 0x03, 0x19, 0x03,
+ 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x19, 0x03, 0x03, 0x18, 0x03,
+ 0x01, 0x1a, 0x03, 0x01, 0x19, 0x03, 0x01, 0x1a, 0x03, 0x03, 0x19, 0x04,
+ 0x06, 0x19, 0x07, 0x07, 0x15, 0x07, 0x02, 0x0d, 0x01, 0x00, 0x08, 0x00,
+ 0x00, 0x04, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x07, 0x07, 0x07, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x07, 0x07, 0x07,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x03, 0x00, 0x01, 0x0a, 0x01, 0x06, 0x14, 0x04, 0x01, 0x15, 0x01,
+ 0x00, 0x15, 0x00, 0x02, 0x17, 0x02, 0x03, 0x17, 0x03, 0x02, 0x17, 0x03,
+ 0x03, 0x17, 0x03, 0x02, 0x16, 0x03, 0x04, 0x18, 0x05, 0x04, 0x18, 0x05,
+ 0x04, 0x18, 0x05, 0x04, 0x18, 0x05, 0x04, 0x18, 0x05, 0x04, 0x18, 0x05,
+ 0x04, 0x18, 0x05, 0x04, 0x18, 0x05, 0x04, 0x18, 0x05, 0x04, 0x18, 0x05,
+ 0x04, 0x18, 0x05, 0x04, 0x18, 0x05, 0x04, 0x18, 0x05, 0x04, 0x18, 0x05,
+ 0x04, 0x18, 0x05, 0x04, 0x18, 0x05, 0x04, 0x18, 0x05, 0x03, 0x16, 0x03,
+ 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03,
+ 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03,
+ 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03,
+ 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03,
+ 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03,
+ 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x03, 0x17, 0x03, 0x02, 0x17, 0x02,
+ 0x02, 0x17, 0x02, 0x03, 0x17, 0x02, 0x03, 0x17, 0x02, 0x03, 0x17, 0x03,
+ 0x03, 0x17, 0x03, 0x01, 0x18, 0x03, 0x01, 0x18, 0x03, 0x01, 0x18, 0x02,
+ 0x03, 0x17, 0x03, 0x05, 0x18, 0x07, 0x06, 0x15, 0x07, 0x02, 0x0d, 0x01,
+ 0x00, 0x08, 0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09,
+ 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0a, 0x01, 0x04, 0x13, 0x05,
+ 0x01, 0x14, 0x01, 0x00, 0x14, 0x00, 0x02, 0x16, 0x02, 0x03, 0x16, 0x03,
+ 0x03, 0x16, 0x03, 0x03, 0x16, 0x03, 0x03, 0x15, 0x03, 0x03, 0x16, 0x04,
+ 0x03, 0x16, 0x04, 0x03, 0x16, 0x04, 0x03, 0x16, 0x04, 0x03, 0x16, 0x04,
+ 0x03, 0x16, 0x04, 0x03, 0x16, 0x04, 0x03, 0x16, 0x04, 0x03, 0x16, 0x04,
+ 0x03, 0x16, 0x04, 0x03, 0x16, 0x04, 0x03, 0x16, 0x04, 0x03, 0x16, 0x04,
+ 0x03, 0x16, 0x04, 0x03, 0x16, 0x04, 0x03, 0x16, 0x04, 0x03, 0x16, 0x04,
+ 0x02, 0x15, 0x02, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03,
+ 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03,
+ 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03,
+ 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03,
+ 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03,
+ 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03,
+ 0x01, 0x16, 0x01, 0x01, 0x16, 0x01, 0x02, 0x16, 0x03, 0x02, 0x16, 0x03,
+ 0x02, 0x16, 0x03, 0x02, 0x16, 0x03, 0x01, 0x16, 0x02, 0x01, 0x16, 0x02,
+ 0x00, 0x17, 0x01, 0x02, 0x16, 0x02, 0x06, 0x17, 0x06, 0x06, 0x14, 0x07,
+ 0x01, 0x0c, 0x01, 0x00, 0x07, 0x00, 0x00, 0x04, 0x02, 0x02, 0x03, 0x03,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x05, 0x05, 0x05, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x09, 0x01,
+ 0x03, 0x11, 0x06, 0x01, 0x12, 0x01, 0x00, 0x12, 0x00, 0x02, 0x14, 0x03,
+ 0x03, 0x14, 0x04, 0x03, 0x14, 0x04, 0x03, 0x14, 0x04, 0x03, 0x14, 0x04,
+ 0x02, 0x14, 0x04, 0x02, 0x14, 0x04, 0x02, 0x14, 0x04, 0x02, 0x14, 0x04,
+ 0x02, 0x14, 0x04, 0x02, 0x14, 0x04, 0x02, 0x14, 0x04, 0x02, 0x14, 0x04,
+ 0x02, 0x14, 0x04, 0x02, 0x14, 0x04, 0x02, 0x14, 0x04, 0x02, 0x14, 0x04,
+ 0x02, 0x14, 0x04, 0x02, 0x14, 0x04, 0x02, 0x14, 0x04, 0x02, 0x14, 0x04,
+ 0x03, 0x14, 0x04, 0x01, 0x14, 0x02, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03,
+ 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03,
+ 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03,
+ 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03,
+ 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03,
+ 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x00, 0x14, 0x01, 0x00, 0x14, 0x01, 0x02, 0x14, 0x03,
+ 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x01, 0x14, 0x03, 0x02, 0x14, 0x01,
+ 0x02, 0x14, 0x02, 0x00, 0x16, 0x00, 0x02, 0x15, 0x02, 0x05, 0x16, 0x06,
+ 0x06, 0x13, 0x07, 0x01, 0x0c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00,
+ 0x01, 0x09, 0x01, 0x03, 0x11, 0x06, 0x01, 0x11, 0x01, 0x00, 0x11, 0x00,
+ 0x02, 0x14, 0x02, 0x03, 0x14, 0x04, 0x03, 0x14, 0x04, 0x02, 0x14, 0x03,
+ 0x03, 0x14, 0x04, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x03, 0x14, 0x03, 0x02, 0x14, 0x02, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x00, 0x14, 0x02, 0x00, 0x14, 0x02,
+ 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03, 0x02, 0x14, 0x03,
+ 0x02, 0x14, 0x01, 0x02, 0x14, 0x02, 0x00, 0x15, 0x01, 0x01, 0x14, 0x02,
+ 0x05, 0x15, 0x06, 0x06, 0x12, 0x07, 0x01, 0x0b, 0x01, 0x00, 0x06, 0x00,
+ 0x00, 0x03, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x03, 0x00, 0x01, 0x09, 0x01, 0x03, 0x11, 0x06, 0x01, 0x11, 0x01,
+ 0x00, 0x11, 0x00, 0x02, 0x13, 0x02, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x02, 0x13, 0x02, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x00, 0x13, 0x03,
+ 0x00, 0x13, 0x03, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02,
+ 0x03, 0x13, 0x03, 0x03, 0x14, 0x02, 0x03, 0x14, 0x02, 0x01, 0x15, 0x02,
+ 0x02, 0x14, 0x02, 0x04, 0x14, 0x04, 0x06, 0x12, 0x06, 0x01, 0x0c, 0x01,
+ 0x00, 0x06, 0x00, 0x01, 0x04, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
+ 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x09, 0x02, 0x03, 0x10, 0x06,
+ 0x01, 0x10, 0x01, 0x00, 0x10, 0x00, 0x02, 0x12, 0x01, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x01, 0x12, 0x02, 0x02, 0x12, 0x03, 0x03, 0x13, 0x02,
+ 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02,
+ 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02,
+ 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02,
+ 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03, 0x03, 0x13, 0x03,
+ 0x00, 0x13, 0x03, 0x00, 0x13, 0x03, 0x03, 0x12, 0x03, 0x03, 0x12, 0x03,
+ 0x04, 0x12, 0x03, 0x04, 0x12, 0x03, 0x03, 0x13, 0x02, 0x03, 0x13, 0x02,
+ 0x01, 0x13, 0x02, 0x02, 0x12, 0x01, 0x03, 0x13, 0x03, 0x05, 0x11, 0x05,
+ 0x01, 0x0c, 0x01, 0x00, 0x05, 0x00, 0x01, 0x04, 0x02, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0a, 0x02,
+ 0x03, 0x10, 0x04, 0x01, 0x0f, 0x01, 0x00, 0x0f, 0x00, 0x01, 0x11, 0x02,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x00, 0x11, 0x02, 0x01, 0x11, 0x02,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03, 0x02, 0x12, 0x03,
+ 0x02, 0x12, 0x03, 0x01, 0x12, 0x03, 0x01, 0x12, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x03, 0x11, 0x03, 0x03, 0x11, 0x03, 0x02, 0x12, 0x01,
+ 0x02, 0x12, 0x01, 0x00, 0x12, 0x01, 0x01, 0x11, 0x01, 0x03, 0x12, 0x04,
+ 0x04, 0x10, 0x05, 0x01, 0x0b, 0x01, 0x00, 0x04, 0x00, 0x00, 0x03, 0x01,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
+ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00,
+ 0x01, 0x0a, 0x02, 0x03, 0x0f, 0x03, 0x01, 0x0e, 0x01, 0x00, 0x0e, 0x00,
+ 0x01, 0x0f, 0x02, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x00, 0x0f, 0x02,
+ 0x00, 0x0f, 0x01, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x02, 0x11, 0x03,
+ 0x02, 0x11, 0x03, 0x02, 0x11, 0x03, 0x01, 0x11, 0x03, 0x01, 0x11, 0x03,
+ 0x02, 0x0f, 0x04, 0x02, 0x0f, 0x04, 0x02, 0x0f, 0x04, 0x02, 0x0f, 0x03,
+ 0x02, 0x11, 0x01, 0x02, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x01,
+ 0x03, 0x12, 0x03, 0x03, 0x10, 0x03, 0x01, 0x0a, 0x01, 0x00, 0x03, 0x00,
+ 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x03, 0x00, 0x01, 0x0a, 0x02, 0x03, 0x0e, 0x03, 0x01, 0x0e, 0x01,
+ 0x00, 0x0d, 0x00, 0x01, 0x0e, 0x01, 0x02, 0x10, 0x03, 0x01, 0x10, 0x02,
+ 0x00, 0x0e, 0x01, 0x00, 0x0f, 0x01, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02, 0x01, 0x10, 0x02,
+ 0x01, 0x10, 0x02, 0x01, 0x0f, 0x03, 0x01, 0x0f, 0x03, 0x01, 0x0e, 0x03,
+ 0x01, 0x0e, 0x03, 0x01, 0x10, 0x00, 0x01, 0x10, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x10, 0x00, 0x03, 0x11, 0x03, 0x04, 0x0f, 0x04, 0x01, 0x0a, 0x01,
+ 0x00, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
+ 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x01, 0x0a, 0x02, 0x02, 0x0e, 0x03,
+ 0x00, 0x0e, 0x01, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x01, 0x01, 0x10, 0x03,
+ 0x01, 0x10, 0x02, 0x00, 0x0e, 0x01, 0x00, 0x0f, 0x02, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x00, 0x0f, 0x01, 0x00, 0x0f, 0x01, 0x01, 0x0e, 0x02, 0x01, 0x0e, 0x02,
+ 0x01, 0x0e, 0x02, 0x01, 0x0e, 0x02, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x01,
+ 0x00, 0x10, 0x01, 0x00, 0x0f, 0x00, 0x02, 0x11, 0x02, 0x04, 0x0f, 0x04,
+ 0x01, 0x0a, 0x01, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x01, 0x02, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x01, 0x09, 0x02,
+ 0x02, 0x0d, 0x03, 0x00, 0x0e, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00,
+ 0x01, 0x0f, 0x02, 0x00, 0x0f, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x01,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0e, 0x00,
+ 0x00, 0x0e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x01,
+ 0x00, 0x0d, 0x01, 0x00, 0x0f, 0x01, 0x00, 0x0e, 0x00, 0x02, 0x10, 0x02,
+ 0x04, 0x0f, 0x04, 0x01, 0x0a, 0x01, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00,
+ 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
+ 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00,
+ 0x01, 0x08, 0x02, 0x01, 0x0c, 0x03, 0x00, 0x0e, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0d, 0x01, 0x01, 0x0f, 0x02, 0x00, 0x0e, 0x01, 0x00, 0x0d, 0x01,
+ 0x00, 0x0e, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x01, 0x00, 0x0d, 0x01, 0x00, 0x0e, 0x01, 0x01, 0x0d, 0x01,
+ 0x04, 0x0e, 0x02, 0x04, 0x0d, 0x04, 0x01, 0x08, 0x01, 0x00, 0x02, 0x00,
+ 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x05, 0x02, 0x01, 0x0c, 0x02, 0x00, 0x0d, 0x02,
+ 0x00, 0x0d, 0x02, 0x00, 0x0d, 0x02, 0x00, 0x0d, 0x02, 0x00, 0x0d, 0x02,
+ 0x00, 0x0d, 0x02, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01,
+ 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x02,
+ 0x00, 0x0c, 0x02, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x0d, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x01, 0x0c, 0x01,
+ 0x02, 0x0c, 0x02, 0x05, 0x0d, 0x03, 0x03, 0x0b, 0x04, 0x00, 0x06, 0x01,
+ 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x03, 0x02, 0x01, 0x0b, 0x01,
+ 0x00, 0x0d, 0x02, 0x00, 0x0d, 0x02, 0x00, 0x0d, 0x02, 0x00, 0x0c, 0x02,
+ 0x00, 0x0c, 0x02, 0x00, 0x0d, 0x02, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01, 0x00, 0x0b, 0x01,
+ 0x00, 0x0b, 0x02, 0x00, 0x0b, 0x02, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x01,
+ 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00,
+ 0x01, 0x0b, 0x01, 0x02, 0x0b, 0x03, 0x05, 0x0c, 0x04, 0x02, 0x09, 0x03,
+ 0x00, 0x05, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x02,
+ 0x01, 0x0a, 0x01, 0x00, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x00, 0x0c, 0x01, 0x00, 0x0c, 0x00,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x01, 0x0c, 0x02, 0x01, 0x0c, 0x02, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x0c, 0x02, 0x04, 0x0c, 0x03,
+ 0x02, 0x0a, 0x03, 0x00, 0x06, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
+ 0x00, 0x04, 0x02, 0x01, 0x0a, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x0c, 0x02, 0x01, 0x0c, 0x02,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x0d, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x0c, 0x02,
+ 0x03, 0x0c, 0x02, 0x02, 0x0a, 0x03, 0x00, 0x06, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x04, 0x02, 0x01, 0x0a, 0x01, 0x00, 0x0c, 0x00,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01,
+ 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x01, 0x0c, 0x01, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x0b, 0x01,
+ 0x01, 0x0b, 0x01, 0x01, 0x0b, 0x01, 0x01, 0x0b, 0x01, 0x00, 0x0c, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0c, 0x01, 0x02, 0x0b, 0x02, 0x01, 0x09, 0x02, 0x00, 0x05, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x04, 0x01, 0x01, 0x09, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x01, 0x02, 0x0a, 0x03, 0x01, 0x08, 0x02,
+ 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x04, 0x01,
+ 0x01, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x01, 0x09, 0x00, 0x01, 0x09, 0x00, 0x00, 0x09, 0x00,
+ 0x00, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x01, 0x09, 0x02,
+ 0x00, 0x07, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x04, 0x02, 0x01, 0x09, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00,
+ 0x00, 0x0b, 0x00, 0x00, 0x0b, 0x00, 0x01, 0x09, 0x00, 0x01, 0x09, 0x00,
+ 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x01,
+ 0x01, 0x09, 0x02, 0x00, 0x07, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x02, 0x00, 0x04, 0x02, 0x01, 0x08, 0x01, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x01,
+ 0x00, 0x08, 0x01, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x01, 0x0a, 0x02, 0x02, 0x0a, 0x02, 0x01, 0x07, 0x02, 0x00, 0x03, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x04, 0x02, 0x01, 0x08, 0x01,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x09, 0x00, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, 0x00,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x0a, 0x00, 0x01, 0x0a, 0x02, 0x02, 0x0a, 0x02, 0x01, 0x07, 0x02,
+ 0x00, 0x03, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0x03, 0x01,
+ 0x00, 0x07, 0x00, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x00, 0x08, 0x00,
+ 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01,
+ 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01,
+ 0x01, 0x0a, 0x01, 0x00, 0x09, 0x00, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x00, 0x01, 0x09, 0x02, 0x01, 0x09, 0x02, 0x01, 0x0a, 0x01,
+ 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01, 0x01, 0x0a, 0x01,
+ 0x01, 0x0a, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x01, 0x09, 0x02,
+ 0x00, 0x07, 0x01, 0x00, 0x03, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x01, 0x01, 0x06, 0x00, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x00, 0x08, 0x00, 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02,
+ 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02,
+ 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02, 0x00, 0x08, 0x00, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x00, 0x09, 0x01, 0x00, 0x08, 0x00, 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02,
+ 0x02, 0x0a, 0x02, 0x02, 0x0a, 0x02, 0x01, 0x0a, 0x02, 0x01, 0x0a, 0x02,
+ 0x01, 0x0a, 0x02, 0x01, 0x0a, 0x02, 0x00, 0x09, 0x01, 0x00, 0x09, 0x01,
+ 0x01, 0x09, 0x02, 0x00, 0x07, 0x01, 0x00, 0x03, 0x01, 0x00, 0x02, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x01, 0x06, 0x00, 0x01, 0x08, 0x01,
+ 0x01, 0x08, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x08, 0x01,
+ 0x01, 0x08, 0x01, 0x01, 0x07, 0x00, 0x02, 0x09, 0x02, 0x02, 0x09, 0x02,
+ 0x02, 0x09, 0x02, 0x02, 0x09, 0x02, 0x02, 0x09, 0x02, 0x02, 0x09, 0x02,
+ 0x02, 0x09, 0x02, 0x02, 0x09, 0x02, 0x02, 0x09, 0x02, 0x01, 0x08, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x09, 0x01,
+ 0x01, 0x09, 0x01, 0x01, 0x09, 0x01, 0x01, 0x08, 0x01, 0x02, 0x09, 0x02,
+ 0x02, 0x09, 0x02, 0x02, 0x09, 0x02, 0x02, 0x09, 0x02, 0x01, 0x09, 0x02,
+ 0x01, 0x09, 0x02, 0x01, 0x09, 0x02, 0x01, 0x09, 0x02, 0x00, 0x08, 0x01,
+ 0x00, 0x09, 0x01, 0x01, 0x08, 0x02, 0x00, 0x07, 0x01, 0x00, 0x03, 0x01,
+ 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x06, 0x01,
+ 0x02, 0x07, 0x01, 0x02, 0x07, 0x00, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x07, 0x00, 0x02, 0x07, 0x01, 0x02, 0x07, 0x01, 0x03, 0x09, 0x02,
+ 0x03, 0x09, 0x02, 0x03, 0x09, 0x02, 0x03, 0x09, 0x02, 0x03, 0x09, 0x02,
+ 0x03, 0x09, 0x02, 0x03, 0x09, 0x02, 0x03, 0x09, 0x02, 0x03, 0x09, 0x02,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02, 0x02, 0x08, 0x02,
+ 0x03, 0x09, 0x02, 0x03, 0x09, 0x02, 0x03, 0x09, 0x02, 0x03, 0x09, 0x02,
+ 0x01, 0x09, 0x02, 0x01, 0x09, 0x02, 0x01, 0x09, 0x02, 0x01, 0x09, 0x02,
+ 0x00, 0x07, 0x01, 0x01, 0x08, 0x02, 0x01, 0x08, 0x03, 0x00, 0x06, 0x02,
+ 0x01, 0x04, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x02, 0x06, 0x01, 0x02, 0x06, 0x01, 0x02, 0x06, 0x00, 0x03, 0x08, 0x02,
+ 0x03, 0x08, 0x02, 0x02, 0x06, 0x00, 0x02, 0x06, 0x01, 0x02, 0x06, 0x01,
+ 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02,
+ 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02,
+ 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02,
+ 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02,
+ 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02,
+ 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02,
+ 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02,
+ 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02, 0x02, 0x07, 0x02,
+ 0x02, 0x07, 0x02, 0x03, 0x08, 0x02, 0x03, 0x08, 0x02, 0x03, 0x08, 0x02,
+ 0x03, 0x08, 0x02, 0x03, 0x08, 0x02, 0x03, 0x08, 0x02, 0x03, 0x08, 0x02,
+ 0x03, 0x08, 0x02, 0x03, 0x07, 0x02, 0x03, 0x07, 0x02, 0x02, 0x08, 0x02,
+ 0x02, 0x07, 0x02, 0x00, 0x07, 0x02, 0x01, 0x08, 0x02, 0x01, 0x07, 0x02,
+ 0x01, 0x07, 0x02, 0x00, 0x06, 0x01, 0x01, 0x07, 0x02, 0x01, 0x06, 0x03,
+ 0x00, 0x05, 0x03, 0x01, 0x04, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x04, 0x03, 0x04,
+ 0x03, 0x03, 0x03, 0x01, 0x05, 0x00, 0x01, 0x05, 0x00, 0x02, 0x07, 0x01,
+ 0x02, 0x07, 0x01, 0x02, 0x07, 0x01, 0x02, 0x07, 0x01, 0x01, 0x05, 0x00,
+ 0x01, 0x05, 0x00, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01,
+ 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01,
+ 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01,
+ 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01,
+ 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01,
+ 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01,
+ 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01,
+ 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01,
+ 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x02, 0x07, 0x01, 0x02, 0x07, 0x01,
+ 0x02, 0x07, 0x01, 0x02, 0x07, 0x01, 0x02, 0x07, 0x01, 0x02, 0x07, 0x01,
+ 0x02, 0x07, 0x01, 0x02, 0x07, 0x01, 0x03, 0x05, 0x01, 0x03, 0x05, 0x01,
+ 0x01, 0x07, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x07, 0x01,
+ 0x00, 0x05, 0x02, 0x00, 0x05, 0x02, 0x00, 0x04, 0x01, 0x00, 0x05, 0x02,
+ 0x01, 0x05, 0x02, 0x01, 0x04, 0x02, 0x00, 0x03, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03,
+ 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x02, 0x07, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x00, 0x02, 0x07, 0x01,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x02, 0x07, 0x01,
+ 0x01, 0x06, 0x00, 0x01, 0x06, 0x00, 0x01, 0x06, 0x00, 0x01, 0x06, 0x00,
+ 0x01, 0x06, 0x00, 0x01, 0x06, 0x00, 0x01, 0x06, 0x01, 0x03, 0x04, 0x00,
+ 0x03, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x01, 0x05, 0x00,
+ 0x01, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x03, 0x02, 0x00, 0x03, 0x02,
+ 0x00, 0x03, 0x02, 0x01, 0x03, 0x01, 0x01, 0x03, 0x02, 0x00, 0x02, 0x00,
+ 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
+ 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x02, 0x07, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x00,
+ 0x02, 0x07, 0x01, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x02, 0x07, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x00, 0x01, 0x06, 0x00,
+ 0x01, 0x06, 0x00, 0x01, 0x06, 0x00, 0x01, 0x06, 0x00, 0x01, 0x06, 0x01,
+ 0x03, 0x04, 0x00, 0x03, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x00,
+ 0x01, 0x05, 0x00, 0x01, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x03, 0x02,
+ 0x00, 0x03, 0x02, 0x00, 0x03, 0x02, 0x01, 0x03, 0x01, 0x01, 0x03, 0x02,
+ 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+#endif
#endif
#endif
diff --git a/platform/msm_shared/include/spmi.h b/platform/msm_shared/include/spmi.h
index b594da5..e19cccd 100644
--- a/platform/msm_shared/include/spmi.h
+++ b/platform/msm_shared/include/spmi.h
@@ -152,5 +152,5 @@
uint8_t pmic_spmi_reg_read(uint32_t addr);
void pmic_spmi_reg_write(uint32_t addr, uint8_t val);
void pmic_spmi_reg_mask_write(uint32_t addr, uint8_t mask, uint8_t val);
-
+bool spmi_initialized();
#endif
diff --git a/platform/msm_shared/partition_parser.c b/platform/msm_shared/partition_parser.c
index 970d7ce..e8e08b2 100644
--- a/platform/msm_shared/partition_parser.c
+++ b/platform/msm_shared/partition_parser.c
@@ -28,9 +28,14 @@
#include <stdlib.h>
#include <string.h>
+#include <crc32.h>
#include "mmc.h"
#include "partition_parser.h"
-
+#define GPT_HEADER_SIZE 92
+#define GPT_LBA 1
+#define PARTITION_ENTRY_SIZE 128
+static bool flashing_gpt = 0;
+static bool parse_secondary_gpt = 0;
__WEAK void mmc_set_lun(uint8_t lun)
{
}
@@ -278,7 +283,6 @@
dprintf(CRITICAL, "GPT: Could not read primary gpt from mmc\n");
goto end;
}
-
ret = partition_parse_gpt_header(data, &first_usable_lba,
&partition_entry_size, &header_size,
&max_partition_count);
@@ -667,10 +671,12 @@
}
offset = (2 * partition_entry_array_size);
secondary_gpt_header = offset + block_size + primary_gpt_header;
+ parse_secondary_gpt = 1;
ret =
partition_parse_gpt_header(secondary_gpt_header, &first_usable_lba,
&partition_entry_size, &header_size,
&max_partition_count);
+ parse_secondary_gpt = 0;
if (ret) {
dprintf(CRITICAL,
"GPT: Backup signature invalid cannot write GPT\n");
@@ -740,6 +746,7 @@
/* Re-read the GPT partition table */
dprintf(INFO, "Re-reading the GPT Partition Table\n");
partition_count = 0;
+ flashing_gpt = 0;
mmc_read_partition_table(0);
partition_dump();
dprintf(CRITICAL, "GPT: Partition Table written\n");
@@ -773,6 +780,7 @@
case PARTITION_TYPE_GPT:
dprintf(INFO, "Writing GPT partition\n");
+ flashing_gpt = 1;
ret = write_gpt(size, partition, block_size);
dprintf(CRITICAL, "Re-Flash all the partitions\n");
break;
@@ -1035,20 +1043,129 @@
unsigned int *header_size,
unsigned int *max_partition_count)
{
+ uint32_t crc_val_org = 0;
+ uint32_t crc_val = 0;
+ uint32_t ret = 0;
+ uint32_t partitions_for_block = 0;
+ uint32_t blocks_to_read = 0;
+ unsigned char *new_buffer = NULL;
+ unsigned long long last_usable_lba = 0;
+ unsigned long long partition_0 = 0;
+ unsigned long long current_lba = 0;
+ uint32_t block_size = mmc_get_device_blocksize();
+ /* Get the density of the mmc device */
+ uint64_t device_density = mmc_get_device_capacity();
+
/* Check GPT Signature */
if (((uint32_t *) buffer)[0] != GPT_SIGNATURE_2 ||
((uint32_t *) buffer)[1] != GPT_SIGNATURE_1)
return 1;
*header_size = GET_LWORD_FROM_BYTE(&buffer[HEADER_SIZE_OFFSET]);
+ /*check for header size too small*/
+ if (*header_size < GPT_HEADER_SIZE) {
+ dprintf(CRITICAL,"GPT Header size is too small\n");
+ return 1;
+ }
+ /*check for header size too large*/
+ if (*header_size > block_size) {
+ dprintf(CRITICAL,"GPT Header size is too large\n");
+ return 1;
+ }
+
+ crc_val_org = GET_LWORD_FROM_BYTE(&buffer[HEADER_CRC_OFFSET]);
+ /*Write CRC to 0 before we calculate the crc of the GPT header*/
+ crc_val = 0;
+ PUT_LONG(&buffer[HEADER_CRC_OFFSET], crc_val);
+
+ crc_val = crc32(~0L,buffer, *header_size) ^ (~0L);
+ if (crc_val != crc_val_org) {
+ dprintf(CRITICAL,"Header crc mismatch crc_val = %u with crc_val_org = %u\n", crc_val,crc_val_org);
+ return 1;
+ }
+ else
+ PUT_LONG(&buffer[HEADER_CRC_OFFSET], crc_val);
+
+ current_lba =
+ GET_LLWORD_FROM_BYTE(&buffer[PRIMARY_HEADER_OFFSET]);
*first_usable_lba =
GET_LLWORD_FROM_BYTE(&buffer[FIRST_USABLE_LBA_OFFSET]);
*max_partition_count =
GET_LWORD_FROM_BYTE(&buffer[PARTITION_COUNT_OFFSET]);
*partition_entry_size =
GET_LWORD_FROM_BYTE(&buffer[PENTRY_SIZE_OFFSET]);
+ last_usable_lba =
+ GET_LLWORD_FROM_BYTE(&buffer[LAST_USABLE_LBA_OFFSET]);
- return 0;
+ /*current lba and GPT lba should be same*/
+ if (!parse_secondary_gpt) {
+ if (current_lba != GPT_LBA) {
+ dprintf(CRITICAL,"GPT first usable LBA mismatch\n");
+ return 1;
+ }
+ }
+ /*check for first lba should be with in the valid range*/
+ if (*first_usable_lba > (device_density/block_size)) {
+ dprintf(CRITICAL,"Invalid first_usable_lba\n");
+ return 1;
+ }
+ /*check for last lba should be with in the valid range*/
+ if (last_usable_lba > (device_density/block_size)) {
+ dprintf(CRITICAL,"Invalid last_usable_lba\n");
+ return 1;
+ }
+ /*check for partition entry size*/
+ if (*partition_entry_size != PARTITION_ENTRY_SIZE) {
+ dprintf(CRITICAL,"Invalid parition entry size\n");
+ return 1;
+ }
+
+ if ((*max_partition_count) > (MIN_PARTITION_ARRAY_SIZE /(*partition_entry_size))) {
+ dprintf(CRITICAL, "Invalid maximum partition count\n");
+ return 1;
+ }
+
+ partitions_for_block = block_size / (*partition_entry_size);
+
+ blocks_to_read = (*max_partition_count)/ partitions_for_block;
+ if ((*max_partition_count) % partitions_for_block) {
+ blocks_to_read += 1;
+ }
+
+ new_buffer = (uint8_t *)memalign(CACHE_LINE, ROUNDUP((blocks_to_read * block_size),CACHE_LINE));
+
+ if (!new_buffer)
+ {
+ dprintf(CRITICAL, "Failed to Allocate memory to read partition table\n");
+ return 1;
+ }
+
+ if (!flashing_gpt) {
+ partition_0 = GET_LLWORD_FROM_BYTE(&buffer[PARTITION_ENTRIES_OFFSET]);
+ /*start LBA should always be 2 in primary GPT*/
+ if(partition_0 != 0x2) {
+ dprintf(CRITICAL, "Starting LBA mismatch\n");
+ goto fail;
+
+ }
+ /*read the partition entries to new_buffer*/
+ ret = mmc_read((partition_0) * (block_size), (unsigned int *)new_buffer, (blocks_to_read * block_size));
+ if (ret)
+ {
+ dprintf(CRITICAL, "GPT: Could not read primary gpt from mmc\n");
+ goto fail;
+ }
+ crc_val_org = GET_LWORD_FROM_BYTE(&buffer[PARTITION_CRC_OFFSET]);
+
+ crc_val = crc32(~0L,new_buffer, ((*max_partition_count) * (*partition_entry_size))) ^ (~0L);
+ if (crc_val != crc_val_org) {
+ dprintf(CRITICAL,"Partition entires crc mismatch crc_val= %u with crc_val_org= %u\n",crc_val,crc_val_org);
+ ret = 1;
+ }
+ }
+fail:
+ free(new_buffer);
+ return ret;
}
bool partition_gpt_exists()
diff --git a/platform/msm_shared/rpmb/rpmb.c b/platform/msm_shared/rpmb/rpmb.c
index 36bacab..29d72e3 100644
--- a/platform/msm_shared/rpmb/rpmb.c
+++ b/platform/msm_shared/rpmb/rpmb.c
@@ -50,7 +50,30 @@
{
struct mmc_device *mmc_dev = (struct mmc_device *) dev;
info.size = mmc_dev->card.rpmb_size / RPMB_MIN_BLK_SZ;
- info.rel_wr_count = mmc_dev->card.rel_wr_count;
+ if (mmc_dev->card.ext_csd[MMC_EXT_CSD_REV] < 8)
+ {
+ dprintf(SPEW, "EMMC Version < 5.1\n");
+ info.rel_wr_count = mmc_dev->card.rel_wr_count;
+ }
+ else
+ {
+ if (mmc_dev->card.ext_csd[MMC_EXT_CSD_EN_RPMB_REL_WR] == 0)
+ {
+ dprintf(SPEW, "EMMC Version >= 5.1 EN_RPMB_REL_WR = 0\n");
+ // according to emmc version 5.1 and above if EN_RPMB_REL_WR in extended
+ // csd is not set the maximum number of frames that can be reliably written
+ // to emmc would be 2
+ info.rel_wr_count = 2;
+ }
+ else
+ {
+ dprintf(SPEW, "EMMC Version >= 5.1 EN_RPMB_REL_WR = 1\n");
+ // according to emmc version 5.1 and above if EN_RPMB_REL_WR in extended
+ // csd is set the maximum number of frames that can be reliably written
+ // to emmc would be 32
+ info.rel_wr_count = 32;
+ }
+ }
info.dev_type = EMMC_RPMB;
}
else
@@ -105,12 +128,12 @@
return rpmb_read_ufs(dev, req, req_len, resp, resp_len);
}
-int rpmb_write(uint32_t *req, uint32_t req_len, uint32_t *resp, uint32_t *resp_len)
+int rpmb_write(uint32_t *req, uint32_t req_len, uint32_t rel_wr_count, uint32_t *resp, uint32_t *resp_len)
{
if (platform_boot_dev_isemmc())
- return rpmb_write_emmc(dev, req, req_len, resp, resp_len);
+ return rpmb_write_emmc(dev, req, req_len, rel_wr_count, resp, resp_len);
else
- return rpmb_write_ufs(dev, req, req_len, resp, resp_len);
+ return rpmb_write_ufs(dev, req, req_len, rel_wr_count, resp, resp_len);
}
/* This API calls into TZ app to read device_info */
diff --git a/platform/msm_shared/rpmb/rpmb_emmc.c b/platform/msm_shared/rpmb/rpmb_emmc.c
index 2bfa545..3b00e09 100644
--- a/platform/msm_shared/rpmb/rpmb_emmc.c
+++ b/platform/msm_shared/rpmb/rpmb_emmc.c
@@ -47,17 +47,36 @@
.requestresponse[1] = READ_RESULT_FLAG,
};
-int rpmb_write_emmc(struct mmc_device *dev,uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len)
+int rpmb_write_emmc(struct mmc_device *dev,uint32_t *req_buf, uint32_t blk_cnt, uint32_t rel_wr_count, uint32_t *resp_buf, uint32_t *resp_len)
{
- uint32_t i;
+ uint32_t i, num_trans;
int ret = 0;
struct mmc_command cmd[3] = {{0},{0},{0}};
struct rpmb_frame *result = (struct rpmb_frame *)resp_buf;
- for (i = 0; i < blk_cnt; i++)
+ dprintf(INFO, "rpmb write command called with blk_cnt: 0x%x\n", blk_cnt);
+ if (rel_wr_count == 0x2)
+ {
+ // if reliable write count reported by secure app is 2 then we can
+ // send two half sectors in one transaction. So overall number of
+ // transactions would be total block count by 2.
+ num_trans = blk_cnt / 2;
+ }
+ else if(rel_wr_count == 0x1)
+ {
+ num_trans = blk_cnt; // rel_rw_count = 1 for emmc 5.0 and below
+ }
+ else
+ {
+ dprintf(CRITICAL, "Reliable write count > 2 is not supported\n");
+ return -1;
+ }
+
+ for (i = 0; i < num_trans; i++)
{
#if DEBUG_RPMB
- dump_rpmb_frame((uint8_t *)req_buf, "request");
+ for(uint8_t j = 0; j < rel_wr_count; j++)
+ dump_rpmb_frame((uint8_t *)req_buf + (j * 512), "request");
#endif
/* CMD25 program data packet */
@@ -69,8 +88,16 @@
cmd[0].trans_mode = SDHCI_MMC_WRITE;
cmd[0].data_present = 0x1;
cmd[0].data.data_ptr = (void *)req_buf;
- cmd[0].data.num_blocks = RPMB_MIN_BLK_CNT;
-
+ if (rel_wr_count == 0x1)
+ {
+ cmd[0].rel_write = 0;
+ cmd[0].data.num_blocks = RPMB_MIN_BLK_CNT;
+ }
+ else if(rel_wr_count == 0x2)
+ {
+ cmd[0].rel_write = 1;
+ cmd[0].data.num_blocks = 0x2;
+ }
/* CMD25 Result Register Read Request Packet */
cmd[1].write_flag = false;
cmd[1].cmd_index = CMD25_WRITE_MULTIPLE_BLOCK;
@@ -101,6 +128,9 @@
break;
}
+#if DEBUG_RPMB
+ dump_rpmb_frame((uint8_t *)resp_buf, "response");
+#endif
if (result->result[0] == 0x80)
{
dprintf(CRITICAL, "Max write counter reached: \n");
@@ -112,12 +142,11 @@
dprintf(CRITICAL, "%s\n", str_err[result->result[1]]);
break;
}
+ if (rel_wr_count == 0x1)
+ req_buf = (uint32_t*) ((uint8_t*)req_buf + (RPMB_BLK_SIZE));
+ else if(rel_wr_count == 0x2)
+ req_buf = (uint32_t*) ((uint8_t*)req_buf + (RPMB_BLK_SIZE * 0x2));
- req_buf = (uint32_t*) ((uint8_t*)req_buf + RPMB_BLK_SIZE);
-
-#if DEBUG_RPMB
- dump_rpmb_frame((uint8_t *)resp_buf, "response");
-#endif
}
*resp_len = RPMB_MIN_BLK_CNT * RPMB_BLK_SIZE;
diff --git a/platform/msm_shared/rpmb/rpmb_listener.c b/platform/msm_shared/rpmb/rpmb_listener.c
index 7cf0b79..c9623e2 100644
--- a/platform/msm_shared/rpmb/rpmb_listener.c
+++ b/platform/msm_shared/rpmb/rpmb_listener.c
@@ -67,6 +67,8 @@
uint32_t num_sectors;
uint32_t req_buff_len;
uint32_t req_buff_offset;
+ uint32_t version;
+ uint32_t rel_wr_count;
}__PACKED;
struct tz_rpmb_rw_resp
@@ -75,6 +77,7 @@
int32_t status;
uint32_t res_buff_len;
uint32_t res_buff_offset;
+ uint32_t version;
}__PACKED;
typedef int (*ListenerCallback)(void*, uint32_t);
@@ -113,14 +116,16 @@
case TZ_CM_CMD_RPMB_READ:
#if DEBUG_RPMB
dprintf(INFO, "Read Request received\n");
+ dprintf(INFO, "READ: RPMB_REL_RW_COUNT 0x%x\n", req_p->rel_wr_count);
#endif
resp_p->status = rpmb_read(req_buf, req_p->num_sectors, resp_buf, &resp_p->res_buff_len);
break;
case TZ_CM_CMD_RPMB_WRITE:
#if DEBUG_RPMB
dprintf(INFO, "Write Request received\n");
+ dprintf(INFO, "WRITE: RPMB_REL_RW_COUNT 0x%x\n", req_p->rel_wr_count);
#endif
- resp_p->status = rpmb_write(req_buf, req_p->num_sectors, resp_buf, &resp_p->res_buff_len);
+ resp_p->status = rpmb_write(req_buf, req_p->num_sectors, req_p->rel_wr_count, resp_buf, &resp_p->res_buff_len);
break;
default:
dprintf(CRITICAL, "Unsupported request command request: %u\n", req_p->cmd_id);
@@ -174,7 +179,7 @@
rpmb_listener.service_name = "RPMB system services";
rpmb_listener.id = RPMB_LSTNR_ID;
- rpmb_listener.sb_size = 20 * 1024;
+ rpmb_listener.sb_size = 25 * 1024;
rpmb_listener.service_cmd_handler = rpmb_cmd_handler;
ret = qseecom_register_listener(&rpmb_listener);
diff --git a/platform/msm_shared/rpmb/rpmb_ufs.c b/platform/msm_shared/rpmb/rpmb_ufs.c
index 3cc4d91..17cfc56 100644
--- a/platform/msm_shared/rpmb/rpmb_ufs.c
+++ b/platform/msm_shared/rpmb/rpmb_ufs.c
@@ -36,6 +36,18 @@
#include <endian.h>
#include <arch/defines.h>
+static const char *str_err[] =
+{
+ "Operation Ok",
+ "General failure",
+ "Authentication error (MAC comparison not matching, MAC calculation failure)",
+ "Counter failure (counters not matching in comparison, counter incrementing failure)",
+ "Address failure (address out of range, wrong address alignment)",
+ "Write failure (data/counter/result write failure)",
+ "Read failure (data/counter/result read failure)",
+ "Authentication Key not yet programmed",
+};
+
static struct rpmb_frame read_result_reg =
{
.requestresponse[1] = READ_RESULT_FLAG,
@@ -71,8 +83,8 @@
return -UFS_FAILURE;
}
#ifdef DEBUG_RPMB
- dprintf(SPEW, "rpmb_read: req_buf: 0x%x blk_count: 0x%x\n", *req_buf, blk_cnt);
- dprintf(INFO, "rpmb_read: bytes_to_transfer: 0x%x blks_to_transfer: 0x%x\n",
+ dprintf(INFO, "rpmb_read: req_buf: 0x%x blk_count: 0x%x\n", *req_buf, blk_cnt);
+ dprintf(INFO, "rpmb_read: bytes_to_transfer: 0x%llx blks_to_transfer: 0x%x\n",
bytes_to_transfer, blks_to_transfer);
#endif
// send the request
@@ -138,15 +150,18 @@
dprintf(CRITICAL, "%s:%d ucs_do_scsi_rpmb_read: failed\n", __func__, __LINE__);
return -UFS_FAILURE;
}
+ // invalidate response buffer before reading response as this is part of request
+ // buffer overwritten
+ arch_clean_invalidate_cache_range((addr_t) resp_buf, RPMB_FRAME_SIZE);
#ifdef DEBUG_RPMB
- dprintf(SPEW, "Sending RPMB Read response complete\n");
+ dprintf(INFO, "Sending RPMB Read response complete\n");
dump_rpmb_frame((uint8_t *)resp_buf, "response");
#endif
*resp_len = bytes_to_transfer;
return UFS_SUCCESS;
}
-int rpmb_write_ufs(struct ufs_dev *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len)
+int rpmb_write_ufs(struct ufs_dev *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t rel_wr_count, uint32_t *resp_buf, uint32_t *resp_len)
{
// validate input parameters
ASSERT(req_buf);
@@ -156,12 +171,14 @@
STACKBUF_DMA_ALIGN(cdb, sizeof(struct scsi_sec_protocol_cdb));
struct scsi_req_build_type req_upiu;
struct scsi_sec_protocol_cdb *cdb_out_param, *cdb_in_param;
+ struct rpmb_frame *result = (struct rpmb_frame *)resp_buf;
uint32_t blks_remaining;
uint32_t blks_to_transfer;
uint64_t bytes_to_transfer;
uint64_t max_size;
uint32_t result_frame_bytes = RPMB_FRAME_SIZE;
uint32_t i;
+ uint32_t num_trans;
blks_remaining = blk_cnt;
blks_to_transfer = blks_remaining;
@@ -176,13 +193,31 @@
}
#ifdef DEBUG_RPMB
dprintf(INFO, "%s: req_buf: 0x%x blk_count: 0x%x\n", __func__,*req_buf, blk_cnt);
- dprintf(INFO, "%s: bytes_to_transfer: 0x%x blks_to_transfer: 0x%x\n", __func__
- bytes_to_transfer, blk_cnt);
- dump_rpmb_frame((uint8_t *)req_buf, "request");
+ dprintf(INFO, "%s: bytes_to_transfer: 0x%llx blks_to_transfer: 0x%x\n", __func__, bytes_to_transfer, blk_cnt);
#endif
-
- for (i = 0; i < blk_cnt; i++)
+ if (bytes_to_transfer <= (rel_wr_count * RPMB_FRAME_SIZE))
{
+ num_trans = 1;
+ }
+ else
+ {
+ // send uptop rel_wr_count number of frames in one shot + anything pending
+ num_trans = blk_cnt/rel_wr_count;
+ if (num_trans % rel_wr_count) // if anymore frames still pending
+ num_trans++;
+ }
+ for (i = 0; i < num_trans; i++)
+ {
+ if ((num_trans - i) == 1) // last loop or one and only loop
+ {
+ // last loop will contain a max of rel_wr_count number of frames or less
+ bytes_to_transfer = RPMB_FRAME_SIZE * blks_remaining;
+ }
+ else
+ {
+ bytes_to_transfer = RPMB_FRAME_SIZE * rel_wr_count;
+ }
+
// send the request
cdb_out_param = (struct scsi_sec_protocol_cdb*) cdb;
memset(cdb_out_param, 0, sizeof(struct scsi_sec_protocol_cdb));
@@ -190,6 +225,44 @@
cdb_out_param->opcode = SCSI_CMD_SECPROT_OUT;
cdb_out_param->cdb1 = SCSI_SEC_PROT;
cdb_out_param->sec_protocol_specific = BE16(SCSI_SEC_UFS_PROT_ID);
+ cdb_out_param->alloc_tlen = BE32(bytes_to_transfer);
+
+ // Flush CDB to memory
+ dsb();
+ arch_clean_invalidate_cache_range((addr_t) cdb_out_param, sizeof(struct scsi_sec_protocol_cdb));
+
+ memset(&req_upiu, 0, sizeof(struct scsi_req_build_type));
+
+ req_upiu.cdb = (addr_t) cdb_out_param;
+ req_upiu.data_buffer_addr = (addr_t) req_buf;
+ req_upiu.data_len = bytes_to_transfer;
+ req_upiu.flags = UPIU_FLAGS_WRITE;
+ req_upiu.lun = UFS_WLUN_RPMB;
+ req_upiu.dd = UTRD_TARGET_TO_SYSTEM;
+
+#ifdef DEBUG_RPMB
+ dprintf(INFO, "Sending RPMB write request: Start\n");
+ for(uint8_t j = 0; j < (bytes_to_transfer/RPMB_FRAME_SIZE); j++)
+ {
+ dprintf(INFO, "request buffer address: %p\n", (req_buf + (j * RPMB_FRAME_SIZE)));
+ dump_rpmb_frame((uint8_t *)req_buf + (j * RPMB_FRAME_SIZE), "request");
+ }
+#endif
+ if (ucs_do_scsi_cmd(dev, &req_upiu))
+ {
+ dprintf(CRITICAL, "%s:%d ucs_do_scsi_rpmb_read: failed\n", __func__, __LINE__);
+ return -UFS_FAILURE;
+ }
+#ifdef DEBUG_RPMB
+ dprintf(INFO, "Sending RPMB write request: Done\n");
+#endif
+ // Result Read
+ cdb_out_param = (struct scsi_sec_protocol_cdb*) cdb;
+ memset(cdb_out_param, 0, sizeof(struct scsi_sec_protocol_cdb));
+
+ cdb_out_param->opcode = SCSI_CMD_SECPROT_OUT;
+ cdb_out_param->cdb1 = SCSI_SEC_PROT;
+ cdb_out_param->sec_protocol_specific = BE16(SCSI_SEC_UFS_PROT_ID);
cdb_out_param->alloc_tlen = BE32(RPMB_FRAME_SIZE);
// Flush CDB to memory
@@ -199,39 +272,6 @@
memset(&req_upiu, 0, sizeof(struct scsi_req_build_type));
req_upiu.cdb = (addr_t) cdb_out_param;
- req_upiu.data_buffer_addr = (addr_t) req_buf;
- req_upiu.data_len = RPMB_FRAME_SIZE;
- req_upiu.flags = UPIU_FLAGS_WRITE;
- req_upiu.lun = UFS_WLUN_RPMB;
- req_upiu.dd = UTRD_TARGET_TO_SYSTEM;
-
-#ifdef DEBUG_RPMB
- dprintf(INFO, "Sending RPMB write request: Start\n");
-#endif
- if (ucs_do_scsi_cmd(dev, &req_upiu))
- {
- dprintf(CRITICAL, "%s:%d ucs_do_scsi_rpmb_read: failed\n", __func__, __LINE__);
- return -UFS_FAILURE;
- }
-#ifdef DEBUG_RPMB
- dprintf(INFO, "Sending RPMB write request: Done\n");
-#endif
- // Result Read
- cdb_in_param = (struct scsi_sec_protocol_cdb*) cdb;
- memset(cdb_in_param, 0, sizeof(struct scsi_sec_protocol_cdb));
-
- cdb_in_param->opcode = SCSI_CMD_SECPROT_OUT;
- cdb_in_param->cdb1 = SCSI_SEC_PROT;
- cdb_in_param->sec_protocol_specific = BE16(SCSI_SEC_UFS_PROT_ID);
- cdb_in_param->alloc_tlen = BE32(RPMB_FRAME_SIZE);
-
- // Flush CDB to memory
- dsb();
- arch_clean_invalidate_cache_range((addr_t) cdb_in_param, sizeof(struct scsi_sec_protocol_cdb));
-
- memset(&req_upiu, 0, sizeof(struct scsi_req_build_type));
-
- req_upiu.cdb = (addr_t) cdb_in_param;
req_upiu.data_buffer_addr = (addr_t) &read_result_reg ;
req_upiu.data_len = result_frame_bytes;
req_upiu.flags = UPIU_FLAGS_WRITE;
@@ -247,7 +287,7 @@
return -UFS_FAILURE;
}
#ifdef DEBUG_RPMB
- dprintf(SPEW, "Sending RPMB Result Read Register: Done\n");
+ dprintf(INFO, "Sending RPMB Result Read Register: Done\n");
#endif
// Retrieve verification result
@@ -280,12 +320,34 @@
dprintf(CRITICAL, "%s:%d ucs_do_scsi_rpmb_read: failed\n", __func__, __LINE__);
return -UFS_FAILURE;
}
+ // invalidate response buffer before reading response as this is part of request
+ // buffer overwritten
+ arch_clean_invalidate_cache_range((addr_t) resp_buf, result_frame_bytes);
#ifdef DEBUG_RPMB
- dprintf(SPEW, "Sending RPMB Response for Result Read Register: Done\n");
+ dprintf(INFO, "Sending RPMB Response for Result Read Register: Done\n");
dump_rpmb_frame((uint8_t *)resp_buf, "response");
#endif
- req_buf = (uint32_t*) ((uint8_t*)req_buf + RPMB_BLK_SIZE);
+ if (result->result[0] == 0x80)
+ {
+ dprintf(CRITICAL, "Max write counter reached: \n");
+ break;
+ }
+
+ if (result->result[1])
+ {
+ dprintf(CRITICAL, "UFS RPMB write error: %s\n", str_err[result->result[1]]);
+ break;
+ }
+ if ((num_trans - i) == 1)
+ continue; // last frame no need to increment
+ else
+ {
+ req_buf = (uint32_t*) ((uint8_t*)req_buf + (RPMB_BLK_SIZE * rel_wr_count));
+ // If more than 1 transaction, then until the last loop, we will be transfering
+ // rel_wr_count number of half sections in one transaction
+ blks_remaining = blks_remaining - rel_wr_count;
+ }
}
*resp_len = RPMB_MIN_BLK_CNT * RPMB_BLK_SIZE;
diff --git a/platform/msm_shared/rules.mk b/platform/msm_shared/rules.mk
index d19df24..d1ebd05 100644
--- a/platform/msm_shared/rules.mk
+++ b/platform/msm_shared/rules.mk
@@ -508,6 +508,23 @@
$(LOCAL_DIR)/mipi_dsi_autopll.o
endif
+ifeq ($(PLATFORM),mdmfermium)
+ OBJS += $(LOCAL_DIR)/qgic.o \
+ $(LOCAL_DIR)/qtimer.o \
+ $(LOCAL_DIR)/qtimer_mmap.o \
+ $(LOCAL_DIR)/interrupts.o \
+ $(LOCAL_DIR)/clock.o \
+ $(LOCAL_DIR)/clock_pll.o \
+ $(LOCAL_DIR)/clock_lib2.o \
+ $(LOCAL_DIR)/uart_dm.o \
+ $(LOCAL_DIR)/board.o \
+ $(LOCAL_DIR)/spmi.o \
+ $(LOCAL_DIR)/bam.o \
+ $(LOCAL_DIR)/qpic_nand.o \
+ $(LOCAL_DIR)/scm.o \
+ $(LOCAL_DIR)/dev_tree.o
+endif
+
ifeq ($(PLATFORM),msm8996)
DEFINES += DISPLAY_TYPE_MDSS=1
OBJS += $(LOCAL_DIR)/qtimer.o \
diff --git a/platform/msm_shared/scm.c b/platform/msm_shared/scm.c
index cdb0282..d32423e 100644
--- a/platform/msm_shared/scm.c
+++ b/platform/msm_shared/scm.c
@@ -63,15 +63,12 @@
return scm_arm_support;
}
-static void scm_arm_support_available(uint32_t svc_id, uint32_t cmd_id)
+static int is_scm_call_available(uint32_t svc_id, uint32_t cmd_id)
{
uint32_t ret;
scmcall_arg scm_arg = {0};
scmcall_ret scm_ret = {0};
- /* Make a call to check if SCM call available using new interface,
- * if this returns 0 then scm implementation as per arm spec
- * otherwise use the old interface for scm calls
- */
+
scm_arg.x0 = MAKE_SIP_SCM_CMD(SCM_SVC_INFO, IS_CALL_AVAIL_CMD);
scm_arg.x1 = MAKE_SCM_ARGS(0x1);
scm_arg.x2 = MAKE_SIP_SCM_CMD(svc_id, cmd_id);
@@ -79,13 +76,31 @@
ret = scm_call2(&scm_arg, &scm_ret);
if (!ret)
- scm_arm_support = true;
+ return scm_ret.x1;
+
+ return ret;
}
+static int scm_arm_support_available(uint32_t svc_id, uint32_t cmd_id)
+{
+ uint32_t ret;
+
+ ret = is_scm_call_available(SCM_SVC_INFO, IS_CALL_AVAIL_CMD);
+
+ if (ret > 0)
+ scm_arm_support = true;
+
+ return ret;
+}
void scm_init()
{
- scm_arm_support_available(SCM_SVC_INFO, IS_CALL_AVAIL_CMD);
+ int ret;
+
+ ret = scm_arm_support_available(SCM_SVC_INFO, IS_CALL_AVAIL_CMD);
+
+ if (ret)
+ dprintf(CRITICAL, "Failed to initialize SCM\n");
}
/**
@@ -1313,14 +1328,16 @@
dload_type = 0;
/* Write to the Boot MISC register */
- ret = scm_call2_atomic(SCM_SVC_BOOT, SCM_DLOAD_CMD, dload_type, 0);
+ ret = is_scm_call_available(SCM_SVC_BOOT, SCM_DLOAD_CMD);
- if (ret) {
+ if (ret > 0)
+ ret = scm_call2_atomic(SCM_SVC_BOOT, SCM_DLOAD_CMD, dload_type, 0);
+ else
ret = scm_io_write(TCSR_BOOT_MISC_DETECT,dload_type);
- if(ret) {
- dprintf(CRITICAL, "Failed to write to boot misc: %d\n", ret);
- return ret;
- }
+
+ if(ret) {
+ dprintf(CRITICAL, "Failed to write to boot misc: %d\n", ret);
+ return ret;
}
scm_check_boot_fuses();
diff --git a/platform/msm_shared/sdhci.c b/platform/msm_shared/sdhci.c
index 72126bf..bfab9f1 100644
--- a/platform/msm_shared/sdhci.c
+++ b/platform/msm_shared/sdhci.c
@@ -863,7 +863,7 @@
/* Enable auto cmd23 or cmd12 for multi block transfer
* based on what command card supports
*/
- if (cmd->data.num_blocks > 1) {
+ if ((cmd->data.num_blocks > 1) && !cmd->rel_write) {
if (cmd->cmd23_support) {
trans_mode |= SDHCI_TRANS_MULTI | SDHCI_AUTO_CMD23_EN | SDHCI_BLK_CNT_EN;
REG_WRITE32(host, cmd->data.num_blocks, SDHCI_ARG2_REG);
@@ -871,6 +871,9 @@
else
trans_mode |= SDHCI_TRANS_MULTI | SDHCI_AUTO_CMD12_EN | SDHCI_BLK_CNT_EN;
}
+ else if ((cmd->data.num_blocks > 1) && cmd->rel_write) {
+ trans_mode |= SDHCI_TRANS_MULTI | SDHCI_BLK_CNT_EN;
+ }
}
/* Write to transfer mode register */
diff --git a/platform/msm_shared/smem.h b/platform/msm_shared/smem.h
index 5067b8a..aa8cd1f 100644
--- a/platform/msm_shared/smem.h
+++ b/platform/msm_shared/smem.h
@@ -428,6 +428,7 @@
APQ8076 = 277,
MSM8976 = 278,
APQ8052 = 289,
+ MDMFERMIUM = 290,
APQ8096 = 291,
};
diff --git a/platform/msm_shared/spmi.c b/platform/msm_shared/spmi.c
index 5af8eb7..72ec7cb 100644
--- a/platform/msm_shared/spmi.c
+++ b/platform/msm_shared/spmi.c
@@ -46,6 +46,7 @@
static uint32_t pmic_arb_ver;
static uint8_t *chnl_tbl;
static uint32_t max_peripherals;
+static bool spmi_init_done;
static void spmi_lookup_chnl_number()
{
@@ -90,6 +91,8 @@
{
spmi_lookup_chnl_number();
}
+
+ spmi_init_done = true;
}
static void write_wdata_from_array(uint8_t *array,
@@ -440,3 +443,8 @@
{
mask_interrupt(EE0_KRAIT_HLOS_SPMI_PERIPH_IRQ);
}
+
+bool spmi_initialized()
+{
+ return spmi_init_done;
+}
diff --git a/project/mdmfermium.mk b/project/mdmfermium.mk
new file mode 100644
index 0000000..970594c
--- /dev/null
+++ b/project/mdmfermium.mk
@@ -0,0 +1,28 @@
+# top level project rules for the fermium project
+#
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+TARGET := mdmfermium
+
+MODULES += app/aboot
+
+ifeq ($(TARGET_BUILD_VARIANT),user)
+DEBUG := 0
+else
+DEBUG := 1
+endif
+
+DEFINES += WITH_DEBUG_UART=1
+DEFINES += DEVICE_TREE=1
+
+DEFINES += BAM_V170=1
+#Disable thumb mode
+ENABLE_THUMB := false
+
+#Override linker for mdm targets
+LD := $(TOOLCHAIN_PREFIX)ld.bfd
+
+ENABLE_SMD_SUPPORT := 1
+ifeq ($(ENABLE_SMD_SUPPORT),1)
+DEFINES += SMD_SUPPORT=1
+endif
diff --git a/project/msm8996.mk b/project/msm8996.mk
index 396e108..b7beef7 100644
--- a/project/msm8996.mk
+++ b/project/msm8996.mk
@@ -43,6 +43,7 @@
DEFINES += USB_RESET_FROM_CLK=1
DEFINES += USE_BOOTDEV_CMDLINE=1
DEFINES += USE_RPMB_FOR_DEVINFO=1
+DEFINES += ENABLE_WBC=1
#Disable thumb mode
ENABLE_THUMB := false
@@ -77,11 +78,6 @@
DEFINES += MDTP_EFUSE_START=0
endif
-ENABLE_WDOG_SUPPORT := 1
-ifeq ($(ENABLE_WDOG_SUPPORT),1)
-DEFINES += WDOG_SUPPORT=1
-endif
-
ifeq ($(ENABLE_LPAE_SUPPORT),1)
DEFINES += LPAE=1
endif
diff --git a/target/mdm9640/init.c b/target/mdm9640/init.c
index 567ccde..2d2bb4b 100644
--- a/target/mdm9640/init.c
+++ b/target/mdm9640/init.c
@@ -84,7 +84,7 @@
#define LAST_NAND_PTN_LEN_PATTERN 0xFFFFFFFF
#define EXT4_CMDLINE " rootwait rootfstype=ext4 root=/dev/mmcblk0p"
-#define UBI_CMDLINE " rootfstype=ubifs rootflags=bulk_read ubi.fm_autoconvert=1"
+#define UBI_CMDLINE " rootfstype=ubifs rootflags=bulk_read"
struct qpic_nand_init_config config;
@@ -135,6 +135,8 @@
{
dprintf(INFO, "target_init()\n");
+ pmic_info_populate();
+
spmi_init(PMIC_ARB_CHANNEL_NUM, PMIC_ARB_OWNER_ID);
if (platform_boot_dev_isemmc()) {
diff --git a/target/mdmfermium/init.c b/target/mdmfermium/init.c
new file mode 100644
index 0000000..7e32f52
--- /dev/null
+++ b/target/mdmfermium/init.c
@@ -0,0 +1,279 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <debug.h>
+#include <platform/iomap.h>
+#include <reg.h>
+#include <target.h>
+#include <platform.h>
+#include <uart_dm.h>
+#include <platform/gpio.h>
+#include <lib/ptable.h>
+#include <qpic_nand.h>
+#include <dev/keys.h>
+#include <spmi_v2.h>
+#include <pm8x41.h>
+#include <board.h>
+#include <baseband.h>
+#include <hsusb.h>
+#include <scm.h>
+#include <platform/gpio.h>
+#include <platform/gpio.h>
+#include <platform/irqs.h>
+#include <platform/clock.h>
+#include <crypto5_wrapper.h>
+#include <partition_parser.h>
+#include <stdlib.h>
+
+#if LONG_PRESS_POWER_ON
+#include <shutdown_detect.h>
+#endif
+
+#define FASTBOOT_MODE 0x77665500
+#define PON_SOFT_RB_SPARE 0x88F
+
+extern void smem_ptable_init(void);
+extern void smem_add_modem_partitions(struct ptable *flash_ptable);
+
+static struct ptable flash_ptable;
+
+/* PMIC config data */
+#define PMIC_ARB_CHANNEL_NUM 0
+#define PMIC_ARB_OWNER_ID 0
+
+/* NANDc BAM pipe numbers */
+#define DATA_CONSUMER_PIPE 0
+#define DATA_PRODUCER_PIPE 1
+#define CMD_PIPE 2
+
+/* NANDc BAM pipe groups */
+#define DATA_PRODUCER_PIPE_GRP 0
+#define DATA_CONSUMER_PIPE_GRP 0
+#define CMD_PIPE_GRP 1
+
+/* NANDc EE */
+#define QPIC_NAND_EE 0
+
+/* NANDc max desc length. */
+#define QPIC_NAND_MAX_DESC_LEN 0x7FFF
+
+#define LAST_NAND_PTN_LEN_PATTERN 0xFFFFFFFF
+
+struct qpic_nand_init_config config;
+
+void update_ptable_names(void)
+{
+ uint32_t ptn_index;
+ struct ptentry *ptentry_ptr = flash_ptable.parts;
+ struct ptentry *boot_ptn;
+ unsigned i;
+ uint32_t len;
+
+ /* Change all names to lower case. */
+ for (ptn_index = 0; ptn_index != (uint32_t)flash_ptable.count; ptn_index++)
+ {
+ len = strlen(ptentry_ptr[ptn_index].name);
+ for (i = 0; i < len; i++)
+ {
+ if (isupper(ptentry_ptr[ptn_index].name[i]))
+ {
+ ptentry_ptr[ptn_index].name[i] = tolower(ptentry_ptr[ptn_index].name[i]);
+ }
+ }
+ /* SBL fills in the last partition length as 0xFFFFFFFF.
+ * Update the length field based on the number of blocks on the flash.*/
+ if ((uint32_t)(ptentry_ptr[ptn_index].length) == LAST_NAND_PTN_LEN_PATTERN)
+ {
+ ptentry_ptr[ptn_index].length = flash_num_blocks() - ptentry_ptr[ptn_index].start;
+ }
+ }
+}
+
+void target_early_init(void)
+{
+#if WITH_DEBUG_UART
+ uart_dm_init(1, 0, BLSP1_UART1_BASE);
+#endif
+}
+
+/* Configure PMIC and Drop PS_HOLD for shutdown */
+void shutdown_device()
+{
+ dprintf(CRITICAL, "Going down for shutdown.\n");
+
+ /* Configure PMIC for shutdown */
+ pm8x41_reset_configure(PON_PSHOLD_SHUTDOWN);
+
+ /* Drop PS_HOLD for MSM */
+ writel(0x00, MPM2_MPM_PS_HOLD);
+
+ mdelay(5000);
+
+ dprintf(CRITICAL, "shutdown failed\n");
+
+ ASSERT(0);
+}
+
+
+void target_init(void)
+{
+ uint32_t base_addr;
+ uint8_t slot;
+
+ dprintf(INFO, "target_init()\n");
+
+ spmi_init(PMIC_ARB_CHANNEL_NUM, PMIC_ARB_OWNER_ID);
+
+ config.pipes.read_pipe = DATA_PRODUCER_PIPE;
+ config.pipes.write_pipe = DATA_CONSUMER_PIPE;
+ config.pipes.cmd_pipe = CMD_PIPE;
+
+ config.pipes.read_pipe_grp = DATA_PRODUCER_PIPE_GRP;
+ config.pipes.write_pipe_grp = DATA_CONSUMER_PIPE_GRP;
+ config.pipes.cmd_pipe_grp = CMD_PIPE_GRP;
+
+ config.bam_base = MSM_NAND_BAM_BASE;
+ config.nand_base = MSM_NAND_BASE;
+ config.ee = QPIC_NAND_EE;
+ config.max_desc_len = QPIC_NAND_MAX_DESC_LEN;
+
+ qpic_nand_init(&config);
+
+ ptable_init(&flash_ptable);
+ //smem_ptable_init();
+ //smem_add_modem_partitions(&flash_ptable);
+
+ update_ptable_names();
+ flash_set_ptable(&flash_ptable);
+}
+
+/* Identify the current target */
+void target_detect(struct board_data *board)
+{
+ /* This property is filled as part of board.c */
+}
+
+unsigned board_machtype(void)
+{
+}
+
+/* Identify the baseband being used */
+void target_baseband_detect(struct board_data *board)
+{
+ uint32_t platform = board->platform;
+
+ switch(platform)
+ {
+ case MDMFERMIUM:
+ board->baseband = BASEBAND_MDM;
+ break;
+ default:
+ dprintf(CRITICAL, "Platform type: %u is not supported\n", platform);
+ ASSERT(0);
+ };
+}
+
+unsigned check_reboot_mode(void)
+{
+ uint32_t restart_reason = 0;
+
+ /* Read reboot reason and scrub it */
+ restart_reason = readl(RESTART_REASON_ADDR);
+ writel(0x00, RESTART_REASON_ADDR);
+
+ return restart_reason;
+}
+
+int get_target_boot_params(const char *cmdline, const char *part, char *buf,int buflen)
+{
+ struct ptable *ptable;
+ int system_ptn_index = -1;
+
+ ptable = flash_get_ptable();
+ if (!ptable) {
+ dprintf(CRITICAL,"WARN: Cannot get flash partition table\n");
+ return -1;
+ }
+
+ system_ptn_index = ptable_get_index(ptable, part);
+ if (system_ptn_index < 0) {
+ dprintf(CRITICAL,"WARN: Cannot get partition index for %s\n", part);
+ return -1;
+ }
+ /*check if cmdline contains "root=" at the beginning of buffer or
+ * " root=" in the middle of buffer.
+ */
+ if (((!strncmp(cmdline, "root=", strlen("root="))) ||
+ (strstr(cmdline, " root="))))
+ dprintf(DEBUG, "DEBUG: cmdline has root=\n");
+ else
+ snprintf(buf, buflen, " root=/dev/mtdblock%d",system_ptn_index);
+ return 0;
+}
+
+void target_usb_init(void)
+{
+ uint32_t val;
+
+ /* Select and enable external configuration with USB PHY */
+ //ulpi_write(ULPI_MISC_A_VBUSVLDEXTSEL | ULPI_MISC_A_VBUSVLDEXT, ULPI_MISC_A_SET);
+
+ /* Enable sess_vld */
+ val = readl(USB_GENCONFIG_2) | GEN2_SESS_VLD_CTRL_EN;
+ writel(val, USB_GENCONFIG_2);
+
+ /* Enable external vbus configuration in the LINK */
+ val = readl(USB_USBCMD);
+ val |= SESS_VLD_CTRL;
+ writel(val, USB_USBCMD);
+}
+
+void target_uninit(void)
+{
+}
+
+void reboot_device(unsigned reboot_reason)
+{
+ /* Write the reboot reason */
+ writel(reboot_reason, RESTART_REASON_ADDR);
+
+ /* Configure PMIC for warm reset */
+ /* PM 8019 v1 aligns with PM8941 v2.
+ * This call should be based on the pmic version
+ * when PM8019 v2 is available.
+ */
+ pm8x41_v2_reset_configure(PON_PSHOLD_WARM_RESET);
+
+ /* Drop PS_HOLD for MSM */
+ writel(0x00, MPM2_MPM_PS_HOLD);
+
+ mdelay(5000);
+
+ dprintf(CRITICAL, "Rebooting failed\n");
+ return;
+}
diff --git a/target/mdmfermium/keypad.c b/target/mdmfermium/keypad.c
new file mode 100644
index 0000000..a57a2f8
--- /dev/null
+++ b/target/mdmfermium/keypad.c
@@ -0,0 +1,63 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <reg.h>
+#include <platform/gpio.h>
+#include <platform/iomap.h>
+
+/* GPIO that controls the button
+ * for FASTBOOT.
+ */
+#define FASTBOOT_KEY_GPIO_ID 37
+
+/*
+ * Returns fastboot button state.
+ * Returns 0 if button is not pressed, 1 when pressed.
+ */
+int get_fastboot_key_state(void)
+{
+ int ret;
+
+ gpio_tlmm_config(FASTBOOT_KEY_GPIO_ID, 0, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA, GPIO_ENABLE);
+
+ ret = gpio_get_state(FASTBOOT_KEY_GPIO_ID);
+
+ return ret;
+}
+
+/*
+* Return 1 to trigger to fastboot
+*/
+int fastboot_trigger(void)
+{
+ int ret;
+
+ ret = get_fastboot_key_state();
+
+ return (ret);
+}
diff --git a/target/mdmfermium/meminfo.c b/target/mdmfermium/meminfo.c
new file mode 100644
index 0000000..b66166e
--- /dev/null
+++ b/target/mdmfermium/meminfo.c
@@ -0,0 +1,95 @@
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <reg.h>
+#include <debug.h>
+#include <malloc.h>
+#include <smem.h>
+#include <stdint.h>
+#include <libfdt.h>
+#include <platform/iomap.h>
+#include <dev_tree.h>
+
+#define SIZE_1M (1024 * 1024)
+static struct smem_ram_ptable ram_ptable;
+struct smem_ram_ptable* target_smem_ram_ptable_init()
+{
+ /* Make sure RAM partition table is initialized */
+ ASSERT(smem_ram_ptable_init(&ram_ptable));
+ return &ram_ptable;
+}
+
+uint32_t target_dev_tree_mem(void *fdt, uint32_t memory_node_offset)
+{
+ ram_partition ptn_entry;
+ unsigned int index;
+ int ret = 0;
+ uint32_t len = 0;
+
+ /* Make sure RAM partition table is initialized */
+ ASSERT(smem_ram_ptable_init_v1());
+
+ len = smem_get_ram_ptable_len();
+
+ /* Calculating the size of the mem_info_ptr */
+ for (index = 0 ; index < len; index++)
+ {
+ smem_get_ram_ptable_entry(&ptn_entry, index);
+
+ if((ptn_entry.category == SDRAM) &&
+ (ptn_entry.type == SYS_MEMORY))
+ {
+
+ /* Pass along all other usable memory regions to Linux */
+ ret = dev_tree_add_mem_info(fdt,
+ memory_node_offset,
+ ptn_entry.start,
+ ptn_entry.size);
+
+ if (ret)
+ {
+ dprintf(CRITICAL, "Failed to add secondary banks memory addresses\n");
+ goto target_dev_tree_mem_err;
+ }
+ }
+ }
+target_dev_tree_mem_err:
+
+ return ret;
+}
+
+void *target_get_scratch_address(void)
+{
+ return ((void *)SCRATCH_ADDR);
+}
+
+unsigned target_get_max_flash_size(void)
+{
+ /*24.5MB*/
+ return (SCRATCH_REGION1_SIZE + SCRATCH_REGION2_SIZE);
+}
diff --git a/target/mdmfermium/rules.mk b/target/mdmfermium/rules.mk
new file mode 100644
index 0000000..ed3553f
--- /dev/null
+++ b/target/mdmfermium/rules.mk
@@ -0,0 +1,45 @@
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+INCLUDES += -I$(LOCAL_DIR)/include -I$(LK_TOP_DIR)/platform/msm_shared
+
+PLATFORM := mdmfermium
+
+MEMBASE := 0x87A00000 # SDRAM
+MEMSIZE := 0x00100000 # 1MB
+
+SCRATCH_ADDR := 0x81200000
+SCRATCH_REGION1 := 0x81200000
+SCRATCH_REGION1_SIZE := 0x1800000 # 24MB
+SCRATCH_REGION2 := 0x87F80000
+SCRATCH_REGION2_SIZE := 0x80000 # 512KB
+
+KERNEL_REGION := 0x80000000
+KERNEL_REGION_SIZE := 0x1200000 # 18MB
+
+BASE_ADDR := 0x80000000
+
+DEFINES += NO_KEYPAD_DRIVER=1
+
+MODULES += \
+ dev/keys \
+ dev/vib \
+ lib/ptable \
+ dev/pmic/pm8x41 \
+ lib/libfdt
+
+DEFINES += \
+ MEMSIZE=$(MEMSIZE) \
+ MEMBASE=$(MEMBASE) \
+ BASE_ADDR=$(BASE_ADDR) \
+ SCRATCH_ADDR=$(SCRATCH_ADDR) \
+ SCRATCH_REGION1=$(SCRATCH_REGION1) \
+ SCRATCH_REGION2=$(SCRATCH_REGION2) \
+ SCRATCH_REGION1_SIZE=$(SCRATCH_REGION1_SIZE) \
+ SCRATCH_REGION2_SIZE=$(SCRATCH_REGION2_SIZE) \
+ KERNEL_REGION=$(KERNEL_REGION) \
+ KERNEL_REGION_SIZE=$(KERNEL_REGION_SIZE)
+
+OBJS += \
+ $(LOCAL_DIR)/init.o \
+ $(LOCAL_DIR)/meminfo.o \
+ $(LOCAL_DIR)/keypad.o
diff --git a/target/mdmfermium/tools/makefile b/target/mdmfermium/tools/makefile
new file mode 100644
index 0000000..8486761
--- /dev/null
+++ b/target/mdmfermium/tools/makefile
@@ -0,0 +1,14 @@
+#Makefile to generate appsboot.mbn
+
+ifeq ($(BOOTLOADER_OUT),.)
+APPSBOOTOUT_DIR := $(BUILDDIR)
+else
+APPSBOOTOUT_DIR := $(BOOTLOADER_OUT)/../..
+endif
+
+ABOOTMBN := appsboot.mbn
+APPSBOOTHEADER: $(ABOOTMBN)
+
+$(ABOOTMBN): $(OUTELF_STRIP) $(OUTBIN)
+ cp $(OUTBIN) $(APPSBOOTOUT_DIR)/appsboot.raw
+ $(hide) cp -f $(OUTELF_STRIP) $(APPSBOOTOUT_DIR)/$(ABOOTMBN)
diff --git a/target/msm8952/include/target/display.h b/target/msm8952/include/target/display.h
index 5c02765..87cbc3a 100644
--- a/target/msm8952/include/target/display.h
+++ b/target/msm8952/include/target/display.h
@@ -91,8 +91,6 @@
#define MIPI_VSYNC_BACK_PORCH_LINES 3
#define MIPI_VSYNC_FRONT_PORCH_LINES 9
-#endif
-
/*---------------------------------------------------------------------------*/
/* Functions */
/*---------------------------------------------------------------------------*/
@@ -104,3 +102,6 @@
int target_display_get_base_offset(uint32_t base);
void target_force_cont_splash_disable(uint8_t override);
uint8_t target_panel_auto_detect_enabled();
+uint32_t oem_panel_max_auto_detect_panels();
+
+#endif
diff --git a/target/msm8952/init.c b/target/msm8952/init.c
index 99550f5..41ff356 100644
--- a/target/msm8952/init.c
+++ b/target/msm8952/init.c
@@ -486,6 +486,7 @@
switch (board_hardware_id()) {
case HW_PLATFORM_MTP:
case HW_PLATFORM_SURF:
+ case HW_PLATFORM_RCM:
case HW_PLATFORM_QRD:
splash_screen = 1;
break;
@@ -503,6 +504,23 @@
splash_override = override;
}
+uint8_t target_panel_auto_detect_enabled()
+{
+ uint8_t ret = 0;
+
+ switch(board_hardware_id())
+ {
+ case HW_PLATFORM_QRD:
+ ret = platform_is_msm8956() ? 1 : 0;
+ break;
+ case HW_PLATFORM_SURF:
+ case HW_PLATFORM_MTP:
+ default:
+ ret = 0;
+ }
+ return ret;
+}
+
/* Do any target specific intialization needed before entering fastboot mode */
void target_fastboot_init(void)
{
diff --git a/target/msm8952/oem_panel.c b/target/msm8952/oem_panel.c
index b64ac32..d2e05f8 100644
--- a/target/msm8952/oem_panel.c
+++ b/target/msm8952/oem_panel.c
@@ -49,6 +49,7 @@
#include "include/panel_sharp_1080p_cmd.h"
#include "include/panel_nt35597_wqxga_dualdsi_video.h"
#include "include/panel_nt35597_wqxga_dualdsi_cmd.h"
+#include "include/panel_hx8399a_1080p_video.h"
/*---------------------------------------------------------------------------*/
/* static panel selection variable */
@@ -60,6 +61,7 @@
SHARP_1080P_CMD_PANEL,
NT35597_WQXGA_DUALDSI_VIDEO_PANEL,
NT35597_WQXGA_DUALDSI_CMD_PANEL,
+ HX8399A_1080P_VIDEO_PANEL,
UNKNOWN_PANEL
};
@@ -77,6 +79,8 @@
{"sharp_1080p_cmd", SHARP_1080P_CMD_PANEL},
{"nt35597_wqxga_dualdsi_video", NT35597_WQXGA_DUALDSI_VIDEO_PANEL},
{"nt35597_wqxga_dualdsi_cmd", NT35597_WQXGA_DUALDSI_CMD_PANEL},
+ {"otm1906c_1080p_cmd", OTM1906C_1080P_CMD_PANEL},
+ {"hx8399a_1080p_video", HX8399A_1080P_VIDEO_PANEL},
};
static uint32_t panel_id;
@@ -198,6 +202,31 @@
otm1906c_1080p_cmd_timings, TIMING_SIZE);
pinfo->mipi.signature = OTM1906C_1080P_CMD_SIGNATURE;
break;
+ case HX8399A_1080P_VIDEO_PANEL:
+ panelstruct->paneldata = &hx8399a_1080p_video_panel_data;
+ panelstruct->panelres = &hx8399a_1080p_video_panel_res;
+ panelstruct->color = &hx8399a_1080p_video_color;
+ panelstruct->videopanel = &hx8399a_1080p_video_video_panel;
+ panelstruct->commandpanel = &hx8399a_1080p_video_command_panel;
+ panelstruct->state = &hx8399a_1080p_video_state;
+ panelstruct->laneconfig = &hx8399a_1080p_video_lane_config;
+ panelstruct->paneltiminginfo
+ = &hx8399a_1080p_video_timing_info;
+ panelstruct->panelresetseq
+ = &hx8399a_1080p_video_reset_seq;
+ panelstruct->backlightinfo = &hx8399a_1080p_video_backlight;
+ pinfo->mipi.panel_on_cmds
+ = hx8399a_1080p_video_on_command;
+ pinfo->mipi.num_of_panel_on_cmds
+ = HX8399A_1080P_VIDEO_ON_COMMAND;
+ pinfo->mipi.panel_off_cmds
+ = hx8399a_1080p_video_off_command;
+ pinfo->mipi.num_of_panel_off_cmds
+ = HX8399A_1080P_VIDEO_OFF_COMMAND;
+ memcpy(phy_db->timing,
+ hx8399a_1080p_video_timings, TIMING_SIZE);
+ pinfo->mipi.signature = HX8399A_1080P_VIDEO_SIGNATURE;
+ break;
case SHARP_1080P_CMD_PANEL:
panelstruct->paneldata = &sharp_1080p_cmd_panel_data;
panelstruct->panelres = &sharp_1080p_cmd_panel_res;
@@ -268,6 +297,9 @@
panelstruct->laneconfig = &nt35597_wqxga_dualdsi_cmd_lane_config;
panelstruct->paneltiminginfo
= &nt35597_wqxga_dualdsi_cmd_timing_info;
+ /* Clkout timings are different for this panel on 8956 */
+ panelstruct->paneltiminginfo->tclk_post = 0x2b;
+ panelstruct->paneltiminginfo->tclk_pre = 0x28;
panelstruct->panelresetseq
= &nt35597_wqxga_dualdsi_cmd_reset_seq;
panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_cmd_backlight;
@@ -302,6 +334,15 @@
return pan_type;
}
+#define DISPLAY_MAX_PANEL_DETECTION 2
+static uint32_t auto_pan_loop = 0;
+
+uint32_t oem_panel_max_auto_detect_panels()
+{
+ return target_panel_auto_detect_enabled() ?
+ DISPLAY_MAX_PANEL_DETECTION : 0;
+}
+
int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
struct msm_panel_info *pinfo,
struct mdss_dsi_phy_ctrl *phy_db)
@@ -334,6 +375,7 @@
panel_id = TRULY_1080P_VIDEO_PANEL;
break;
case HW_PLATFORM_SURF:
+ case HW_PLATFORM_RCM:
if (platform_is_msm8956())
panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
else
@@ -341,6 +383,24 @@
break;
case HW_PLATFORM_QRD:
panel_id = OTM1906C_1080P_CMD_PANEL;
+
+ /* QRD EVT1 uses OTM1906C, and EVT2 uses HX8399A */
+ if (platform_is_msm8956()) {
+ switch (auto_pan_loop) {
+ case 0:
+ panel_id = HX8399A_1080P_VIDEO_PANEL;
+ break;
+ case 1:
+ panel_id = OTM1906C_1080P_CMD_PANEL;
+ break;
+ default:
+ panel_id = UNKNOWN_PANEL;
+ dprintf(CRITICAL, "Unknown panel\n");
+ return PANEL_TYPE_UNKNOWN;
+ }
+ auto_pan_loop++;
+ }
+
break;
default:
dprintf(CRITICAL, "Display not enabled for %d HW type\n",
diff --git a/target/msm8952/target_display.c b/target/msm8952/target_display.c
index e89beb5..8773514 100644
--- a/target/msm8952/target_display.c
+++ b/target/msm8952/target_display.c
@@ -51,6 +51,11 @@
#include "include/display_resource.h"
#include "gcdb_display.h"
+#define DSC_CMD_PANEL "dsc_cmd_panel"
+#define DSC_VID_PANEL "dsc_vid_panel"
+#define DSC_CMD_PANEL_STRING "1:dsi:0:none:1:qcom,mdss_dsi_nt35597_dsc_wqxga_cmd"
+#define DSC_VID_PANEL_STRING "1:dsi:0:none:1:qcom,mdss_dsi_nt35597_dsc_wqxga_video"
+
/*---------------------------------------------------------------------------*/
/* GPIO configuration */
/*---------------------------------------------------------------------------*/
@@ -508,7 +513,11 @@
qpnp_ibb_enable(true); /*5V boost*/
mdelay(50);
} else {
- regulator_disable(ldo_num);
+ /*
+ * LDO1, LDO2 and LDO6 are shared with other subsystems.
+ * Do not disable them.
+ */
+ regulator_disable(REG_LDO17);
}
return NO_ERROR;
@@ -516,12 +525,42 @@
bool target_display_panel_node(char *pbuf, uint16_t buf_size)
{
- return gcdb_display_cmdline_arg(pbuf, buf_size);
+ int prefix_string_len = strlen(DISPLAY_CMDLINE_PREFIX);
+ bool ret = true;
+ struct oem_panel_data oem = mdss_dsi_get_oem_data();
+
+ if (!strcmp(oem.panel, DSC_CMD_PANEL)) {
+ if (buf_size < (prefix_string_len +
+ strlen(DSC_CMD_PANEL_STRING))) {
+ dprintf(CRITICAL, "DSC command line argument is greater than buffer size\n");
+ return false;
+ }
+ strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
+ buf_size -= prefix_string_len;
+ pbuf += prefix_string_len;
+ strlcpy(pbuf, DSC_CMD_PANEL_STRING, buf_size);
+ } else if (!strcmp(oem.panel, DSC_VID_PANEL)) {
+ if (buf_size < (prefix_string_len +
+ strlen(DSC_VID_PANEL_STRING))) {
+ dprintf(CRITICAL, "DSC command line argument is greater than buffer size\n");
+ return false;
+ }
+ strlcpy(pbuf, DISPLAY_CMDLINE_PREFIX, buf_size);
+ buf_size -= prefix_string_len;
+ pbuf += prefix_string_len;
+ strlcpy(pbuf, DSC_VID_PANEL_STRING, buf_size);
+ } else {
+ ret = gcdb_display_cmdline_arg(pbuf, buf_size);
+ }
+
+ return ret;
}
void target_display_init(const char *panel_name)
{
struct oem_panel_data oem;
+ int32_t ret = 0;
+ uint32_t panel_loop = 0;
set_panel_cmd_string(panel_name);
oem = mdss_dsi_get_oem_data();
@@ -529,16 +568,24 @@
if (!strcmp(oem.panel, NO_PANEL_CONFIG)
|| !strcmp(oem.panel, SIM_VIDEO_PANEL)
|| !strcmp(oem.panel, SIM_CMD_PANEL)
+ || !strcmp(oem.panel, DSC_CMD_PANEL)
+ || !strcmp(oem.panel, DSC_VID_PANEL)
|| oem.skip) {
dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n",
oem.panel);
return;
}
- if (gcdb_display_init(oem.panel, MDP_REV_50, (void *)MIPI_FB_ADDR)) {
- target_force_cont_splash_disable(true);
- msm_display_off();
- }
+ do {
+ target_force_cont_splash_disable(false);
+ ret = gcdb_display_init(oem.panel, MDP_REV_50, (void *)MIPI_FB_ADDR);
+ if (!ret || ret == ERR_NOT_SUPPORTED) {
+ break;
+ } else {
+ target_force_cont_splash_disable(true);
+ msm_display_off();
+ }
+ } while (++panel_loop <= oem_panel_max_auto_detect_panels());
if (!oem.cont_splash) {
dprintf(INFO, "Forcing continuous splash disable\n");
diff --git a/target/msm8996/init.c b/target/msm8996/init.c
index f407eea..488ed47 100644
--- a/target/msm8996/init.c
+++ b/target/msm8996/init.c
@@ -58,6 +58,9 @@
#include <qusb2_phy.h>
#include <rpmb.h>
#include <rpm-glink.h>
+#if ENABLE_WBC
+#include <pm_app_smbchg.h>
+#endif
#define CE_INSTANCE 1
#define CE_EE 1
@@ -147,6 +150,10 @@
}
}
+#if ENABLE_WBC
+ pm_appsbl_set_dcin_suspend(1);
+#endif
+
/* Tear down glink channels */
rpm_glink_uninit();
@@ -237,6 +244,18 @@
spmi_init(PMIC_ARB_CHANNEL_NUM, PMIC_ARB_OWNER_ID);
+ /* Initialize Glink */
+ rpm_glink_init();
+
+#if ENABLE_WBC
+ /* Look for battery voltage and make sure we have enough to bootup
+ * Otherwise initiate battery charging
+ * Charging should happen as early as possible, any other driver
+ * initialization before this should consider the power impact
+ */
+ pm_appsbl_chg_check_weak_battery_status(1);
+#endif
+
target_keystatus();
if (target_use_signed_kernel())
@@ -266,9 +285,6 @@
dprintf(CRITICAL, "RPMB init failed\n");
ASSERT(0);
}
- /* Initialize Glink */
- rpm_glink_init();
-
}
unsigned board_machtype(void)
diff --git a/target/msm8996/rules.mk b/target/msm8996/rules.mk
index 8966c0a..a0c3a8d 100644
--- a/target/msm8996/rules.mk
+++ b/target/msm8996/rules.mk
@@ -28,6 +28,7 @@
dev/qpnp_wled \
dev/qpnp_led \
dev/gcdb/display \
+ dev/pmic/pmi8994 \
lib/ptable \
lib/libfdt