* [PATCHv2 01/28] libertas: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 13:06 ` Alan Cox
2008-05-25 10:23 ` [PATCHv2 02/28] bluetooth: " David Woodhouse
` (33 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/wireless/libertas/if_cs.c | 2 +-
drivers/net/wireless/libertas/if_sdio.c | 4 ++--
drivers/net/wireless/libertas/if_usb.c | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
index 54280e2..d075b44 100644
--- a/drivers/net/wireless/libertas/if_cs.c
+++ b/drivers/net/wireless/libertas/if_cs.c
@@ -122,7 +122,7 @@ static inline void if_cs_write16(struct if_cs_card *card, uint reg, u16 val)
static inline void if_cs_write16_rep(
struct if_cs_card *card,
uint reg,
- void *buf,
+ const void *buf,
unsigned long count)
{
if (debug_output)
diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
index 51f664b..3dd537b 100644
--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -392,7 +392,7 @@ static int if_sdio_prog_helper(struct if_sdio_card *card)
unsigned long timeout;
u8 *chunk_buffer;
u32 chunk_size;
- u8 *firmware;
+ const u8 *firmware;
size_t size;
lbs_deb_enter(LBS_DEB_SDIO);
@@ -508,7 +508,7 @@ static int if_sdio_prog_real(struct if_sdio_card *card)
unsigned long timeout;
u8 *chunk_buffer;
u32 chunk_size;
- u8 *firmware;
+ const u8 *firmware;
size_t size, req_size;
lbs_deb_enter(LBS_DEB_SDIO);
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
index 8032df7..a25b670 100644
--- a/drivers/net/wireless/libertas/if_usb.c
+++ b/drivers/net/wireless/libertas/if_usb.c
@@ -293,7 +293,7 @@ static void if_usb_disconnect(struct usb_interface *intf)
static int if_usb_send_fw_pkt(struct if_usb_card *cardp)
{
struct fwdata *fwdata = cardp->ep_out_buf;
- uint8_t *firmware = cardp->fw->data;
+ const uint8_t *firmware = cardp->fw->data;
/* If we got a CRC failure on the last block, back
up and retry it */
@@ -746,7 +746,7 @@ static int if_usb_issue_boot_command(struct if_usb_card *cardp, int ivalue)
* len image length
* @return 0 or -1
*/
-static int check_fwfile_format(uint8_t *data, uint32_t totlen)
+static int check_fwfile_format(const uint8_t *data, uint32_t totlen)
{
uint32_t bincmd, exit;
uint32_t blksize, offset, len;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 02/28] bluetooth: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
2008-05-25 10:23 ` [PATCHv2 01/28] libertas: treat firmware data as const David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 13:07 ` Alan Cox
2008-05-25 10:23 ` [PATCHv2 03/28] cyclades: " David Woodhouse
` (32 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/bluetooth/bfusb.c | 3 ++-
drivers/bluetooth/bt3c_cs.c | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/bluetooth/bfusb.c b/drivers/bluetooth/bfusb.c
index b990805..0c211ad 100644
--- a/drivers/bluetooth/bfusb.c
+++ b/drivers/bluetooth/bfusb.c
@@ -566,7 +566,8 @@ static int bfusb_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg
return -ENOIOCTLCMD;
}
-static int bfusb_load_firmware(struct bfusb_data *data, unsigned char *firmware, int count)
+static int bfusb_load_firmware(struct bfusb_data *data,
+ const unsigned char *firmware, int count)
{
unsigned char *buf;
int err, pipe, len, size, sent = 0;
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c
index 7703d6e..593b7c5 100644
--- a/drivers/bluetooth/bt3c_cs.c
+++ b/drivers/bluetooth/bt3c_cs.c
@@ -470,7 +470,8 @@ static int bt3c_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long
/* ======================== Card services HCI interaction ======================== */
-static int bt3c_load_firmware(bt3c_info_t *info, unsigned char *firmware, int count)
+static int bt3c_load_firmware(bt3c_info_t *info, const unsigned char *firmware,
+ int count)
{
char *ptr = (char *) firmware;
char b[9];
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 03/28] cyclades: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
2008-05-25 10:23 ` [PATCHv2 01/28] libertas: treat firmware data as const David Woodhouse
2008-05-25 10:23 ` [PATCHv2 02/28] bluetooth: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 13:07 ` Alan Cox
2008-05-25 10:23 ` [PATCHv2 04/28] cx25840: " David Woodhouse
` (31 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/char/cyclades.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
index ef73e72..6bff9d8 100644
--- a/drivers/char/cyclades.c
+++ b/drivers/char/cyclades.c
@@ -4668,7 +4668,7 @@ static inline int __devinit cyc_isfwstr(const char *str, unsigned int size)
return 0;
}
-static inline void __devinit cyz_fpga_copy(void __iomem *fpga, u8 *data,
+static inline void __devinit cyz_fpga_copy(void __iomem *fpga, const u8 *data,
unsigned int size)
{
for (; size > 0; size--) {
@@ -4701,10 +4701,10 @@ static int __devinit __cyz_load_fw(const struct firmware *fw,
const char *name, const u32 mailbox, void __iomem *base,
void __iomem *fpga)
{
- void *ptr = fw->data;
- struct zfile_header *h = ptr;
- struct zfile_config *c, *cs;
- struct zfile_block *b, *bs;
+ const void *ptr = fw->data;
+ const struct zfile_header *h = ptr;
+ const struct zfile_config *c, *cs;
+ const struct zfile_block *b, *bs;
unsigned int a, tmp, len = fw->size;
#define BAD_FW KERN_ERR "Bad firmware: "
if (len < sizeof(*h)) {
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 04/28] cx25840: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (2 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 03/28] cyclades: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:51 ` Hans Verkuil
2008-05-25 10:23 ` [PATCHv2 05/28] myri10ge: " David Woodhouse
` (30 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, Tyler Trafford, Hans Verkuil
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/media/video/cx25840/cx25840-firmware.c | 21 +++++++++++++--------
1 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c
index 620d295..5c08ede 100644
--- a/drivers/media/video/cx25840/cx25840-firmware.c
+++ b/drivers/media/video/cx25840/cx25840-firmware.c
@@ -79,7 +79,7 @@ static int check_fw_load(struct i2c_client *client, int size)
return 0;
}
-static int fw_write(struct i2c_client *client, u8 *data, int size)
+static int fw_write(struct i2c_client *client, const u8 *data, int size)
{
if (i2c_master_send(client, data, size) < size) {
v4l_err(client, "firmware load i2c failure\n");
@@ -93,7 +93,8 @@ int cx25840_loadfw(struct i2c_client *client)
{
struct cx25840_state *state = i2c_get_clientdata(client);
const struct firmware *fw = NULL;
- u8 buffer[4], *ptr;
+ u8 buffer[FWSEND];
+ const u8 *ptr;
int size, retval;
if (state->is_cx23885)
@@ -108,6 +109,8 @@ int cx25840_loadfw(struct i2c_client *client)
buffer[0] = 0x08;
buffer[1] = 0x02;
+
+ /* Do we really need to do the first two bytes first? */
buffer[2] = fw->data[0];
buffer[3] = fw->data[1];
retval = fw_write(client, buffer, 4);
@@ -118,19 +121,21 @@ int cx25840_loadfw(struct i2c_client *client)
}
size = fw->size - 2;
- ptr = fw->data;
+ ptr = fw->data + 2;
while (size > 0) {
- ptr[0] = 0x08;
- ptr[1] = 0x02;
- retval = fw_write(client, ptr, min(FWSEND, size + 2));
+ int len = min(FWSEND - 2, size);
+
+ memcpy(buffer + 2, ptr, len);
+
+ retval = fw_write(client, ptr, len + 2);
if (retval < 0) {
release_firmware(fw);
return retval;
}
- size -= FWSEND - 2;
- ptr += FWSEND - 2;
+ size -= len;
+ ptr += len;
}
end_fw_load(client);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* Re: [PATCHv2 04/28] cx25840: treat firmware data as const
2008-05-25 10:23 ` [PATCHv2 04/28] cx25840: " David Woodhouse
@ 2008-05-25 10:51 ` Hans Verkuil
2008-05-25 14:36 ` David Woodhouse
` (2 more replies)
0 siblings, 3 replies; 72+ messages in thread
From: Hans Verkuil @ 2008-05-25 10:51 UTC (permalink / raw)
To: David Woodhouse; +Cc: linux-kernel, sam, alan, akpm, Tyler Trafford, Mike Isely
Hi David,
There is no need to do the first two bytes first. As far as I can tell
it was done to avoid having to allocate a local buffer. The initial
version of this code was writing much larger blocks at a time to the
i2c bus, so having to setup a large buffer on the stack was
undesirable. The pvrusb driver requires a much smaller buffer (FWSEND),
but the code was never changed. Now, however, the initial four-byte
write is just in the way and can be removed in favor of always writing
FWSEND-sized blocks of data.
I've CC-ed Mike Isely, the pvrusb2 maintainer, just in case there is an
outlandish restriction I'm not aware of on that USB device requiring
the firmware load to be done this way.
Regards,
Hans
On Sunday 25 May 2008 12:23:33 David Woodhouse wrote:
> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
> ---
> drivers/media/video/cx25840/cx25840-firmware.c | 21
> +++++++++++++-------- 1 files changed, 13 insertions(+), 8
> deletions(-)
>
> diff --git a/drivers/media/video/cx25840/cx25840-firmware.c
> b/drivers/media/video/cx25840/cx25840-firmware.c index
> 620d295..5c08ede 100644
> --- a/drivers/media/video/cx25840/cx25840-firmware.c
> +++ b/drivers/media/video/cx25840/cx25840-firmware.c
> @@ -79,7 +79,7 @@ static int check_fw_load(struct i2c_client *client,
> int size) return 0;
> }
>
> -static int fw_write(struct i2c_client *client, u8 *data, int size)
> +static int fw_write(struct i2c_client *client, const u8 *data, int
> size) {
> if (i2c_master_send(client, data, size) < size) {
> v4l_err(client, "firmware load i2c failure\n");
> @@ -93,7 +93,8 @@ int cx25840_loadfw(struct i2c_client *client)
> {
> struct cx25840_state *state = i2c_get_clientdata(client);
> const struct firmware *fw = NULL;
> - u8 buffer[4], *ptr;
> + u8 buffer[FWSEND];
> + const u8 *ptr;
> int size, retval;
>
> if (state->is_cx23885)
> @@ -108,6 +109,8 @@ int cx25840_loadfw(struct i2c_client *client)
>
> buffer[0] = 0x08;
> buffer[1] = 0x02;
> +
> + /* Do we really need to do the first two bytes first? */
> buffer[2] = fw->data[0];
> buffer[3] = fw->data[1];
> retval = fw_write(client, buffer, 4);
> @@ -118,19 +121,21 @@ int cx25840_loadfw(struct i2c_client *client)
> }
>
> size = fw->size - 2;
> - ptr = fw->data;
> + ptr = fw->data + 2;
> while (size > 0) {
> - ptr[0] = 0x08;
> - ptr[1] = 0x02;
> - retval = fw_write(client, ptr, min(FWSEND, size + 2));
> + int len = min(FWSEND - 2, size);
> +
> + memcpy(buffer + 2, ptr, len);
> +
> + retval = fw_write(client, ptr, len + 2);
>
> if (retval < 0) {
> release_firmware(fw);
> return retval;
> }
>
> - size -= FWSEND - 2;
> - ptr += FWSEND - 2;
> + size -= len;
> + ptr += len;
> }
>
> end_fw_load(client);
^ permalink raw reply [flat|nested] 72+ messages in thread* Re: [PATCHv2 04/28] cx25840: treat firmware data as const
2008-05-25 10:51 ` Hans Verkuil
@ 2008-05-25 14:36 ` David Woodhouse
2008-05-25 14:56 ` David Woodhouse
2008-05-25 15:20 ` Mike Isely
2 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 14:36 UTC (permalink / raw)
To: Hans Verkuil; +Cc: linux-kernel, sam, alan, akpm, Tyler Trafford, Mike Isely
On Sun, 2008-05-25 at 12:51 +0200, Hans Verkuil wrote:
> There is no need to do the first two bytes first. As far as I can tell
> it was done to avoid having to allocate a local buffer.
Thanks. I suspected as much, but wanted to err on the side of caution
since I can't test it. I'll change it in the next iteration.
--
dwmw2
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCHv2 04/28] cx25840: treat firmware data as const
2008-05-25 10:51 ` Hans Verkuil
2008-05-25 14:36 ` David Woodhouse
@ 2008-05-25 14:56 ` David Woodhouse
2008-05-25 15:04 ` Hans Verkuil
2008-05-25 15:37 ` Mike Isely
2008-05-25 15:20 ` Mike Isely
2 siblings, 2 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 14:56 UTC (permalink / raw)
To: Hans Verkuil; +Cc: linux-kernel, sam, alan, akpm, Tyler Trafford, Mike Isely
Hm, looks like I was also passing the wrong pointer to fw_write().
Here's the new version...
commit 57dc4762554119ffb5c711b2716f47997bc5c181
Author: David Woodhouse <dwmw2@infradead.org>
Date: Fri May 23 23:58:24 2008 +0100
cx25840: treat firmware data as const
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c
index 620d295..8d489a4 100644
--- a/drivers/media/video/cx25840/cx25840-firmware.c
+++ b/drivers/media/video/cx25840/cx25840-firmware.c
@@ -79,7 +79,7 @@ static int check_fw_load(struct i2c_client *client, int size)
return 0;
}
-static int fw_write(struct i2c_client *client, u8 *data, int size)
+static int fw_write(struct i2c_client *client, const u8 *data, int size)
{
if (i2c_master_send(client, data, size) < size) {
v4l_err(client, "firmware load i2c failure\n");
@@ -93,7 +93,8 @@ int cx25840_loadfw(struct i2c_client *client)
{
struct cx25840_state *state = i2c_get_clientdata(client);
const struct firmware *fw = NULL;
- u8 buffer[4], *ptr;
+ u8 buffer[FWSEND];
+ const u8 *ptr;
int size, retval;
if (state->is_cx23885)
@@ -108,29 +109,23 @@ int cx25840_loadfw(struct i2c_client *client)
buffer[0] = 0x08;
buffer[1] = 0x02;
- buffer[2] = fw->data[0];
- buffer[3] = fw->data[1];
- retval = fw_write(client, buffer, 4);
- if (retval < 0) {
- release_firmware(fw);
- return retval;
- }
-
- size = fw->size - 2;
+ size = fw->size;
ptr = fw->data;
while (size > 0) {
- ptr[0] = 0x08;
- ptr[1] = 0x02;
- retval = fw_write(client, ptr, min(FWSEND, size + 2));
+ int len = min(FWSEND - 2, size);
+
+ memcpy(buffer + 2, ptr, len);
+
+ retval = fw_write(client, buffer, len + 2);
if (retval < 0) {
release_firmware(fw);
return retval;
}
- size -= FWSEND - 2;
- ptr += FWSEND - 2;
+ size -= len;
+ ptr += len;
}
end_fw_load(client);
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* Re: [PATCHv2 04/28] cx25840: treat firmware data as const
2008-05-25 14:56 ` David Woodhouse
@ 2008-05-25 15:04 ` Hans Verkuil
2008-05-25 15:37 ` Mike Isely
1 sibling, 0 replies; 72+ messages in thread
From: Hans Verkuil @ 2008-05-25 15:04 UTC (permalink / raw)
To: David Woodhouse; +Cc: linux-kernel, sam, alan, akpm, Tyler Trafford, Mike Isely
On Sunday 25 May 2008 16:56:06 David Woodhouse wrote:
> Hm, looks like I was also passing the wrong pointer to fw_write().
> Here's the new version...
>
> commit 57dc4762554119ffb5c711b2716f47997bc5c181
> Author: David Woodhouse <dwmw2@infradead.org>
> Date: Fri May 23 23:58:24 2008 +0100
>
> cx25840: treat firmware data as const
>
> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Looks good. I tested it quickly and it works.
Acked-by: Hans Verkuil <hverkuil@xs4all.nl>
Regards,
Hans
>
> diff --git a/drivers/media/video/cx25840/cx25840-firmware.c
> b/drivers/media/video/cx25840/cx25840-firmware.c index
> 620d295..8d489a4 100644
> --- a/drivers/media/video/cx25840/cx25840-firmware.c
> +++ b/drivers/media/video/cx25840/cx25840-firmware.c
> @@ -79,7 +79,7 @@ static int check_fw_load(struct i2c_client *client,
> int size) return 0;
> }
>
> -static int fw_write(struct i2c_client *client, u8 *data, int size)
> +static int fw_write(struct i2c_client *client, const u8 *data, int
> size) {
> if (i2c_master_send(client, data, size) < size) {
> v4l_err(client, "firmware load i2c failure\n");
> @@ -93,7 +93,8 @@ int cx25840_loadfw(struct i2c_client *client)
> {
> struct cx25840_state *state = i2c_get_clientdata(client);
> const struct firmware *fw = NULL;
> - u8 buffer[4], *ptr;
> + u8 buffer[FWSEND];
> + const u8 *ptr;
> int size, retval;
>
> if (state->is_cx23885)
> @@ -108,29 +109,23 @@ int cx25840_loadfw(struct i2c_client *client)
>
> buffer[0] = 0x08;
> buffer[1] = 0x02;
> - buffer[2] = fw->data[0];
> - buffer[3] = fw->data[1];
> - retval = fw_write(client, buffer, 4);
>
> - if (retval < 0) {
> - release_firmware(fw);
> - return retval;
> - }
> -
> - size = fw->size - 2;
> + size = fw->size;
> ptr = fw->data;
> while (size > 0) {
> - ptr[0] = 0x08;
> - ptr[1] = 0x02;
> - retval = fw_write(client, ptr, min(FWSEND, size + 2));
> + int len = min(FWSEND - 2, size);
> +
> + memcpy(buffer + 2, ptr, len);
> +
> + retval = fw_write(client, buffer, len + 2);
>
> if (retval < 0) {
> release_firmware(fw);
> return retval;
> }
>
> - size -= FWSEND - 2;
> - ptr += FWSEND - 2;
> + size -= len;
> + ptr += len;
> }
>
> end_fw_load(client);
^ permalink raw reply [flat|nested] 72+ messages in thread* Re: [PATCHv2 04/28] cx25840: treat firmware data as const
2008-05-25 14:56 ` David Woodhouse
2008-05-25 15:04 ` Hans Verkuil
@ 2008-05-25 15:37 ` Mike Isely
1 sibling, 0 replies; 72+ messages in thread
From: Mike Isely @ 2008-05-25 15:37 UTC (permalink / raw)
To: David Woodhouse
Cc: Hans Verkuil, Linux Kernel Mailing List, sam, Alan Cox, akpm,
Tyler Trafford, Mike Isely at pobox
On Sun, 25 May 2008, David Woodhouse wrote:
> Hm, looks like I was also passing the wrong pointer to fw_write().
> Here's the new version...
>
> commit 57dc4762554119ffb5c711b2716f47997bc5c181
> Author: David Woodhouse <dwmw2@infradead.org>
> Date: Fri May 23 23:58:24 2008 +0100
>
> cx25840: treat firmware data as const
>
> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Just to be technically correct, this is what I tested successfully with
the pvrusb2 driver.
Acked-By: Mike Isely <isely@pobox.com>
-Mike
>
> diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c
> index 620d295..8d489a4 100644
> --- a/drivers/media/video/cx25840/cx25840-firmware.c
> +++ b/drivers/media/video/cx25840/cx25840-firmware.c
> @@ -79,7 +79,7 @@ static int check_fw_load(struct i2c_client *client, int size)
> return 0;
> }
>
> -static int fw_write(struct i2c_client *client, u8 *data, int size)
> +static int fw_write(struct i2c_client *client, const u8 *data, int size)
> {
> if (i2c_master_send(client, data, size) < size) {
> v4l_err(client, "firmware load i2c failure\n");
> @@ -93,7 +93,8 @@ int cx25840_loadfw(struct i2c_client *client)
> {
> struct cx25840_state *state = i2c_get_clientdata(client);
> const struct firmware *fw = NULL;
> - u8 buffer[4], *ptr;
> + u8 buffer[FWSEND];
> + const u8 *ptr;
> int size, retval;
>
> if (state->is_cx23885)
> @@ -108,29 +109,23 @@ int cx25840_loadfw(struct i2c_client *client)
>
> buffer[0] = 0x08;
> buffer[1] = 0x02;
> - buffer[2] = fw->data[0];
> - buffer[3] = fw->data[1];
> - retval = fw_write(client, buffer, 4);
>
> - if (retval < 0) {
> - release_firmware(fw);
> - return retval;
> - }
> -
> - size = fw->size - 2;
> + size = fw->size;
> ptr = fw->data;
> while (size > 0) {
> - ptr[0] = 0x08;
> - ptr[1] = 0x02;
> - retval = fw_write(client, ptr, min(FWSEND, size + 2));
> + int len = min(FWSEND - 2, size);
> +
> + memcpy(buffer + 2, ptr, len);
> +
> + retval = fw_write(client, buffer, len + 2);
>
> if (retval < 0) {
> release_firmware(fw);
> return retval;
> }
>
> - size -= FWSEND - 2;
> - ptr += FWSEND - 2;
> + size -= len;
> + ptr += len;
> }
>
> end_fw_load(client);
>
>
--
Mike Isely
isely @ pobox (dot) com
PGP: 03 54 43 4D 75 E5 CC 92 71 16 01 E2 B5 F5 C1 E8
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCHv2 04/28] cx25840: treat firmware data as const
2008-05-25 10:51 ` Hans Verkuil
2008-05-25 14:36 ` David Woodhouse
2008-05-25 14:56 ` David Woodhouse
@ 2008-05-25 15:20 ` Mike Isely
2008-05-25 16:16 ` Tyler Trafford
2 siblings, 1 reply; 72+ messages in thread
From: Mike Isely @ 2008-05-25 15:20 UTC (permalink / raw)
To: Hans Verkuil
Cc: David Woodhouse, Linux Kernel Mailing List, sam, Alan Cox, akpm,
Tyler Trafford, Mike Isely at pobox
On Sun, 25 May 2008, Hans Verkuil wrote:
> Hi David,
>
> There is no need to do the first two bytes first. As far as I can tell
> it was done to avoid having to allocate a local buffer. The initial
> version of this code was writing much larger blocks at a time to the
> i2c bus, so having to setup a large buffer on the stack was
> undesirable. The pvrusb driver requires a much smaller buffer (FWSEND),
> but the code was never changed. Now, however, the initial four-byte
> write is just in the way and can be removed in favor of always writing
> FWSEND-sized blocks of data.
>
> I've CC-ed Mike Isely, the pvrusb2 maintainer, just in case there is an
> outlandish restriction I'm not aware of on that USB device requiring
> the firmware load to be done this way.
>
The pvrusb2 driver's FWSEND limit is an artifact of the hardware and
cannot be changed. HOWEVER, in the standalone driver (not in the
kernel) I have a hack implemented that can monitor and intercept such
I2C operations and break them into smaller I2C transactions. I
implemented this to allow the standalone driver to function correctly on
some older kernels where FWSEND is too large. I can enable that hack
for the kernel driver and thus lift the limit. But without it, FWSEND
absolutely has to be small enough that the entire transaction (including
a few bytes of transport overhead) can fit within a 64 byte URB.
I see that this change allocates a local buffer on the stack (sized by
FWSEND). Though the buffer is small (48 bytes, see above paragraph), it
is controlled by a macro and thus leaves open the possibility that it
could be accidentally increased to a point where the stack gets
overflowed. Seems like not a good idea, but either way it should not
affect the pvrusb2 driver.
Acked-By: Mike Isely <isely@pobox.com>
-Mike
> Regards,
>
> Hans
>
> On Sunday 25 May 2008 12:23:33 David Woodhouse wrote:
> > Signed-off-by: David Woodhouse <dwmw2@infradead.org>
> > ---
> > drivers/media/video/cx25840/cx25840-firmware.c | 21
> > +++++++++++++-------- 1 files changed, 13 insertions(+), 8
> > deletions(-)
> >
> > diff --git a/drivers/media/video/cx25840/cx25840-firmware.c
> > b/drivers/media/video/cx25840/cx25840-firmware.c index
> > 620d295..5c08ede 100644
> > --- a/drivers/media/video/cx25840/cx25840-firmware.c
> > +++ b/drivers/media/video/cx25840/cx25840-firmware.c
> > @@ -79,7 +79,7 @@ static int check_fw_load(struct i2c_client *client,
> > int size) return 0;
> > }
> >
> > -static int fw_write(struct i2c_client *client, u8 *data, int size)
> > +static int fw_write(struct i2c_client *client, const u8 *data, int
> > size) {
> > if (i2c_master_send(client, data, size) < size) {
> > v4l_err(client, "firmware load i2c failure\n");
> > @@ -93,7 +93,8 @@ int cx25840_loadfw(struct i2c_client *client)
> > {
> > struct cx25840_state *state = i2c_get_clientdata(client);
> > const struct firmware *fw = NULL;
> > - u8 buffer[4], *ptr;
> > + u8 buffer[FWSEND];
> > + const u8 *ptr;
> > int size, retval;
> >
> > if (state->is_cx23885)
> > @@ -108,6 +109,8 @@ int cx25840_loadfw(struct i2c_client *client)
> >
> > buffer[0] = 0x08;
> > buffer[1] = 0x02;
> > +
> > + /* Do we really need to do the first two bytes first? */
> > buffer[2] = fw->data[0];
> > buffer[3] = fw->data[1];
> > retval = fw_write(client, buffer, 4);
> > @@ -118,19 +121,21 @@ int cx25840_loadfw(struct i2c_client *client)
> > }
> >
> > size = fw->size - 2;
> > - ptr = fw->data;
> > + ptr = fw->data + 2;
> > while (size > 0) {
> > - ptr[0] = 0x08;
> > - ptr[1] = 0x02;
> > - retval = fw_write(client, ptr, min(FWSEND, size + 2));
> > + int len = min(FWSEND - 2, size);
> > +
> > + memcpy(buffer + 2, ptr, len);
> > +
> > + retval = fw_write(client, ptr, len + 2);
> >
> > if (retval < 0) {
> > release_firmware(fw);
> > return retval;
> > }
> >
> > - size -= FWSEND - 2;
> > - ptr += FWSEND - 2;
> > + size -= len;
> > + ptr += len;
> > }
> >
> > end_fw_load(client);
>
>
>
--
Mike Isely
isely @ pobox (dot) com
PGP: 03 54 43 4D 75 E5 CC 92 71 16 01 E2 B5 F5 C1 E8
^ permalink raw reply [flat|nested] 72+ messages in thread* Re: [PATCHv2 04/28] cx25840: treat firmware data as const
2008-05-25 15:20 ` Mike Isely
@ 2008-05-25 16:16 ` Tyler Trafford
0 siblings, 0 replies; 72+ messages in thread
From: Tyler Trafford @ 2008-05-25 16:16 UTC (permalink / raw)
To: Mike Isely
Cc: Hans Verkuil, David Woodhouse, Linux Kernel Mailing List, sam,
Alan Cox, akpm
[cx25840-firmware.c]
Looks good to me.
Acked-By: Tyler Trafford <ttrafford@gmail.com>
Mike Isely wrote:
> I see that this change allocates a local buffer on the stack (sized by
> FWSEND). Though the buffer is small (48 bytes, see above paragraph), it
> is controlled by a macro and thus leaves open the possibility that it
> could be accidentally increased to a point where the stack gets
> overflowed. Seems like not a good idea, but either way it should not
> affect the pvrusb2 driver.
Separate topic, but maybe the send size should be parameterized, so that
the adapter can specify a maximum?
--
Tyler Trafford
A sect or party is an elegant incognito devised to save a man from
the vexation of thinking.
-- Ralph Waldo Emerson, Journals, 1831
^ permalink raw reply [flat|nested] 72+ messages in thread
* [PATCHv2 05/28] myri10ge: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (3 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 04/28] cx25840: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 06/28] vx222: " David Woodhouse
` (29 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, Brice Goglin, Andrew Gallatin
... which means allocating our own buffer for reading it back.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/myri10ge/myri10ge.c | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index c91b12e..ab7a80b 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -529,6 +529,7 @@ static int myri10ge_load_hotplug_firmware(struct myri10ge_priv *mgp, u32 * size)
unsigned crc, reread_crc;
const struct firmware *fw;
struct device *dev = &mgp->pdev->dev;
+ unsigned char *fw_readback;
struct mcp_gen_header *hdr;
size_t hdr_offset;
int status;
@@ -571,9 +572,15 @@ static int myri10ge_load_hotplug_firmware(struct myri10ge_priv *mgp, u32 * size)
mb();
readb(mgp->sram);
}
+ fw_readback = vmalloc(fw->size);
+ if (!fw_readback) {
+ status = -ENOMEM;
+ goto abort_with_fw;
+ }
/* corruption checking is good for parity recovery and buggy chipset */
- memcpy_fromio(fw->data, mgp->sram + MYRI10GE_FW_OFFSET, fw->size);
- reread_crc = crc32(~0, fw->data, fw->size);
+ memcpy_fromio(fw_readback, mgp->sram + MYRI10GE_FW_OFFSET, fw->size);
+ reread_crc = crc32(~0, fw_readback, fw->size);
+ vfree(fw_readback);
if (crc != reread_crc) {
dev_err(dev, "CRC failed(fw-len=%u), got 0x%x (expect 0x%x)\n",
(unsigned)fw->size, reread_crc, crc);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 06/28] vx222: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (4 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 05/28] myri10ge: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 07/28] riptide: " David Woodhouse
` (28 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
sound/pci/vx222/vx222_ops.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/sound/pci/vx222/vx222_ops.c b/sound/pci/vx222/vx222_ops.c
index b4bfc1a..631f3a6 100644
--- a/sound/pci/vx222/vx222_ops.c
+++ b/sound/pci/vx222/vx222_ops.c
@@ -359,7 +359,7 @@ static int vx2_load_xilinx_binary(struct vx_core *chip, const struct firmware *x
{
unsigned int i;
unsigned int port;
- unsigned char *image;
+ const unsigned char *image;
/* XILINX reset (wait at least 1 milisecond between reset on and off). */
vx_outl(chip, CNTRL, VX_CNTRL_REGISTER_VALUE | VX_XILINX_RESET_MASK);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 07/28] riptide: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (5 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 06/28] vx222: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 08/28] pcxhr: " David Woodhouse
` (27 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
sound/pci/riptide/riptide.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
index 979f7da..6a35962 100644
--- a/sound/pci/riptide/riptide.c
+++ b/sound/pci/riptide/riptide.c
@@ -682,7 +682,7 @@ static union firmware_version firmware_versions[] = {
},
};
-static u32 atoh(unsigned char *in, unsigned int len)
+static u32 atoh(const unsigned char *in, unsigned int len)
{
u32 sum = 0;
unsigned int mult = 1;
@@ -702,12 +702,12 @@ static u32 atoh(unsigned char *in, unsigned int len)
return sum;
}
-static int senddata(struct cmdif *cif, unsigned char *in, u32 offset)
+static int senddata(struct cmdif *cif, const unsigned char *in, u32 offset)
{
u32 addr;
u32 data;
u32 i;
- unsigned char *p;
+ const unsigned char *p;
i = atoh(&in[1], 2);
addr = offset + atoh(&in[3], 4);
@@ -726,10 +726,10 @@ static int senddata(struct cmdif *cif, unsigned char *in, u32 offset)
return 0;
}
-static int loadfirmware(struct cmdif *cif, unsigned char *img,
+static int loadfirmware(struct cmdif *cif, const unsigned char *img,
unsigned int size)
{
- unsigned char *in;
+ const unsigned char *in;
u32 laddr, saddr, t, val;
int err = 0;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 08/28] pcxhr: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (6 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 07/28] riptide: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 09/28] vx: " David Woodhouse
` (26 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
sound/pci/pcxhr/pcxhr_core.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/pci/pcxhr/pcxhr_core.c b/sound/pci/pcxhr/pcxhr_core.c
index 78aa81f..957e6af 100644
--- a/sound/pci/pcxhr/pcxhr_core.c
+++ b/sound/pci/pcxhr/pcxhr_core.c
@@ -269,7 +269,7 @@ int pcxhr_load_xilinx_binary(struct pcxhr_mgr *mgr, const struct firmware *xilin
unsigned int chipsc;
unsigned char data;
unsigned char mask;
- unsigned char *image;
+ const unsigned char *image;
/* test first xilinx */
chipsc = PCXHR_INPL(mgr, PCXHR_PLX_CHIPSC);
@@ -316,7 +316,7 @@ static int pcxhr_download_dsp(struct pcxhr_mgr *mgr, const struct firmware *dsp)
int err;
unsigned int i;
unsigned int len;
- unsigned char *data;
+ const unsigned char *data;
unsigned char dummy;
/* check the length of boot image */
snd_assert(dsp->size > 0, return -EINVAL);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 09/28] vx: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (7 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 08/28] pcxhr: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 10/28] ueagle-atm: " David Woodhouse
` (25 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
sound/drivers/vx/vx_core.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/drivers/vx/vx_core.c b/sound/drivers/vx/vx_core.c
index 9953886..585af2e 100644
--- a/sound/drivers/vx/vx_core.c
+++ b/sound/drivers/vx/vx_core.c
@@ -453,7 +453,7 @@ int snd_vx_load_boot_image(struct vx_core *chip, const struct firmware *boot)
vx_outb(chip, TXM, 0);
vx_outb(chip, TXL, 0);
} else {
- unsigned char *image = boot->data + i;
+ const unsigned char *image = boot->data + i;
if (vx_wait_isr_bit(chip, ISR_TX_EMPTY) < 0) {
snd_printk(KERN_ERR "dsp boot failed at %d\n", i);
return -EIO;
@@ -671,7 +671,7 @@ int snd_vx_dsp_load(struct vx_core *chip, const struct firmware *dsp)
unsigned int i;
int err;
unsigned int csum = 0;
- unsigned char *image, *cptr;
+ const unsigned char *image, *cptr;
snd_assert(dsp->size % 3 == 0, return -EINVAL);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 10/28] ueagle-atm: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (8 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 09/28] vx: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 11/28] cxacru: " David Woodhouse
` (24 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/usb/atm/ueagle-atm.c | 20 +++++++++++---------
1 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c
index 5f71ff3..cb01b51 100644
--- a/drivers/usb/atm/ueagle-atm.c
+++ b/drivers/usb/atm/ueagle-atm.c
@@ -579,7 +579,7 @@ MODULE_PARM_DESC(annex,
* uea_send_modem_cmd - Send a command for pre-firmware devices.
*/
static int uea_send_modem_cmd(struct usb_device *usb,
- u16 addr, u16 size, u8 * buff)
+ u16 addr, u16 size, const u8 *buff)
{
int ret = -ENOMEM;
u8 *xfer_buff;
@@ -604,7 +604,8 @@ static int uea_send_modem_cmd(struct usb_device *usb,
static void uea_upload_pre_firmware(const struct firmware *fw_entry, void *context)
{
struct usb_device *usb = context;
- u8 *pfw, value;
+ const u8 *pfw;
+ u8 value;
u32 crc = 0;
int ret, size;
@@ -720,7 +721,7 @@ static int uea_load_firmware(struct usb_device *usb, unsigned int ver)
/*
* Make sure that the DSP code provided is safe to use.
*/
-static int check_dsp_e1(u8 *dsp, unsigned int len)
+static int check_dsp_e1(const u8 *dsp, unsigned int len)
{
u8 pagecount, blockcount;
u16 blocksize;
@@ -771,7 +772,7 @@ static int check_dsp_e1(u8 *dsp, unsigned int len)
return 0;
}
-static int check_dsp_e4(u8 *dsp, int len)
+static int check_dsp_e4(const u8 *dsp, int len)
{
int i;
struct l1_code *p = (struct l1_code *) dsp;
@@ -819,7 +820,7 @@ static int check_dsp_e4(u8 *dsp, int len)
/*
* send data to the idma pipe
* */
-static int uea_idma_write(struct uea_softc *sc, void *data, u32 size)
+static int uea_idma_write(struct uea_softc *sc, const void *data, u32 size)
{
int ret = -ENOMEM;
u8 *xfer_buff;
@@ -903,7 +904,7 @@ static void uea_load_page_e1(struct work_struct *work)
u16 ovl = sc->ovl;
struct block_info_e1 bi;
- u8 *p;
+ const u8 *p;
u8 pagecount, blockcount;
u16 blockaddr, blocksize;
u32 pageoffset;
@@ -986,7 +987,7 @@ static void __uea_load_page_e4(struct uea_softc *sc, u8 pageno, int boot)
bi.wReserved = cpu_to_be16(UEA_RESERVED);
do {
- u8 *blockoffset;
+ const u8 *blockoffset;
unsigned int blocksize;
blockidx = &p->page_header[blockno];
@@ -1095,7 +1096,7 @@ static inline int wait_cmv_ack(struct uea_softc *sc)
#define UCDC_SEND_ENCAPSULATED_COMMAND 0x00
static int uea_request(struct uea_softc *sc,
- u16 value, u16 index, u16 size, void *data)
+ u16 value, u16 index, u16 size, const void *data)
{
u8 *xfer_buff;
int ret = -ENOMEM;
@@ -1891,7 +1892,8 @@ static int load_XILINX_firmware(struct uea_softc *sc)
{
const struct firmware *fw_entry;
int ret, size, u, ln;
- u8 *pfw, value;
+ const u8 *pfw;
+ u8 value;
char *fw_name = FW_DIR "930-fpga.bin";
uea_enters(INS_TO_USBDEV(sc));
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 11/28] cxacru: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (9 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 10/28] ueagle-atm: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 12/28] aic94xx: " David Woodhouse
` (23 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/usb/atm/cxacru.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
index 5ea3093..90583d6 100644
--- a/drivers/usb/atm/cxacru.c
+++ b/drivers/usb/atm/cxacru.c
@@ -820,7 +820,7 @@ reschedule:
}
static int cxacru_fw(struct usb_device *usb_dev, enum cxacru_fw_request fw,
- u8 code1, u8 code2, u32 addr, u8 *data, int size)
+ u8 code1, u8 code2, u32 addr, const u8 *data, int size)
{
int ret;
u8 *buf;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 12/28] aic94xx: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (10 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 11/28] cxacru: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 13/28] zd1201: " David Woodhouse
` (22 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/scsi/aic94xx/aic94xx_sds.c | 12 ++++++------
drivers/scsi/aic94xx/aic94xx_sds.h | 4 ++--
drivers/scsi/aic94xx/aic94xx_seq.c | 7 ++++---
3 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/drivers/scsi/aic94xx/aic94xx_sds.c b/drivers/scsi/aic94xx/aic94xx_sds.c
index 4446e3d..8630a75 100644
--- a/drivers/scsi/aic94xx/aic94xx_sds.c
+++ b/drivers/scsi/aic94xx/aic94xx_sds.c
@@ -1093,9 +1093,9 @@ out:
* @bytes_to_verify: total bytes to verify
*/
int asd_verify_flash_seg(struct asd_ha_struct *asd_ha,
- void *src, u32 dest_offset, u32 bytes_to_verify)
+ const void *src, u32 dest_offset, u32 bytes_to_verify)
{
- u8 *src_buf;
+ const u8 *src_buf;
u8 flash_char;
int err;
u32 nv_offset, reg, i;
@@ -1105,7 +1105,7 @@ int asd_verify_flash_seg(struct asd_ha_struct *asd_ha,
err = FLASH_OK;
nv_offset = dest_offset;
- src_buf = (u8 *)src;
+ src_buf = (const u8 *)src;
for (i = 0; i < bytes_to_verify; i++) {
flash_char = asd_read_reg_byte(asd_ha, reg + nv_offset + i);
if (flash_char != src_buf[i]) {
@@ -1124,9 +1124,9 @@ int asd_verify_flash_seg(struct asd_ha_struct *asd_ha,
* @bytes_to_write: total bytes to write
*/
int asd_write_flash_seg(struct asd_ha_struct *asd_ha,
- void *src, u32 dest_offset, u32 bytes_to_write)
+ const void *src, u32 dest_offset, u32 bytes_to_write)
{
- u8 *src_buf;
+ const u8 *src_buf;
u32 nv_offset, reg, i;
int err;
@@ -1153,7 +1153,7 @@ int asd_write_flash_seg(struct asd_ha_struct *asd_ha,
return err;
}
- src_buf = (u8 *)src;
+ src_buf = (const u8 *)src;
for (i = 0; i < bytes_to_write; i++) {
/* Setup program command sequence */
switch (asd_ha->hw_prof.flash.method) {
diff --git a/drivers/scsi/aic94xx/aic94xx_sds.h b/drivers/scsi/aic94xx/aic94xx_sds.h
index bb9795a..a06dc01 100644
--- a/drivers/scsi/aic94xx/aic94xx_sds.h
+++ b/drivers/scsi/aic94xx/aic94xx_sds.h
@@ -110,9 +110,9 @@ struct bios_file_header {
};
int asd_verify_flash_seg(struct asd_ha_struct *asd_ha,
- void *src, u32 dest_offset, u32 bytes_to_verify);
+ const void *src, u32 dest_offset, u32 bytes_to_verify);
int asd_write_flash_seg(struct asd_ha_struct *asd_ha,
- void *src, u32 dest_offset, u32 bytes_to_write);
+ const void *src, u32 dest_offset, u32 bytes_to_write);
int asd_chk_write_status(struct asd_ha_struct *asd_ha,
u32 sector_addr, u8 erase_flag);
int asd_check_flash_type(struct asd_ha_struct *asd_ha);
diff --git a/drivers/scsi/aic94xx/aic94xx_seq.c b/drivers/scsi/aic94xx/aic94xx_seq.c
index f4272ac..8f98e33 100644
--- a/drivers/scsi/aic94xx/aic94xx_seq.c
+++ b/drivers/scsi/aic94xx/aic94xx_seq.c
@@ -46,7 +46,7 @@
static const struct firmware *sequencer_fw;
static u16 cseq_vecs[CSEQ_NUM_VECS], lseq_vecs[LSEQ_NUM_VECS], mode2_task,
cseq_idle_loop, lseq_idle_loop;
-static u8 *cseq_code, *lseq_code;
+static const u8 *cseq_code, *lseq_code;
static u32 cseq_code_size, lseq_code_size;
static u16 first_scb_site_no = 0xFFFF;
@@ -1235,7 +1235,8 @@ int asd_release_firmware(void)
static int asd_request_firmware(struct asd_ha_struct *asd_ha)
{
int err, i;
- struct sequencer_file_header header, *hdr_ptr;
+ struct sequencer_file_header header;
+ const struct sequencer_file_header *hdr_ptr;
u32 csum = 0;
u16 *ptr_cseq_vecs, *ptr_lseq_vecs;
@@ -1249,7 +1250,7 @@ static int asd_request_firmware(struct asd_ha_struct *asd_ha)
if (err)
return err;
- hdr_ptr = (struct sequencer_file_header *)sequencer_fw->data;
+ hdr_ptr = (const struct sequencer_file_header *)sequencer_fw->data;
header.csum = le32_to_cpu(hdr_ptr->csum);
header.major = le32_to_cpu(hdr_ptr->major);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 13/28] zd1201: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (11 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 12/28] aic94xx: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 14/28] rt2x00: " David Woodhouse
` (21 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/wireless/zd1201.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c
index d5c0c66..78baa0f 100644
--- a/drivers/net/wireless/zd1201.c
+++ b/drivers/net/wireless/zd1201.c
@@ -49,7 +49,7 @@ MODULE_DEVICE_TABLE(usb, zd1201_table);
static int zd1201_fw_upload(struct usb_device *dev, int apfw)
{
const struct firmware *fw_entry;
- char *data;
+ const char *data;
unsigned long len;
int err;
unsigned char ret;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 14/28] rt2x00: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (12 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 13/28] zd1201: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 15/28] p54: " David Woodhouse
` (20 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/wireless/rt2x00/rt2x00.h | 4 ++--
drivers/net/wireless/rt2x00/rt2x00pci.h | 2 +-
drivers/net/wireless/rt2x00/rt61pci.c | 4 ++--
drivers/net/wireless/rt2x00/rt73usb.c | 6 +++---
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
index 57bdc15..79eabaa 100644
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
@@ -506,8 +506,8 @@ struct rt2x00lib_ops {
*/
int (*probe_hw) (struct rt2x00_dev *rt2x00dev);
char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev);
- u16 (*get_firmware_crc) (void *data, const size_t len);
- int (*load_firmware) (struct rt2x00_dev *rt2x00dev, void *data,
+ u16 (*get_firmware_crc) (const void *data, const size_t len);
+ int (*load_firmware) (struct rt2x00_dev *rt2x00dev, const void *data,
const size_t len);
/*
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.h b/drivers/net/wireless/rt2x00/rt2x00pci.h
index 9d1cdb9..b41967e 100644
--- a/drivers/net/wireless/rt2x00/rt2x00pci.h
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.h
@@ -82,7 +82,7 @@ static inline void rt2x00pci_register_write(struct rt2x00_dev *rt2x00dev,
static inline void
rt2x00pci_register_multiwrite(struct rt2x00_dev *rt2x00dev,
const unsigned long offset,
- void *value, const u16 length)
+ const void *value, const u16 length)
{
memcpy_toio(rt2x00dev->csr.base + offset, value, length);
}
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 14bc7b2..bb78de5 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -915,7 +915,7 @@ static char *rt61pci_get_firmware_name(struct rt2x00_dev *rt2x00dev)
return fw_name;
}
-static u16 rt61pci_get_firmware_crc(void *data, const size_t len)
+static u16 rt61pci_get_firmware_crc(const void *data, const size_t len)
{
u16 crc;
@@ -932,7 +932,7 @@ static u16 rt61pci_get_firmware_crc(void *data, const size_t len)
return crc;
}
-static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, void *data,
+static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data,
const size_t len)
{
int i;
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index da19a3a..36c2f17 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -850,7 +850,7 @@ static char *rt73usb_get_firmware_name(struct rt2x00_dev *rt2x00dev)
return FIRMWARE_RT2571;
}
-static u16 rt73usb_get_firmware_crc(void *data, const size_t len)
+static u16 rt73usb_get_firmware_crc(const void *data, const size_t len)
{
u16 crc;
@@ -867,13 +867,13 @@ static u16 rt73usb_get_firmware_crc(void *data, const size_t len)
return crc;
}
-static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev, void *data,
+static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data,
const size_t len)
{
unsigned int i;
int status;
u32 reg;
- char *ptr = data;
+ const char *ptr = data;
char *cache;
int buflen;
int timeout;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 15/28] p54: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (13 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 14/28] rt2x00: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 16/28] atmel: " David Woodhouse
` (19 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/wireless/p54/p54usb.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
index 98ddbb3..6728254 100644
--- a/drivers/net/wireless/p54/p54usb.c
+++ b/drivers/net/wireless/p54/p54usb.c
@@ -375,7 +375,8 @@ static int p54u_upload_firmware_3887(struct ieee80211_hw *dev)
const struct firmware *fw_entry = NULL;
int err, alen;
u8 carry = 0;
- u8 *buf, *tmp, *data;
+ u8 *buf, *tmp;
+ const u8 *data;
unsigned int left, remains, block_size;
struct x2_header *hdr;
unsigned long timeout;
@@ -522,7 +523,7 @@ static int p54u_upload_firmware_net2280(struct ieee80211_hw *dev)
void *buf;
__le32 reg;
unsigned int remains, offset;
- u8 *data;
+ const u8 *data;
buf = kmalloc(512, GFP_KERNEL);
if (!buf) {
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 16/28] atmel: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (14 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 15/28] p54: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 17/28] irda-usb: " David Woodhouse
` (18 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/wireless/atmel.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c
index 438e63e..d1acef7 100644
--- a/drivers/net/wireless/atmel.c
+++ b/drivers/net/wireless/atmel.c
@@ -560,7 +560,7 @@ static const struct {
static void build_wpa_mib(struct atmel_private *priv);
static int atmel_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
static void atmel_copy_to_card(struct net_device *dev, u16 dest,
- unsigned char *src, u16 len);
+ const unsigned char *src, u16 len);
static void atmel_copy_to_host(struct net_device *dev, unsigned char *dest,
u16 src, u16 len);
static void atmel_set_gcr(struct net_device *dev, u16 mask);
@@ -3853,7 +3853,7 @@ static int reset_atmel_card(struct net_device *dev)
if (priv->card_type == CARD_TYPE_EEPROM) {
/* copy in firmware if needed */
const struct firmware *fw_entry = NULL;
- unsigned char *fw;
+ const unsigned char *fw;
int len = priv->firmware_length;
if (!(fw = priv->firmware)) {
if (priv->firmware_type == ATMEL_FW_TYPE_NONE) {
@@ -4120,7 +4120,7 @@ static void atmel_writeAR(struct net_device *dev, u16 data)
}
static void atmel_copy_to_card(struct net_device *dev, u16 dest,
- unsigned char *src, u16 len)
+ const unsigned char *src, u16 len)
{
int i;
atmel_writeAR(dev, dest);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 17/28] irda-usb: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (15 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 16/28] atmel: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 18/28] cxgb3: " David Woodhouse
` (17 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/irda/irda-usb.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
index 6f50ed7..18b471c 100644
--- a/drivers/net/irda/irda-usb.c
+++ b/drivers/net/irda/irda-usb.c
@@ -1024,7 +1024,7 @@ static int irda_usb_is_receiving(struct irda_usb_cb *self)
* Upload firmware code to SigmaTel 421X IRDA-USB dongle
*/
static int stir421x_fw_upload(struct irda_usb_cb *self,
- unsigned char *patch,
+ const unsigned char *patch,
const unsigned int patch_len)
{
int ret = -ENOMEM;
@@ -1073,11 +1073,11 @@ static int stir421x_fw_upload(struct irda_usb_cb *self,
*/
static int stir421x_patch_device(struct irda_usb_cb *self)
{
- unsigned int i;
- int ret;
- char stir421x_fw_name[11];
- const struct firmware *fw;
- unsigned char *fw_version_ptr; /* pointer to version string */
+ unsigned int i;
+ int ret;
+ char stir421x_fw_name[11];
+ const struct firmware *fw;
+ const unsigned char *fw_version_ptr; /* pointer to version string */
unsigned long fw_version = 0;
/*
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 18/28] cxgb3: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (16 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 17/28] irda-usb: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 19/28] bt8xx: " David Woodhouse
` (16 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/cxgb3/common.h | 5 +++--
drivers/net/cxgb3/t3_hw.c | 7 ++++---
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h
index 579bee4..8e8ebd7 100644
--- a/drivers/net/cxgb3/common.h
+++ b/drivers/net/cxgb3/common.h
@@ -686,8 +686,9 @@ int t3_seeprom_write(struct adapter *adapter, u32 addr, __le32 data);
int t3_seeprom_wp(struct adapter *adapter, int enable);
int t3_get_tp_version(struct adapter *adapter, u32 *vers);
int t3_check_tpsram_version(struct adapter *adapter, int *must_load);
-int t3_check_tpsram(struct adapter *adapter, u8 *tp_ram, unsigned int size);
-int t3_set_proto_sram(struct adapter *adap, u8 *data);
+int t3_check_tpsram(struct adapter *adapter, const u8 *tp_ram,
+ unsigned int size);
+int t3_set_proto_sram(struct adapter *adap, const u8 *data);
int t3_read_flash(struct adapter *adapter, unsigned int addr,
unsigned int nwords, u32 *data, int byte_oriented);
int t3_load_fw(struct adapter *adapter, const u8 * fw_data, unsigned int size);
diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c
index d405a93..47d5178 100644
--- a/drivers/net/cxgb3/t3_hw.c
+++ b/drivers/net/cxgb3/t3_hw.c
@@ -923,7 +923,8 @@ int t3_check_tpsram_version(struct adapter *adapter, int *must_load)
* Checks if an adapter's tp sram is compatible with the driver.
* Returns 0 if the versions are compatible, a negative error otherwise.
*/
-int t3_check_tpsram(struct adapter *adapter, u8 *tp_sram, unsigned int size)
+int t3_check_tpsram(struct adapter *adapter, const u8 *tp_sram,
+ unsigned int size)
{
u32 csum;
unsigned int i;
@@ -2875,10 +2876,10 @@ static void ulp_config(struct adapter *adap, const struct tp_params *p)
*
* Write the contents of the protocol SRAM.
*/
-int t3_set_proto_sram(struct adapter *adap, u8 *data)
+int t3_set_proto_sram(struct adapter *adap, const u8 *data)
{
int i;
- __be32 *buf = (__be32 *)data;
+ const __be32 *buf = (const __be32 *)data;
for (i = 0; i < PROTO_SRAM_LINES; i++) {
t3_write_reg(adap, A_TP_EMBED_OP_FIELD5, be32_to_cpu(*buf++));
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 19/28] bt8xx: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (17 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 18/28] cxgb3: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 20/28] ttusb-dec: " David Woodhouse
` (15 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/media/video/bt8xx/bttv-cards.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c
index f20a01c..f93f1ad 100644
--- a/drivers/media/video/bt8xx/bttv-cards.c
+++ b/drivers/media/video/bt8xx/bttv-cards.c
@@ -3767,7 +3767,8 @@ static int terratec_active_radio_upgrade(struct bttv *btv)
#define BTTV_ALT_DCLK 0x100000
#define BTTV_ALT_NCONFIG 0x800000
-static int __devinit pvr_altera_load(struct bttv *btv, u8 *micro, u32 microlen)
+static int __devinit pvr_altera_load(struct bttv *btv, const u8 *micro,
+ u32 microlen)
{
u32 n;
u8 bits;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 20/28] ttusb-dec: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (18 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 19/28] bt8xx: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 21/28] dvb frontends: " David Woodhouse
` (14 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/media/dvb/ttusb-dec/ttusb_dec.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/media/dvb/ttusb-dec/ttusb_dec.c b/drivers/media/dvb/ttusb-dec/ttusb_dec.c
index 42eee04..8af88f1 100644
--- a/drivers/media/dvb/ttusb-dec/ttusb_dec.c
+++ b/drivers/media/dvb/ttusb-dec/ttusb_dec.c
@@ -1275,7 +1275,7 @@ static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
u8 b1[] = { 0x61 };
u8 *b;
char idstring[21];
- u8 *firmware = NULL;
+ const u8 *firmware = NULL;
size_t firmware_size = 0;
u16 firmware_csum = 0;
u16 firmware_csum_ns;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 21/28] dvb frontends: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (19 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 20/28] ttusb-dec: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 22/28] cxusb: " David Woodhouse
` (13 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, Kirk Lapray, Trent Piepho
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/media/dvb/frontends/bcm3510.c | 5 +++--
drivers/media/dvb/frontends/nxt200x.c | 3 ++-
drivers/media/dvb/frontends/or51211.c | 4 ++--
drivers/media/dvb/frontends/sp8870.c | 2 +-
drivers/media/dvb/frontends/sp887x.c | 2 +-
drivers/media/dvb/frontends/tda10048.c | 2 +-
drivers/media/dvb/frontends/tda1004x.c | 2 +-
7 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/media/dvb/frontends/bcm3510.c b/drivers/media/dvb/frontends/bcm3510.c
index d268e65..cf5e576 100644
--- a/drivers/media/dvb/frontends/bcm3510.c
+++ b/drivers/media/dvb/frontends/bcm3510.c
@@ -590,7 +590,8 @@ static void bcm3510_release(struct dvb_frontend* fe)
*/
#define BCM3510_DEFAULT_FIRMWARE "dvb-fe-bcm3510-01.fw"
-static int bcm3510_write_ram(struct bcm3510_state *st, u16 addr, u8 *b, u16 len)
+static int bcm3510_write_ram(struct bcm3510_state *st, u16 addr, const u8 *b,
+ u16 len)
{
int ret = 0,i;
bcm3510_register_value vH, vL,vD;
@@ -614,7 +615,7 @@ static int bcm3510_download_firmware(struct dvb_frontend* fe)
struct bcm3510_state* st = fe->demodulator_priv;
const struct firmware *fw;
u16 addr,len;
- u8 *b;
+ const u8 *b;
int ret,i;
deb_info("requesting firmware\n");
diff --git a/drivers/media/dvb/frontends/nxt200x.c b/drivers/media/dvb/frontends/nxt200x.c
index 23d0228..af29835 100644
--- a/drivers/media/dvb/frontends/nxt200x.c
+++ b/drivers/media/dvb/frontends/nxt200x.c
@@ -93,7 +93,8 @@ static u8 i2c_readbytes (struct nxt200x_state* state, u8 addr, u8* buf, u8 len)
return 0;
}
-static int nxt200x_writebytes (struct nxt200x_state* state, u8 reg, u8 *buf, u8 len)
+static int nxt200x_writebytes (struct nxt200x_state* state, u8 reg,
+ const u8 *buf, u8 len)
{
u8 buf2 [len+1];
int err;
diff --git a/drivers/media/dvb/frontends/or51211.c b/drivers/media/dvb/frontends/or51211.c
index 7eaa476..6afe12a 100644
--- a/drivers/media/dvb/frontends/or51211.c
+++ b/drivers/media/dvb/frontends/or51211.c
@@ -69,7 +69,7 @@ struct or51211_state {
u32 current_frequency;
};
-static int i2c_writebytes (struct or51211_state* state, u8 reg, u8 *buf,
+static int i2c_writebytes (struct or51211_state* state, u8 reg, const u8 *buf,
int len)
{
int err;
@@ -77,7 +77,7 @@ static int i2c_writebytes (struct or51211_state* state, u8 reg, u8 *buf,
msg.addr = reg;
msg.flags = 0;
msg.len = len;
- msg.buf = buf;
+ msg.buf = (u8 *)buf;
if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) {
printk(KERN_WARNING "or51211: i2c_writebytes error "
diff --git a/drivers/media/dvb/frontends/sp8870.c b/drivers/media/dvb/frontends/sp8870.c
index aa78aa1..1c9a9b4 100644
--- a/drivers/media/dvb/frontends/sp8870.c
+++ b/drivers/media/dvb/frontends/sp8870.c
@@ -98,7 +98,7 @@ static int sp8870_readreg (struct sp8870_state* state, u16 reg)
static int sp8870_firmware_upload (struct sp8870_state* state, const struct firmware *fw)
{
struct i2c_msg msg;
- char *fw_buf = fw->data;
+ const char *fw_buf = fw->data;
int fw_pos;
u8 tx_buf[255];
int tx_len;
diff --git a/drivers/media/dvb/frontends/sp887x.c b/drivers/media/dvb/frontends/sp887x.c
index 49f5587..4543609 100644
--- a/drivers/media/dvb/frontends/sp887x.c
+++ b/drivers/media/dvb/frontends/sp887x.c
@@ -140,7 +140,7 @@ static int sp887x_initial_setup (struct dvb_frontend* fe, const struct firmware
u8 buf [BLOCKSIZE+2];
int i;
int fw_size = fw->size;
- unsigned char *mem = fw->data;
+ const unsigned char *mem = fw->data;
dprintk("%s\n", __func__);
diff --git a/drivers/media/dvb/frontends/tda10048.c b/drivers/media/dvb/frontends/tda10048.c
index 090fb7d..0ab8d86 100644
--- a/drivers/media/dvb/frontends/tda10048.c
+++ b/drivers/media/dvb/frontends/tda10048.c
@@ -233,7 +233,7 @@ static u8 tda10048_readreg(struct tda10048_state *state, u8 reg)
}
static int tda10048_writeregbulk(struct tda10048_state *state, u8 reg,
- u8 *data, u16 len)
+ const u8 *data, u16 len)
{
int ret = -EREMOTEIO;
struct i2c_msg msg;
diff --git a/drivers/media/dvb/frontends/tda1004x.c b/drivers/media/dvb/frontends/tda1004x.c
index 4997384..ff6b427 100644
--- a/drivers/media/dvb/frontends/tda1004x.c
+++ b/drivers/media/dvb/frontends/tda1004x.c
@@ -317,7 +317,7 @@ static int tda10046h_set_bandwidth(struct tda1004x_state *state,
}
static int tda1004x_do_upload(struct tda1004x_state *state,
- unsigned char *mem, unsigned int len,
+ const unsigned char *mem, unsigned int len,
u8 dspCodeCounterReg, u8 dspCodeInReg)
{
u8 buf[65];
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 22/28] cxusb: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (20 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 21/28] dvb frontends: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 14:14 ` Michael Krufky
2008-05-25 10:23 ` [PATCHv2 23/28] gp8psk: " David Woodhouse
` (12 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel
Cc: sam, alan, akpm, Patrick Boettcher, Michael Krufky, Chris Pascoe
...which means allocating our own copy when we want to modify it.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/media/dvb/dvb-usb/cxusb.c | 21 ++++++++++++++++++---
1 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
index 720fcd1..94bb482 100644
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -24,6 +24,7 @@
* see Documentation/dvb/README.dvb-usb for more information
*/
#include <media/tuner.h>
+#include <linux/vmalloc.h>
#include "cxusb.h"
@@ -700,12 +701,26 @@ static int bluebird_patch_dvico_firmware_download(struct usb_device *udev,
if (fw->data[idoff] == (USB_VID_DVICO & 0xff) &&
fw->data[idoff + 1] == USB_VID_DVICO >> 8) {
- fw->data[idoff + 2] =
+ struct firmware new_fw;
+ u8 *new_fw_data = vmalloc(fw->size);
+ int ret;
+
+ if (!new_fw_data)
+ return -ENOMEM;
+
+ memcpy(new_fw_data, fw->data, fw->size);
+ new_fw.size = fw->size;
+ new_fw.data = fw->data;
+
+ new_fw_data[idoff + 2] =
le16_to_cpu(udev->descriptor.idProduct) + 1;
- fw->data[idoff + 3] =
+ new_fw_data[idoff + 3] =
le16_to_cpu(udev->descriptor.idProduct) >> 8;
- return usb_cypress_load_firmware(udev, fw, CYPRESS_FX2);
+ ret = usb_cypress_load_firmware(udev, &new_fw,
+ CYPRESS_FX2);
+ vfree(new_fw_data);
+ return ret;
}
}
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* Re: [PATCHv2 22/28] cxusb: treat firmware data as const
2008-05-25 10:23 ` [PATCHv2 22/28] cxusb: " David Woodhouse
@ 2008-05-25 14:14 ` Michael Krufky
2008-05-25 14:27 ` David Woodhouse
2008-05-25 15:02 ` David Woodhouse
0 siblings, 2 replies; 72+ messages in thread
From: Michael Krufky @ 2008-05-25 14:14 UTC (permalink / raw)
To: David Woodhouse
Cc: linux-kernel, sam, alan, akpm, Patrick Boettcher, Chris Pascoe
David,
It's broken... Please see fix, below:
David Woodhouse wrote:
> ...which means allocating our own copy when we want to modify it.
>
> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
> ---
> drivers/media/dvb/dvb-usb/cxusb.c | 21 ++++++++++++++++++---
> 1 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
> index 720fcd1..94bb482 100644
> --- a/drivers/media/dvb/dvb-usb/cxusb.c
> +++ b/drivers/media/dvb/dvb-usb/cxusb.c
> @@ -24,6 +24,7 @@
> * see Documentation/dvb/README.dvb-usb for more information
> */
> #include <media/tuner.h>
> +#include <linux/vmalloc.h>
>
> #include "cxusb.h"
>
> @@ -700,12 +701,26 @@ static int bluebird_patch_dvico_firmware_download(struct usb_device *udev,
>
> if (fw->data[idoff] == (USB_VID_DVICO & 0xff) &&
> fw->data[idoff + 1] == USB_VID_DVICO >> 8) {
> - fw->data[idoff + 2] =
> + struct firmware new_fw;
> + u8 *new_fw_data = vmalloc(fw->size);
> + int ret;
> +
> + if (!new_fw_data)
> + return -ENOMEM;
> +
> + memcpy(new_fw_data, fw->data, fw->size);
> + new_fw.size = fw->size;
> + new_fw.data = fw->data;
> +
> + new_fw_data[idoff + 2] =
> le16_to_cpu(udev->descriptor.idProduct) + 1;
> - fw->data[idoff + 3] =
> + new_fw_data[idoff + 3] =
> le16_to_cpu(udev->descriptor.idProduct) >> 8;
>
> - return usb_cypress_load_firmware(udev, fw, CYPRESS_FX2);
> + ret = usb_cypress_load_firmware(udev, &new_fw,
> + CYPRESS_FX2);
> + vfree(new_fw_data);
> + return ret;
> }
> }
>
>
The unmodified firmware was being uploaded to the device, instead of the patched firmware :-(
After making this additional one-line change, the patch works fine.
Please feel free to fold this into your own patch.
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
---
linux/drivers/media/dvb/dvb-usb/cxusb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -710,7 +710,7 @@
memcpy(new_fw_data, fw->data, fw->size);
new_fw.size = fw->size;
- new_fw.data = fw->data;
+ new_fw.data = new_fw_data;
new_fw_data[idoff + 2] =
le16_to_cpu(udev->descriptor.idProduct) + 1;
^ permalink raw reply [flat|nested] 72+ messages in thread* Re: [PATCHv2 22/28] cxusb: treat firmware data as const
2008-05-25 14:14 ` Michael Krufky
@ 2008-05-25 14:27 ` David Woodhouse
2008-05-25 15:02 ` David Woodhouse
1 sibling, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 14:27 UTC (permalink / raw)
To: Michael Krufky
Cc: linux-kernel, sam, alan, akpm, Patrick Boettcher, Chris Pascoe
On Sun, 2008-05-25 at 10:14 -0400, Michael Krufky wrote:
> The unmodified firmware was being uploaded to the device, instead of
> the patched firmware :-(
Heh. Stupid dwmw2. Thanks.
--
dwmw2
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCHv2 22/28] cxusb: treat firmware data as const
2008-05-25 14:14 ` Michael Krufky
2008-05-25 14:27 ` David Woodhouse
@ 2008-05-25 15:02 ` David Woodhouse
1 sibling, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 15:02 UTC (permalink / raw)
To: Michael Krufky
Cc: linux-kernel, sam, alan, akpm, Patrick Boettcher, Chris Pascoe
On Sun, 2008-05-25 at 10:14 -0400, Michael Krufky wrote:
> It's broken... Please see fix, below:
commit e6983a70abb3e6d7a0d711176c89113c81f2ead6
Author: David Woodhouse <dwmw2@infradead.org>
Date: Sat May 24 00:12:42 2008 +0100
cxusb: treat firmware data as const
...which means allocating our own copy when we want to modify it.
(stupid thinko fixed by mkrufky)
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
index 720fcd1..0286156 100644
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -24,6 +24,7 @@
* see Documentation/dvb/README.dvb-usb for more information
*/
#include <media/tuner.h>
+#include <linux/vmalloc.h>
#include "cxusb.h"
@@ -700,12 +701,26 @@ static int bluebird_patch_dvico_firmware_download(struct usb_device *udev,
if (fw->data[idoff] == (USB_VID_DVICO & 0xff) &&
fw->data[idoff + 1] == USB_VID_DVICO >> 8) {
- fw->data[idoff + 2] =
+ struct firmware new_fw;
+ u8 *new_fw_data = vmalloc(fw->size);
+ int ret;
+
+ if (!new_fw_data)
+ return -ENOMEM;
+
+ memcpy(new_fw_data, fw->data, fw->size);
+ new_fw.size = fw->size;
+ new_fw.data = new_fw_data;
+
+ new_fw_data[idoff + 2] =
le16_to_cpu(udev->descriptor.idProduct) + 1;
- fw->data[idoff + 3] =
+ new_fw_data[idoff + 3] =
le16_to_cpu(udev->descriptor.idProduct) >> 8;
- return usb_cypress_load_firmware(udev, fw, CYPRESS_FX2);
+ ret = usb_cypress_load_firmware(udev, &new_fw,
+ CYPRESS_FX2);
+ vfree(new_fw_data);
+ return ret;
}
}
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread
* [PATCHv2 23/28] gp8psk: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (21 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 22/28] cxusb: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 24/28] tuners: " David Woodhouse
` (11 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/media/dvb/dvb-usb/gp8psk.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/media/dvb/dvb-usb/gp8psk.c b/drivers/media/dvb/dvb-usb/gp8psk.c
index 9a942af..85836da 100644
--- a/drivers/media/dvb/dvb-usb/gp8psk.c
+++ b/drivers/media/dvb/dvb-usb/gp8psk.c
@@ -86,7 +86,8 @@ static int gp8psk_load_bcm4500fw(struct dvb_usb_device *d)
{
int ret;
const struct firmware *fw = NULL;
- u8 *ptr, *buf;
+ const u8 *ptr;
+ u8 *buf;
if ((ret = request_firmware(&fw, bcm4500_firmware,
&d->udev->dev)) != 0) {
err("did not find the bcm4500 firmware file. (%s) "
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 24/28] tuners: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (22 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 23/28] gp8psk: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 25/28] firmware: make fw->data const David Woodhouse
` (10 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/media/common/tuners/tuner-xc2028.c | 2 +-
drivers/media/common/tuners/xc5000.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/common/tuners/tuner-xc2028.c b/drivers/media/common/tuners/tuner-xc2028.c
index 9e9003c..0a6e26a 100644
--- a/drivers/media/common/tuners/tuner-xc2028.c
+++ b/drivers/media/common/tuners/tuner-xc2028.c
@@ -255,7 +255,7 @@ static int load_all_firmwares(struct dvb_frontend *fe)
{
struct xc2028_data *priv = fe->tuner_priv;
const struct firmware *fw = NULL;
- unsigned char *p, *endp;
+ const unsigned char *p, *endp;
int rc = 0;
int n, n_array;
char name[33];
diff --git a/drivers/media/common/tuners/xc5000.c b/drivers/media/common/tuners/xc5000.c
index ceae6db..d21a5a7 100644
--- a/drivers/media/common/tuners/xc5000.c
+++ b/drivers/media/common/tuners/xc5000.c
@@ -277,7 +277,7 @@ static int xc_read_reg(struct xc5000_priv *priv, u16 regAddr, u16 *i2cData)
return result;
}
-static int xc_load_i2c_sequence(struct dvb_frontend *fe, u8 i2c_sequence[])
+static int xc_load_i2c_sequence(struct dvb_frontend *fe, const u8 *i2c_sequence)
{
struct xc5000_priv *priv = fe->tuner_priv;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 25/28] firmware: make fw->data const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (23 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 24/28] tuners: " David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 10:23 ` [PATCHv2 26/28] firmware: allow firmware files to be built into kernel image David Woodhouse
` (9 subsequent siblings)
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
In preparation for supporting firmware files linked into the static
kernel, make fw->data const to ensure that users aren't modifying it (so
that we can pass a pointer to the original in-kernel copy, rather than
having to copy it).
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/base/firmware_class.c | 2 +-
include/linux/firmware.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index 9fd4a85..264b3a2 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -257,7 +257,7 @@ firmware_data_write(struct kobject *kobj, struct bin_attribute *bin_attr,
if (retval)
goto out;
- memcpy(fw->data + offset, buffer, count);
+ memcpy((u8 *)fw->data + offset, buffer, count);
fw->size = max_t(size_t, offset + count, fw->size);
retval = count;
diff --git a/include/linux/firmware.h b/include/linux/firmware.h
index 4d10c73..5e73f3f 100644
--- a/include/linux/firmware.h
+++ b/include/linux/firmware.h
@@ -8,7 +8,7 @@
struct firmware {
size_t size;
- u8 *data;
+ const u8 *data;
};
struct device;
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 26/28] firmware: allow firmware files to be built into kernel image
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (24 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 25/28] firmware: make fw->data const David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-30 5:08 ` Rusty Russell
2008-05-25 10:23 ` [PATCHv2 27/28] firmware: Add CONFIG_BUILTIN_FIRMWARE option David Woodhouse
` (8 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Some drivers have their own hacks to bypass the kernel's firmware loader
and build their firmware into the kernel; this renders those unnecessary.
Other drivers don't use the firmware loader at all, because they always
want the firmware to be available. This allows them to start using the
firmware loader.
A third set of drivers already use the firmware loader, but can't be
used without help from userspace, which sometimes requires an initrd.
This allows them to work in a static kernel.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/base/firmware_class.c | 33 +++++++++++++++++++++++++++++++--
include/asm-generic/vmlinux.lds.h | 7 +++++++
include/linux/firmware.h | 21 +++++++++++++++++++++
3 files changed, 59 insertions(+), 2 deletions(-)
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index 264b3a2..c09f060 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -49,6 +49,14 @@ struct firmware_priv {
struct timer_list timeout;
};
+#ifdef CONFIG_FW_LOADER
+extern struct builtin_fw __start_builtin_fw[];
+extern struct builtin_fw __end_builtin_fw[];
+#else /* Module case. Avoid ifdefs later; it'll all optimise out */
+static struct builtin_fw *__start_builtin_fw = NULL;
+static struct builtin_fw *__end_builtin_fw = NULL;
+#endif
+
static void
fw_load_abort(struct firmware_priv *fw_priv)
{
@@ -391,13 +399,12 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
struct device *f_dev;
struct firmware_priv *fw_priv;
struct firmware *firmware;
+ struct builtin_fw *builtin;
int retval;
if (!firmware_p)
return -EINVAL;
- printk(KERN_INFO "firmware: requesting %s\n", name);
-
*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
if (!firmware) {
printk(KERN_ERR "%s: kmalloc(struct firmware) failed\n",
@@ -406,6 +413,20 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
goto out;
}
+ for (builtin = __start_builtin_fw; builtin != __end_builtin_fw;
+ builtin++) {
+ if (strcmp(name, builtin->name))
+ continue;
+ printk(KERN_INFO "firmware: using built-in firmware %s\n",
+ name);
+ firmware->size = builtin->size;
+ firmware->data = builtin->data;
+ return 0;
+ }
+
+ if (uevent)
+ printk(KERN_INFO "firmware: requesting %s\n", name);
+
retval = fw_setup_device(firmware, &f_dev, name, device, uevent);
if (retval)
goto error_kfree_fw;
@@ -473,8 +494,16 @@ request_firmware(const struct firmware **firmware_p, const char *name,
void
release_firmware(const struct firmware *fw)
{
+ struct builtin_fw *builtin;
+
if (fw) {
+ for (builtin = __start_builtin_fw; builtin != __end_builtin_fw;
+ builtin++) {
+ if (fw->data == builtin->data)
+ goto free_fw;
+ }
vfree(fw->data);
+ free_fw:
kfree(fw);
}
}
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index f054778..8d71a40 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -86,6 +86,13 @@
VMLINUX_SYMBOL(__end_pci_fixups_resume) = .; \
} \
\
+ /* Built-in firmware blobs */ \
+ .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \
+ VMLINUX_SYMBOL(__start_builtin_fw) = .; \
+ *(.builtin_fw) \
+ VMLINUX_SYMBOL(__end_builtin_fw) = .; \
+ } \
+ \
/* RapidIO route ops */ \
.rio_route : AT(ADDR(.rio_route) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(__start_rio_route_ops) = .; \
diff --git a/include/linux/firmware.h b/include/linux/firmware.h
index 5e73f3f..279eaad 100644
--- a/include/linux/firmware.h
+++ b/include/linux/firmware.h
@@ -1,7 +1,10 @@
#ifndef _LINUX_FIRMWARE_H
#define _LINUX_FIRMWARE_H
+
#include <linux/module.h>
#include <linux/types.h>
+#include <linux/compiler.h>
+
#define FIRMWARE_NAME_MAX 30
#define FW_ACTION_NOHOTPLUG 0
#define FW_ACTION_HOTPLUG 1
@@ -13,6 +16,24 @@ struct firmware {
struct device;
+struct builtin_fw {
+ char *name;
+ void *data;
+ unsigned long size;
+};
+
+/* We have to play tricks here much like stringify() to get the
+ __COUNTER__ macro to be expanded as we want it */
+#define __fw_concat1(x,y) x##y
+#define __fw_concat(x,y) __fw_concat1(x,y)
+
+#define DECLARE_BUILTIN_FIRMWARE(name, blob) \
+ DECLARE_BUILTIN_FIRMWARE_SIZE(name, &(blob), sizeof(blob))
+
+#define DECLARE_BUILTIN_FIRMWARE_SIZE(name, blob, size) \
+ static const struct builtin_fw __fw_concat(__builtin_fw,__COUNTER__) \
+ __used __section(.builtin_fw) = { name, blob, size }
+
#if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE)
int request_firmware(const struct firmware **fw, const char *name,
struct device *device);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* Re: [PATCHv2 26/28] firmware: allow firmware files to be built into kernel image
2008-05-25 10:23 ` [PATCHv2 26/28] firmware: allow firmware files to be built into kernel image David Woodhouse
@ 2008-05-30 5:08 ` Rusty Russell
2008-05-31 8:39 ` David Woodhouse
0 siblings, 1 reply; 72+ messages in thread
From: Rusty Russell @ 2008-05-30 5:08 UTC (permalink / raw)
To: David Woodhouse; +Cc: linux-kernel, sam, alan, akpm
On Sunday 25 May 2008 20:23:56 David Woodhouse wrote:
> Some drivers have their own hacks to bypass the kernel's firmware loader
> and build their firmware into the kernel; this renders those unnecessary.
>
> Other drivers don't use the firmware loader at all, because they always
> want the firmware to be available. This allows them to start using the
> firmware loader.
>
> A third set of drivers already use the firmware loader, but can't be
> used without help from userspace, which sometimes requires an initrd.
> This allows them to work in a static kernel.
>
> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
> ---
> drivers/base/firmware_class.c | 33 +++++++++++++++++++++++++++++++--
> include/asm-generic/vmlinux.lds.h | 7 +++++++
> include/linux/firmware.h | 21 +++++++++++++++++++++
> 3 files changed, 59 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
> index 264b3a2..c09f060 100644
> --- a/drivers/base/firmware_class.c
> +++ b/drivers/base/firmware_class.c
> @@ -49,6 +49,14 @@ struct firmware_priv {
> struct timer_list timeout;
> };
>
> +#ifdef CONFIG_FW_LOADER
> +extern struct builtin_fw __start_builtin_fw[];
> +extern struct builtin_fw __end_builtin_fw[];
> +#else /* Module case. Avoid ifdefs later; it'll all optimise out */
> +static struct builtin_fw *__start_builtin_fw = NULL;
> +static struct builtin_fw *__end_builtin_fw = NULL;
> +#endif
> +
> static void
> fw_load_abort(struct firmware_priv *fw_priv)
> {
> @@ -391,13 +399,12 @@ _request_firmware(const struct firmware **firmware_p,
> const char *name, struct device *f_dev;
> struct firmware_priv *fw_priv;
> struct firmware *firmware;
> + struct builtin_fw *builtin;
> int retval;
>
> if (!firmware_p)
> return -EINVAL;
>
> - printk(KERN_INFO "firmware: requesting %s\n", name);
> -
> *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
> if (!firmware) {
> printk(KERN_ERR "%s: kmalloc(struct firmware) failed\n",
> @@ -406,6 +413,20 @@ _request_firmware(const struct firmware **firmware_p,
> const char *name, goto out;
> }
>
> + for (builtin = __start_builtin_fw; builtin != __end_builtin_fw;
> + builtin++) {
> + if (strcmp(name, builtin->name))
> + continue;
> + printk(KERN_INFO "firmware: using built-in firmware %s\n",
> + name);
> + firmware->size = builtin->size;
> + firmware->data = builtin->data;
> + return 0;
> + }
> +
> + if (uevent)
> + printk(KERN_INFO "firmware: requesting %s\n", name);
> +
> retval = fw_setup_device(firmware, &f_dev, name, device, uevent);
> if (retval)
> goto error_kfree_fw;
> @@ -473,8 +494,16 @@ request_firmware(const struct firmware **firmware_p,
> const char *name, void
> release_firmware(const struct firmware *fw)
> {
> + struct builtin_fw *builtin;
> +
> if (fw) {
> + for (builtin = __start_builtin_fw; builtin != __end_builtin_fw;
> + builtin++) {
> + if (fw->data == builtin->data)
> + goto free_fw;
> + }
> vfree(fw->data);
> + free_fw:
> kfree(fw);
> }
> }
> diff --git a/include/asm-generic/vmlinux.lds.h
> b/include/asm-generic/vmlinux.lds.h index f054778..8d71a40 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -86,6 +86,13 @@
> VMLINUX_SYMBOL(__end_pci_fixups_resume) = .; \
> } \
> \
> + /* Built-in firmware blobs */ \
> + .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \
> + VMLINUX_SYMBOL(__start_builtin_fw) = .; \
> + *(.builtin_fw) \
> + VMLINUX_SYMBOL(__end_builtin_fw) = .; \
> + } \
> + \
> /* RapidIO route ops */ \
> .rio_route : AT(ADDR(.rio_route) - LOAD_OFFSET) { \
> VMLINUX_SYMBOL(__start_rio_route_ops) = .; \
> diff --git a/include/linux/firmware.h b/include/linux/firmware.h
> index 5e73f3f..279eaad 100644
> --- a/include/linux/firmware.h
> +++ b/include/linux/firmware.h
> @@ -1,7 +1,10 @@
> #ifndef _LINUX_FIRMWARE_H
> #define _LINUX_FIRMWARE_H
> +
> #include <linux/module.h>
> #include <linux/types.h>
> +#include <linux/compiler.h>
> +
> #define FIRMWARE_NAME_MAX 30
> #define FW_ACTION_NOHOTPLUG 0
> #define FW_ACTION_HOTPLUG 1
> @@ -13,6 +16,24 @@ struct firmware {
>
> struct device;
>
> +struct builtin_fw {
> + char *name;
> + void *data;
> + unsigned long size;
> +};
> +
> +/* We have to play tricks here much like stringify() to get the
> + __COUNTER__ macro to be expanded as we want it */
> +#define __fw_concat1(x,y) x##y
> +#define __fw_concat(x,y) __fw_concat1(x,y)
Hmm, linux/module.h does this too, perhaps some enthusiast can implement
__concat() and use it everywhere.
Cheers,
Rusty.
^ permalink raw reply [flat|nested] 72+ messages in thread* Re: [PATCHv2 26/28] firmware: allow firmware files to be built into kernel image
2008-05-30 5:08 ` Rusty Russell
@ 2008-05-31 8:39 ` David Woodhouse
0 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-31 8:39 UTC (permalink / raw)
To: Rusty Russell; +Cc: linux-kernel, sam, alan, akpm
On Fri, 2008-05-30 at 15:08 +1000, Rusty Russell wrote:
>
> > +/* We have to play tricks here much like stringify() to get the
> > + __COUNTER__ macro to be expanded as we want it */
> > +#define __fw_concat1(x,y) x##y
> > +#define __fw_concat(x,y) __fw_concat1(x,y)
>
> Hmm, linux/module.h does this too, perhaps some enthusiast can implement
> __concat() and use it everywhere.
Took me a while to find that... in moduleparam.h :)
Yeah, it probably makes sense to split it out, and probably add a
'uniquify' macro which properly appends __COUNTER__ to some string; PCI
fixup declarations could do with that too. I'll probably just add them
to stringify.h -- I don't think they each justify separate files of
their own. It's all just CPP magic.
Although I was actually going to drop DECLARE_BUILTIN_FIRMWARE. I'm not
doing that from C code at all any more -- it's all in asm. At this
point, it only really serves as documentation for that one patch in the
series (and yes, it's scary that such a construct really does give
people more of a clue what's going on).
--
dwmw2
^ permalink raw reply [flat|nested] 72+ messages in thread
* [PATCHv2 27/28] firmware: Add CONFIG_BUILTIN_FIRMWARE option
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (25 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 26/28] firmware: allow firmware files to be built into kernel image David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 17:00 ` [PATCHv3 " David Woodhouse
2008-05-25 10:23 ` [PATCHv2 28/28] firmware: convert korg1212 driver to use firmware loader exclusively David Woodhouse
` (7 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
This allows arbitrary firmware files to be included in the static kernel
where the firmware loader can find them without requiring userspace to
be alive.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
Makefile | 2 +-
drivers/base/Kconfig | 12 ++++++++++
firmware/Makefile | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 71 insertions(+), 1 deletions(-)
create mode 100644 firmware/Makefile
diff --git a/Makefile b/Makefile
index 20b3235..ac2ab7e 100644
--- a/Makefile
+++ b/Makefile
@@ -450,7 +450,7 @@ scripts: scripts_basic include/config/auto.conf
# Objects we will link into vmlinux / subdirs we need to visit
init-y := init/
-drivers-y := drivers/ sound/
+drivers-y := drivers/ sound/ firmware/
net-y := net/
libs-y := lib/
core-y := usr/
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index d7da109..b856fe8 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -34,6 +34,18 @@ config FW_LOADER
require userspace firmware loading support, but a module built outside
the kernel tree does.
+config BUILTIN_FIRMWARE
+ string "Firmware blobs to build into the kernel binary"
+ depends on FW_LOADER
+ help
+ This option allows firmware to be built into the kernel, for the
+ cases where the user either cannot or doesn't want to provide it from
+ userspace at runtime (for example, when the firmware in question is
+ required for accessing the boot device, and the user doesn't want to
+ use an initrd). Multiple files should be separated with spaces, and
+ the required files should exist under the firmware/ directory in
+ the source tree.
+
config DEBUG_DRIVER
bool "Driver Core verbose debug messages"
depends on DEBUG_KERNEL
diff --git a/firmware/Makefile b/firmware/Makefile
new file mode 100644
index 0000000..4243c5a
--- /dev/null
+++ b/firmware/Makefile
@@ -0,0 +1,58 @@
+#
+# kbuild file for firmware/
+#
+
+firmware-y :=
+
+firmware_bins := $(subst ",,$(CONFIG_BUILTIN_FIRMWARE))
+firmware_srcs := $(patsubst %,$(obj)/%.S, $(firmware_bins))
+firmware_objs := $(patsubst %,%.o, $(firmware_bins) $(firmware-y))
+firmware_dirs := $(patsubst %,$(objtree)/$(obj)/%,$(dir $(firmware_objs)))
+
+quiet_cmd_mkdir = MKDIR $@
+ cmd_mkdir = mkdir -p $@
+
+ifdef CONFIG_64BIT
+SM_WORD := .quad
+SM_ALIGN := 3
+else
+ASM_WORD := .long
+ASM_ALIGN := 2
+endif
+
+quiet_cmd_fwbin = MK_FW $@
+ cmd_fwbin = FWNAME="$(patsubst firmware/%.S,%,$@)"; \
+ INCFILE="$(patsubst %.S,%,$@)"; \
+ FWSTR="$(subst /,_,$(subst .,_,$(patsubst \
+ firmware/%.S,%,$@)))"; \
+ echo "/* Generated by firmware/Makefile */" > $@;\
+ echo " .section .rodata" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo "_fw_$${FWSTR}_bin:" >>$@;\
+ echo " .incbin \"$$INCFILE\"" >>$@;\
+ echo "_fw_end:" >>$@;\
+ echo " .section .rodata.str,\"aMS\",@progbits,1" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo "_fw_$${FWSTR}_name:" >>$@;\
+ echo " .string \"$$FWNAME\"" >>$@;\
+ echo " .section .builtin_fw,\"a\",@progbits" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo " $(ASM_WORD) _fw_$${FWSTR}_name" >>$@;\
+ echo " $(ASM_WORD) _fw_$${FWSTR}_bin" >>$@;\
+ echo " $(ASM_WORD) _fw_end - _fw_$${FWSTR}_bin" >>$@;
+
+$(firmware_srcs): $(obj)/%.S: $(srctree)/$(obj)/% include/config/64bit.h
+ $(call cmd,fwbin)
+
+$(firmware_dirs):
+ $(call cmd,mkdir)
+
+$(patsubst %,$(obj)/%,$(firmware_objs)): $(firmware_dirs)
+
+obj-y := $(firmware_objs)
+
+targets := $(firmware_objs) $(patsubst $(obj)/%,%, $(firmware_srcs))
+
+# Without this, built-in.o won't be created when it's empty, and the
+# final vmlinux link will fail.
+obj-n := dummy
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv3 27/28] firmware: Add CONFIG_BUILTIN_FIRMWARE option
2008-05-25 10:23 ` [PATCHv2 27/28] firmware: Add CONFIG_BUILTIN_FIRMWARE option David Woodhouse
@ 2008-05-25 17:00 ` David Woodhouse
2008-05-26 8:58 ` David Woodhouse
0 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 17:00 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, johannes
Feedback/patches from Johannes Berg -- sort $(firmware_dirs) to prevent
make from complaining about duplicates, and don't unconditionally depend
on include/config/64bit.h. Also fix O= compilation again by including
$(srctree) in the filename passed to .incbin in the .S files.
I also fixed up the dependencies for the object files built from
binaries -- the .S file doesn't need to depend on the binary, but the .o
does.
Still don't have the behaviour we want from clean/mrproper, but I think
we need Sam's help with that.
commit bb71d4c53b14456ec591eb579923566f9c3302ed
Author: David Woodhouse <dwmw2@infradead.org>
Date: Fri May 23 13:58:12 2008 +0100
firmware: Add CONFIG_BUILTIN_FIRMWARE option
This allows arbitrary firmware files to be included in the static kernel
where the firmware loader can find them without requiring userspace to
be alive.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
diff --git a/Makefile b/Makefile
index 20b3235..ac2ab7e 100644
--- a/Makefile
+++ b/Makefile
@@ -450,7 +450,7 @@ scripts: scripts_basic include/config/auto.conf
# Objects we will link into vmlinux / subdirs we need to visit
init-y := init/
-drivers-y := drivers/ sound/
+drivers-y := drivers/ sound/ firmware/
net-y := net/
libs-y := lib/
core-y := usr/
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index d7da109..b856fe8 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -34,6 +34,18 @@ config FW_LOADER
require userspace firmware loading support, but a module built outside
the kernel tree does.
+config BUILTIN_FIRMWARE
+ string "Firmware blobs to build into the kernel binary"
+ depends on FW_LOADER
+ help
+ This option allows firmware to be built into the kernel, for the
+ cases where the user either cannot or doesn't want to provide it from
+ userspace at runtime (for example, when the firmware in question is
+ required for accessing the boot device, and the user doesn't want to
+ use an initrd). Multiple files should be separated with spaces, and
+ the required files should exist under the firmware/ directory in
+ the source tree.
+
config DEBUG_DRIVER
bool "Driver Core verbose debug messages"
depends on DEBUG_KERNEL
diff --git a/firmware/Makefile b/firmware/Makefile
new file mode 100644
index 0000000..02e0a05
--- /dev/null
+++ b/firmware/Makefile
@@ -0,0 +1,70 @@
+#
+# kbuild file for firmware/
+#
+
+firmware-y :=
+
+firmware_bins := $(subst ",,$(CONFIG_BUILTIN_FIRMWARE))
+firmware_srcs := $(patsubst %,$(obj)/%.S, $(firmware_bins))
+firmware_objs := $(patsubst %,%.o, $(firmware_bins) $(firmware-y))
+firmware_dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%,$(dir $(firmware_objs))))
+
+quiet_cmd_mkdir = MKDIR $@
+ cmd_mkdir = mkdir -p $@
+
+ifdef CONFIG_64BIT
+ASM_WORD := .quad
+ASM_ALIGN := 3
+else
+ASM_WORD := .long
+ASM_ALIGN := 2
+endif
+
+quiet_cmd_fwbin = MK_FW $@
+ cmd_fwbin = FWNAME="$(patsubst firmware/%.S,%,$@)"; \
+ INCFILE="$(srctree)/$(patsubst %.S,%,$@)"; \
+ FWSTR="$(subst /,_,$(subst .,_,$(patsubst \
+ firmware/%.S,%,$@)))"; \
+ echo "/* Generated by firmware/Makefile */" > $@;\
+ echo " .section .rodata" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo "_fw_$${FWSTR}_bin:" >>$@;\
+ echo " .incbin \"$$INCFILE\"" >>$@;\
+ echo "_fw_end:" >>$@;\
+ echo " .section .rodata.str,\"aMS\",@progbits,1" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo "_fw_$${FWSTR}_name:" >>$@;\
+ echo " .string \"$$FWNAME\"" >>$@;\
+ echo " .section .builtin_fw,\"a\",@progbits" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo " $(ASM_WORD) _fw_$${FWSTR}_name" >>$@;\
+ echo " $(ASM_WORD) _fw_$${FWSTR}_bin" >>$@;\
+ echo " $(ASM_WORD) _fw_end - _fw_$${FWSTR}_bin" >>$@;
+
+# One of these files will change, or come into existence, whenever
+# the configuration changes between 32-bit and 64-bit...
+DEPS_64BIT := $(wildcard include/config/64bit.h include/config/32bit.h \
+ include/config/ppc32.h include/config/ppc64.h \
+ include/config/superh32.h include/config/superh64.h \
+ include/config/x86_32.h include/config/x86_64.h)
+
+# ... and the .S files must change when that happens.
+$(firmware_srcs): $(DEPS_64BIT)
+ $(call cmd,fwbin)
+
+# The .o files depend directly on the binary because it's included in
+# the .S file with .incbin -- so the .S file doesn't need to change.
+$(patsubst %.S,%.o,$(firmware_srcs)): %.o: %
+
+$(firmware_dirs):
+ $(call cmd,mkdir)
+
+$(patsubst %,$(obj)/%,$(firmware_objs)): $(firmware_dirs)
+
+obj-y := $(firmware_objs)
+
+targets := $(firmware_objs) $(patsubst $(obj)/%,%, $(firmware_srcs))
+
+# Without this, built-in.o won't be created when it's empty, and the
+# final vmlinux link will fail.
+obj-n := dummy
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* Re: [PATCHv3 27/28] firmware: Add CONFIG_BUILTIN_FIRMWARE option
2008-05-25 17:00 ` [PATCHv3 " David Woodhouse
@ 2008-05-26 8:58 ` David Woodhouse
2008-05-28 11:46 ` [PATCHv4 " David Woodhouse
0 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-26 8:58 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, johannes
On Sun, 2008-05-25 at 18:00 +0100, David Woodhouse wrote:
> Still don't have the behaviour we want from clean/mrproper, but I think
> we need Sam's help with that.
I worked it out -- we don't include .config when we make clean, although
it was trying to remove the .S files corresponding to all the configured
firmwares, there were effectively none of those. Fixed thus:
-targets := $(firmware_objs) $(patsubst $(obj)/%,%, $(firmware_srcs))
+targets := $(patsubst $(obj)/%,%, $(wildcard $(shell find $(obj) -name \*.S)))
--
dwmw2
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCHv4 27/28] firmware: Add CONFIG_BUILTIN_FIRMWARE option
2008-05-26 8:58 ` David Woodhouse
@ 2008-05-28 11:46 ` David Woodhouse
2008-05-29 8:29 ` [PATCH 29/28] firmware: Add 'firmware_install' make target David Woodhouse
0 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-28 11:46 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, johannes
More feedback... Andrew wanted the help text to be a little more...
well, helpful. And Johannes wanted to add a CONFIG_BUILTIN_FIRMWARE_DIR
option, which lets you just point it at /lib/firmware or somewhere else
outside the kernel tree. And we fixed up a bunch of other details, like
the dependencies on directories, and the fact that the .S file doesn't
actually need to change when the binary blob does.
I even made the Makefile fit in 80 characters. It's going to make your
brain hurt either way -- but that's normal for kernel Makefiles.
commit 4311743f8ef92ab462c06a9dd2ff8e0d735b3dae
Author: David Woodhouse <dwmw2@infradead.org>
Date: Fri May 23 13:58:12 2008 +0100
firmware: Add CONFIG_BUILTIN_FIRMWARE option
This allows arbitrary firmware files to be included in the static kernel
where the firmware loader can find them without requiring userspace to
be alive.
(Updated and CONFIG_BUILTIN_FIRMWARE_DIR added with lots of help from
Johannes Berg).
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
diff --git a/Makefile b/Makefile
index 20b3235..ac2ab7e 100644
--- a/Makefile
+++ b/Makefile
@@ -450,7 +450,7 @@ scripts: scripts_basic include/config/auto.conf
# Objects we will link into vmlinux / subdirs we need to visit
init-y := init/
-drivers-y := drivers/ sound/
+drivers-y := drivers/ sound/ firmware/
net-y := net/
libs-y := lib/
core-y := usr/
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index d7da109..f204ae7 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -34,6 +34,39 @@ config FW_LOADER
require userspace firmware loading support, but a module built outside
the kernel tree does.
+config BUILTIN_FIRMWARE
+ string "Firmware blobs to build into the kernel binary"
+ depends on FW_LOADER
+ help
+ This option allows firmware to be built into the kernel, for the
+ cases where the user either cannot or doesn't want to provide it from
+ userspace at runtime (for example, when the firmware in question is
+ required for accessing the boot device, and the user doesn't want to
+ use an initrd).
+
+ This option is a string, and takes the (space-separated) names of the
+ firmware files -- the same names which appear in MODULE_FIRMWARE()
+ and request_firmware() in the source. These files should exist under
+ the directory specified by the BUILTIN_FIRMWARE_DIR option, which is
+ by default the firmware/ subdirectory of the kernel source tree.
+
+ So, for example, you might set CONFIG_BUILTIN_FIRMWARE="usb8388.bin",
+ copy the usb8388.bin file into the firmware/ directory, and build the
+ kernel. Then any request_firmware("usb8388.bin") will be
+ satisfied internally without needing to call out to userspace.
+
+config BUILTIN_FIRMWARE_DIR
+ string "Firmware blobs root directory"
+ depends on BUILTIN_FIRMWARE != ""
+ default "firmware"
+ help
+ This option controls the directory in which the kernel build system
+ looks for the firmware files listed in the BUILTIN_FIRMWARE option.
+ The default is the firmware/ directory in the kernel source tree,
+ but by changing this option you can point it elsewhere, such as
+ the /lib/firmware/ directory or another separate directory
+ containing firmware files.
+
config DEBUG_DRIVER
bool "Driver Core verbose debug messages"
depends on DEBUG_KERNEL
diff --git a/firmware/Makefile b/firmware/Makefile
new file mode 100644
index 0000000..c79bbe7
--- /dev/null
+++ b/firmware/Makefile
@@ -0,0 +1,86 @@
+#
+# kbuild file for firmware/
+#
+
+# Create $(fwdir) from $(CONFIG_BUILTIN_FIRMWARE_DIR) -- if it doesn't have a
+# leading /, it's relative to $(srctree).
+fwdir := $(subst ",,$(CONFIG_BUILTIN_FIRMWARE_DIR))
+fwabs := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir))
+
+fw-external-y := $(subst ",,$(CONFIG_BUILTIN_FIRMWARE))
+
+firmware-y := $(fw-external-y) $(fw-shipped-y)
+firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
+
+quiet_cmd_mkdir = MKDIR $(subst $(srctree)/,,$@)
+ cmd_mkdir = mkdir -p $@
+
+quiet_cmd_ihex = IHEX $@
+ cmd_ihex = objcopy -Iihex -Obinary $< $@
+
+ifdef CONFIG_64BIT
+ASM_WORD := .quad
+ASM_ALIGN := 3
+else
+ASM_WORD := .long
+ASM_ALIGN := 2
+endif
+
+quiet_cmd_fwbin = MK_FW $@
+ cmd_fwbin = FWNAME="$(patsubst firmware/%.S,%,$@)"; \
+ FWSTR="$(subst /,_,$(subst .,_,$(patsubst \
+ firmware/%.S,%,$@)))"; \
+ echo "/* Generated by firmware/Makefile */" > $@;\
+ echo " .section .rodata" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo "_fw_$${FWSTR}_bin:" >>$@;\
+ echo " .incbin \"$(2)\"" >>$@;\
+ echo "_fw_end:" >>$@;\
+ echo " .section .rodata.str,\"aMS\",@progbits,1" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo "_fw_$${FWSTR}_name:" >>$@;\
+ echo " .string \"$$FWNAME\"" >>$@;\
+ echo " .section .builtin_fw,\"a\",@progbits" >>$@;\
+ echo " .align $(ASM_ALIGN)" >>$@;\
+ echo " $(ASM_WORD) _fw_$${FWSTR}_name" >>$@;\
+ echo " $(ASM_WORD) _fw_$${FWSTR}_bin" >>$@;\
+ echo " $(ASM_WORD) _fw_end - _fw_$${FWSTR}_bin" >>$@;
+
+# One of these files will change, or come into existence, whenever
+# the configuration changes between 32-bit and 64-bit. The .S files
+# need to change when that happens.
+wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \
+ include/config/ppc32.h include/config/ppc64.h \
+ include/config/superh32.h include/config/superh64.h \
+ include/config/x86_32.h include/config/x86_64.h)
+
+# For the $$(dir %) trick, where we need % to be expanded first.
+.SECONDEXPANSION:
+
+$(patsubst %,$(obj)/%.S, $(fw-shipped-y)): %: $(wordsize_deps) \
+ | $(objtree)/$$(dir %)
+ $(call cmd,fwbin,$(patsubst %.S,%,$@))
+$(patsubst %,$(obj)/%.S, $(fw-external-y)): %: $(wordsize_deps) \
+ include/config/builtin/firmware/dir.h | $(objtree)/$$(dir %)
+ $(call cmd,fwbin,$(fwabs)/$(patsubst $(obj)/%.S,%,$@))
+
+# The .o files depend on the binaries directly; the .S files don't.
+$(patsubst %,$(obj)/%.o, $(fw-shipped-y)): %.o: %
+$(patsubst %,$(obj)/%.o, $(fw-external-y)): $(obj)/%.o: $(fwdir)/%
+
+$(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %)
+ $(call cmd,ihex)
+
+$(firmware-dirs):
+ $(call cmd,mkdir)
+
+obj-y := $(patsubst %,%.o, $(firmware-y))
+
+# Remove .S files and binaries created from ihex
+# (during 'make clean' .config isn't included so they're all in $(fw-shipped-))
+targets := $(patsubst $(obj)/%,%, $(shell find $(obj) -name \*.S 2>/dev/null))
+targets += $(fw-shipped-)
+
+# Without this, built-in.o won't be created when it's empty, and the
+# final vmlinux link will fail.
+obj-n := dummy
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCH 29/28] firmware: Add 'firmware_install' make target
2008-05-28 11:46 ` [PATCHv4 " David Woodhouse
@ 2008-05-29 8:29 ` David Woodhouse
0 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-29 8:29 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, johannes
This installs all the in-kernel-tree firmware into $(INSTALL_FW_PATH),
which defaults to $(objtree)/usr/lib/firmware and is intended end up
in /lib/firmware for udev to find the files.
This, in conjunction with the builtin-firmware support, makes it simple
for drivers with associated firmware to move over to request_firmware()
and give the user a choice of whether to have it built in to the kernel
image or loaded separately from userspace.
As with kernel header installation for userspace, it intentionally pays
no attention to configuration variables -- it installs _all_ available
firmware blobs, unconditionally.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
Makefile | 9 +++++++++
scripts/Makefile.fwinst | 26 ++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 0 deletions(-)
create mode 100644 scripts/Makefile.fwinst
diff --git a/Makefile b/Makefile
index ac2ab7e..3521afe 100644
--- a/Makefile
+++ b/Makefile
@@ -995,6 +995,15 @@ depend dep:
@echo '*** Warning: make $@ is unnecessary now.'
# ---------------------------------------------------------------------------
+# Firmware install
+INSTALL_FW_PATH=$(objtree)/usr/lib/firmware
+export INSTALL_FW_PATH
+
+PHONY += firmware_install
+firmware_install: FORCE
+ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_install
+
+# ---------------------------------------------------------------------------
# Kernel headers
INSTALL_HDR_PATH=$(objtree)/usr
export INSTALL_HDR_PATH
diff --git a/scripts/Makefile.fwinst b/scripts/Makefile.fwinst
new file mode 100644
index 0000000..bde4073
--- /dev/null
+++ b/scripts/Makefile.fwinst
@@ -0,0 +1,26 @@
+# ==========================================================================
+# Installing firmware
+#
+# We don't include the .config, so all firmware files are in $(fw-shipped-)
+# rather than in $(fw-shipped-y) or $(fw-shipped-n).
+# ==========================================================================
+
+INSTALL := install
+
+include scripts/Kbuild.include
+include $(srctree)/$(obj)/Makefile
+
+installed-fw := $(addprefix $(INSTALL_FW_PATH)/,$(fw-shipped-))
+installed-fw-dirs := $(dir $(installed-fw))
+
+quiet_cmd_install = INSTALL $(subst $(srctree)/,,$@)
+ cmd_install = $(INSTALL) -m0644 $< $@
+
+$(installed-fw-dirs):
+ $(call cmd,mkdir)
+
+$(installed-fw): $(INSTALL_FW_PATH)/%: $(obj)/% | $(INSTALL_FW_PATH)/$$(dir %)/
+ $(call cmd,install)
+
+.PHONY: __fw_install
+__fw_install: $(installed-fw)
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread
* [PATCHv2 28/28] firmware: convert korg1212 driver to use firmware loader exclusively
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (26 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 27/28] firmware: Add CONFIG_BUILTIN_FIRMWARE option David Woodhouse
@ 2008-05-25 10:23 ` David Woodhouse
2008-05-25 13:11 ` Alan Cox
2008-05-29 9:09 ` [PATCHv2 #ERROR!/28] maestro3: treat firmware data as const David Woodhouse
` (6 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-25 10:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
firmware/Makefile | 2 +-
.../korg1212-firmware.h => firmware/korg/k1212.c | 5 ++++-
sound/pci/korg1212/korg1212.c | 18 ------------------
3 files changed, 5 insertions(+), 20 deletions(-)
rename sound/pci/korg1212/korg1212-firmware.h => firmware/korg/k1212.c (99%)
diff --git a/firmware/Makefile b/firmware/Makefile
index 4243c5a..bcae927 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -2,7 +2,7 @@
# kbuild file for firmware/
#
-firmware-y :=
+firmware-$(CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL) += korg/k1212
firmware_bins := $(subst ",,$(CONFIG_BUILTIN_FIRMWARE))
firmware_srcs := $(patsubst %,$(obj)/%.S, $(firmware_bins))
diff --git a/sound/pci/korg1212/korg1212-firmware.h b/firmware/korg/k1212.c
similarity index 99%
rename from sound/pci/korg1212/korg1212-firmware.h
rename to firmware/korg/k1212.c
index f6f5b91..1ed3ebb 100644
--- a/sound/pci/korg1212/korg1212-firmware.h
+++ b/firmware/korg/k1212.c
@@ -1,4 +1,5 @@
-static char dspCode [] = {
+#include <linux/firmware.h>
+static const char dspCode [] = {
0x01,0xff,0x18,0xff,0xf5,0xff,0xcf,0xff,0x00,0xff,0x00,0xff,0xff,0xff,0x00,0xff,
0x00,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0xff,0xff,0x00,0xff,
0x26,0xff,0x18,0xff,0xff,0xff,0x0f,0xff,0x00,0xff,0x00,0xff,0xff,0xff,0x00,0xff,
@@ -985,3 +986,5 @@ static char dspCode [] = {
0x00,0xff,0x40,0xff,0xff,0xff,0xc4,0xff,0x00,0xff,0x0a,0xff,0xff,0xff,0x0f,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff };
+
+DECLARE_BUILTIN_FIRMWARE("korg/k1212.dsp", dspCode);
diff --git a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c
index f4c85b5..4a44c0f 100644
--- a/sound/pci/korg1212/korg1212.c
+++ b/sound/pci/korg1212/korg1212.c
@@ -260,14 +260,6 @@ enum MonitorModeSelector {
#define COMMAND_ACK_DELAY 13 // number of RTC ticks to wait for an acknowledgement
// from the card after sending a command.
-#ifdef CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL
-#include "korg1212-firmware.h"
-static const struct firmware static_dsp_code = {
- .data = (u8 *)dspCode,
- .size = sizeof dspCode
-};
-#endif
-
enum ClockSourceIndex {
K1212_CLKIDX_AdatAt44_1K = 0, // selects source as ADAT at 44.1 kHz
K1212_CLKIDX_AdatAt48K, // selects source as ADAT at 48 kHz
@@ -412,9 +404,7 @@ struct snd_korg1212 {
MODULE_DESCRIPTION("korg1212");
MODULE_LICENSE("GPL");
MODULE_SUPPORTED_DEVICE("{{KORG,korg1212}}");
-#ifndef CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL
MODULE_FIRMWARE("korg/k1212.dsp");
-#endif
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
@@ -2348,9 +2338,6 @@ static int __devinit snd_korg1212_create(struct snd_card *card, struct pci_dev *
korg1212->AdatTimeCodePhy = korg1212->sharedBufferPhy +
offsetof(struct KorgSharedBuffer, AdatTimeCode);
-#ifdef CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL
- dsp_code = &static_dsp_code;
-#else
err = request_firmware(&dsp_code, "korg/k1212.dsp", &pci->dev);
if (err < 0) {
release_firmware(dsp_code);
@@ -2358,15 +2345,12 @@ static int __devinit snd_korg1212_create(struct snd_card *card, struct pci_dev *
snd_korg1212_free(korg1212);
return err;
}
-#endif
if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
dsp_code->size, &korg1212->dma_dsp) < 0) {
snd_printk(KERN_ERR "korg1212: cannot allocate dsp code memory (%zd bytes)\n", dsp_code->size);
snd_korg1212_free(korg1212);
-#ifndef CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL
release_firmware(dsp_code);
-#endif
return -ENOMEM;
}
@@ -2376,9 +2360,7 @@ static int __devinit snd_korg1212_create(struct snd_card *card, struct pci_dev *
memcpy(korg1212->dma_dsp.area, dsp_code->data, dsp_code->size);
-#ifndef CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL
release_firmware(dsp_code);
-#endif
rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_RebootCard, 0, 0, 0, 0);
--
1.5.4.5
^ permalink raw reply related [flat|nested] 72+ messages in thread* Re: [PATCHv2 28/28] firmware: convert korg1212 driver to use firmware loader exclusively
2008-05-25 10:23 ` [PATCHv2 28/28] firmware: convert korg1212 driver to use firmware loader exclusively David Woodhouse
@ 2008-05-25 13:11 ` Alan Cox
2008-05-27 18:33 ` Yinghai Lu
0 siblings, 1 reply; 72+ messages in thread
From: Alan Cox @ 2008-05-25 13:11 UTC (permalink / raw)
To: David Woodhouse; +Cc: linux-kernel, sam, akpm
On Sun, 25 May 2008 11:23:58 +0100
David Woodhouse <dwmw2@infradead.org> wrote:
> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Acked-by: Alan Cox <alan@redhat.com> for the rest of the series too
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCHv2 28/28] firmware: convert korg1212 driver to use firmware loader exclusively
2008-05-25 13:11 ` Alan Cox
@ 2008-05-27 18:33 ` Yinghai Lu
2008-05-27 21:24 ` David Woodhouse
0 siblings, 1 reply; 72+ messages in thread
From: Yinghai Lu @ 2008-05-27 18:33 UTC (permalink / raw)
To: Alan Cox, Andrew Morton
Cc: David Woodhouse, linux-kernel, sam, Ingo Molnar, Thomas Gleixner,
H. Peter Anvin
On Sun, May 25, 2008 at 6:11 AM, Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:
> On Sun, 25 May 2008 11:23:58 +0100
> David Woodhouse <dwmw2@infradead.org> wrote:
>
>> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
>
> Acked-by: Alan Cox <alan@redhat.com> for the rest of the series too
> --
any chance to make it get into 2.6.26?
before this i need to keep two copies klibc with fw (qla24xxx) in
initramfs. one for 32 bit and one for 64 bit.
YH
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCHv2 28/28] firmware: convert korg1212 driver to use firmware loader exclusively
2008-05-27 18:33 ` Yinghai Lu
@ 2008-05-27 21:24 ` David Woodhouse
0 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-27 21:24 UTC (permalink / raw)
To: Yinghai Lu
Cc: Alan Cox, Andrew Morton, linux-kernel, sam, Ingo Molnar,
Thomas Gleixner, H. Peter Anvin
On Tue, 2008-05-27 at 11:33 -0700, Yinghai Lu wrote:
> any chance to make it get into 2.6.26?
>
> before this i need to keep two copies klibc with fw (qla24xxx) in
> initramfs. one for 32 bit and one for 64 bit.
Well, it's supposedly too late, but it's dead simple and shouldn't have
much chance of breaking anything, so I suppose as long as we don't
include the korg1212 patch and the rest of the similar patches which
we're still working on, that's not such an insane request.
As long as the one or two drivers I mentioned get tested, that is.
--
dwmw2
^ permalink raw reply [flat|nested] 72+ messages in thread
* [PATCHv2 #ERROR!/28] maestro3: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (27 preceding siblings ...)
2008-05-25 10:23 ` [PATCHv2 28/28] firmware: convert korg1212 driver to use firmware loader exclusively David Woodhouse
@ 2008-05-29 9:09 ` David Woodhouse
2008-05-29 10:49 ` [PATCHv2 30/28] firmware: convert maestro3 driver to use firmware loader exclusively David Woodhouse
2008-05-29 12:21 ` [PATCH N/28] ymfpci: treat firmware data as const David Woodhouse
` (5 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-29 9:09 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, Zach Brown, Takashi Iwai
The maestro3 driver is byte-swapping its firmware to be host-endian in
advance, when it doesn't seem to be necessary -- we could just use
le16_to_cpu() as we load it.
Doing that means that we need to switch the in-tree firmware to be
little-endian too.
Take the least intrusive way of doing this, which is to switch the
existing snd_m3_convert_from_le() function to convert _to_ little-endian
instead, and use it on the in-tree firmware instead of the loaded
firmware. It's a bit suboptimal but doesn't matter much right now
because we're about to remove the special cases for the in-tree version
anyway.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
sound/pci/maestro3.c | 27 +++++++++++++--------------
1 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index a536c59..cbb08d9 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2240,18 +2240,16 @@ static const struct firmware assp_minisrc = {
.size = sizeof assp_minisrc_image
};
-#else /* CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL */
-
#ifdef __LITTLE_ENDIAN
-static inline void snd_m3_convert_from_le(const struct firmware *fw) { }
+static inline void snd_m3_convert_to_le(const struct firmware *fw) { }
#else
-static void snd_m3_convert_from_le(const struct firmware *fw)
+static void snd_m3_convert_to_le(const struct firmware *fw)
{
int i;
u16 *data = (u16 *)fw->data;
for (i = 0; i < fw->size / 2; ++i)
- le16_to_cpus(&data[i]);
+ cpu_to_le16s(&data[i]);
}
#endif
@@ -2271,7 +2269,7 @@ static const u16 minisrc_lpf[MINISRC_LPF_LEN] = {
static void snd_m3_assp_init(struct snd_m3 *chip)
{
unsigned int i;
- u16 *data;
+ const u16 *data;
/* zero kernel data */
for (i = 0; i < (REV_B_DATA_MEMORY_UNIT_LENGTH * NUM_UNITS_KERNEL_DATA) / 2; i++)
@@ -2289,10 +2287,11 @@ static void snd_m3_assp_init(struct snd_m3 *chip)
KDATA_DMA_XFER0);
/* write kernel into code memory.. */
- data = (u16 *)chip->assp_kernel_image->data;
+ data = (const u16 *)chip->assp_kernel_image->data;
for (i = 0 ; i * 2 < chip->assp_kernel_image->size; i++) {
snd_m3_assp_write(chip, MEMTYPE_INTERNAL_CODE,
- REV_B_CODE_MEMORY_BEGIN + i, data[i]);
+ REV_B_CODE_MEMORY_BEGIN + i,
+ le16_to_cpu(data[i]));
}
/*
@@ -2301,10 +2300,10 @@ static void snd_m3_assp_init(struct snd_m3 *chip)
* drop it there. It seems that the minisrc doesn't
* need vectors, so we won't bother with them..
*/
- data = (u16 *)chip->assp_minisrc_image->data;
+ data = (const u16 *)chip->assp_minisrc_image->data;
for (i = 0; i * 2 < chip->assp_minisrc_image->size; i++) {
snd_m3_assp_write(chip, MEMTYPE_INTERNAL_CODE,
- 0x400 + i, data[i]);
+ 0x400 + i, le16_to_cpu(data[i]));
}
/*
@@ -2743,26 +2742,26 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
chip->assp_kernel_image = &assp_kernel;
+ snd_m3_convert_to_le(chip->assp_kernel_image);
#else
err = request_firmware(&chip->assp_kernel_image,
"ess/maestro3_assp_kernel.fw", &pci->dev);
if (err < 0) {
snd_m3_free(chip);
return err;
- } else
- snd_m3_convert_from_le(chip->assp_kernel_image);
+ }
#endif
#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
chip->assp_minisrc_image = &assp_minisrc;
+ snd_m3_convert_to_le(chip->assp_minisrc_image);
#else
err = request_firmware(&chip->assp_minisrc_image,
"ess/maestro3_assp_minisrc.fw", &pci->dev);
if (err < 0) {
snd_m3_free(chip);
return err;
- } else
- snd_m3_convert_from_le(chip->assp_minisrc_image);
+ }
#endif
if ((err = pci_request_regions(pci, card->driver)) < 0) {
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCHv2 30/28] firmware: convert maestro3 driver to use firmware loader exclusively
2008-05-29 9:09 ` [PATCHv2 #ERROR!/28] maestro3: treat firmware data as const David Woodhouse
@ 2008-05-29 10:49 ` David Woodhouse
0 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-29 10:49 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, Zach Brown, Takashi Iwai
>From d4f7e79e7e1cf8c3bace102c30496bf47684ab82 Mon Sep 17 00:00:00 2001
From: David Woodhouse <dwmw2@infradead.org>
Date: Thu, 29 May 2008 13:32:28 +0300
Subject: [PATCH] firmware: convert maestro3 driver to use firmware loader exclusively
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
firmware/Makefile | 2 +
firmware/ess/maestro3_assp_kernel.fw.ihex | 120 ++++++++++++++++++++
firmware/ess/maestro3_assp_minisrc.fw.ihex | 51 +++++++++
sound/pci/Kconfig | 2 +-
sound/pci/maestro3.c | 169 ----------------------------
5 files changed, 174 insertions(+), 170 deletions(-)
create mode 100644 firmware/ess/maestro3_assp_kernel.fw.ihex
create mode 100644 firmware/ess/maestro3_assp_minisrc.fw.ihex
diff --git a/firmware/Makefile b/firmware/Makefile
index ba845ba..4b4a57b 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -9,6 +9,8 @@ fwabs := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir))
fw-external-y := $(subst ",,$(CONFIG_BUILTIN_FIRMWARE))
fw-shipped-$(CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL) += korg/k1212.dsp
+fw-shipped-$(CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL) += \
+ ess/maestro3_assp_kernel.fw ess/maestro3_assp_minisrc.fw
firmware-y := $(fw-external-y) $(fw-shipped-y)
firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
diff --git a/firmware/ess/maestro3_assp_kernel.fw.ihex b/firmware/ess/maestro3_assp_kernel.fw.ihex
new file mode 100644
index 0000000..7624ecd
--- /dev/null
+++ b/firmware/ess/maestro3_assp_kernel.fw.ihex
@@ -0,0 +1,120 @@
+:10000000807930008079B4038079B4038079FB0073
+:100010008079DD008079B4038079320380798702AA
+:100020008079B4038079B4038079B4038079B40310
+:1000300080791A038079B40380792F028079B40320
+:100040008079B4038079B4038079B4038079B403F0
+:100050008079630080796B008079B4038079B40380
+:1000600080BF7C2C0688048840BE20BC09AE0010EE
+:100070000AAE0100386908EB53005A6908EBD60054
+:100080000900888B806988E3360030BE20BC09698E
+:1000900001B8099041BE41BE286988EB780041BE95
+:1000A00040BE8079380041BE41BE3A90386908E3CD
+:1000B00056003A9041BE40BE00EF3A90396908E3DD
+:1000C0005E003A9000EF0B690C668CEF0A690C66D3
+:1000D0000B62096600EF10690F6604EF88E3750094
+:1000E0000E690F6610620D6600EF0E690D6600EF77
+:1000F00070AE010020BC27AE0100396908EB5D003D
+:10010000266901B826902600888B806988E3CB0099
+:100110002890280D114200E17A00114700E1A0006B
+:10012000807A630011B80A66096204E37A000B0C56
+:1001300005400A1001BA1290120C02408079AF00FB
+:10014000807A6B0002BE0E620D6610BA44E37A003C
+:10015000100C05400E1001BA1290120C0240031050
+:1001600002BA1290120C0040031088E3BA00041087
+:100170008079BC00041001BA1290120C0140050CE9
+:100180000340060C04401110B0BFFF011290120C86
+:10019000064020BC00EF26AE28107069D0BF0100D9
+:1001A000709088E37A0028AE000000EF70AE000384
+:1001B000700C0CB05AAE000000EF807A8A037F69A1
+:1001C00001B87F905600888BA00C08B071AF00B0CA
+:1001D000714E00E2F30056AE57105600A00C08B066
+:1001E00056808079A1031008A0BF591004E3A10331
+:1001F00056808079A103807A8A0301BF43BE59BE2D
+:100200007C90376988E30D0101BA08E30C0171AEF7
+:100210000400710C0050366937900ABF9E108A8B1B
+:1002200080AF1480804C0ABF600500F50ABF20052E
+:1002300000B917BBA090176988E34801170D00E1CA
+:1002400027010CBF78050DBF7C0580792B010CBF01
+:1002500038050DBF3C05006908E335018C8B59BE9C
+:1002600007BBA09020BC807957010C038B8B03B98E
+:100270000988C6BE3E01AC69AB90AD69AB9013086E
+:100280000A6644E3440109030C8320BC80795701CA
+:10029000556988E35701387C0BBF780500F50BBF23
+:1002A000380507B90988C6BE5601AB10AA90746913
+:1002B00088E3630172AE400500F572AE000561AEE1
+:1002C0003B10807AF602786988E382018C8B0CBF40
+:1002D000600500E5407C140820BA12883D73807ADE
+:1002E00080033E73807A80038C8B0CBF6C0500E525
+:1002F000407C14082CBA12883F73807A80034073C4
+:10030000807A8003756988E38E0172AE480500F536
+:1003100072AE080561AE4110807AF602796988E311
+:10032000AD018C8B0CBF600500E5407C140818BA49
+:1003300012884373807A80034473807A80038C8BA5
+:100340000CBF6C0500E5407C140824BA1288457384
+:10035000807A80034673807A8003766988E3B901E6
+:1003600072AE580500F572AE180561AE4710807A7E
+:10037000F6027A6988E3D8018C8B0CBF600500E532
+:10038000407C140808BA12884973807A80034A7343
+:10039000807A80038C8B0CBF6C0500E5407C1408D0
+:1003A00014BA12884B73807A80034C73807A80036E
+:1003B00021BC1CAE90108A8B0ABF600500E5407C12
+:1003C000120804B813888D8B0DBF6C0500E5407CC6
+:1003D000150804B81188807A4A038A8B0ABF600521
+:1003E00000E5407C1F7303B90988C6BEF9018A5431
+:1003F00003BEA098207303B90988C6BE01028A54BF
+:1004000003BEA098201F1F2F269820BC356988E3C3
+:10041000A103336901B83390A0BFEE0208E3A10342
+:10042000339000BF516988E31F02347380BE605768
+:1004300003BE7E9F59BE34907E69510D139020BC3F
+:100440005C6988E3A1035E7380BE605703BE7E9F34
+:1004500059BE5E907E695C0D13908079A103807A0D
+:100460008A0301BF43BE776988E34E0261AE4D1037
+:100470006100888B806988E34E027190710D0B00DA
+:10048000A0AF1080A0AF108010080A6608E34902F0
+:10049000090010080C6688E34E020B8020BC7B69C3
+:1004A00088E3A1030ABF9E108A8B80AF1480804C22
+:1004B00000E166027C6990BF6005729072037C69FE
+:1004C00090BF640573907304807970027C6990BF5B
+:1004D0002005729072037C6990BF240573907304A9
+:1004E0007C6901B87C900ABFFD108A8B80AF1080B8
+:1004F0004F738A5403BE809821BC26738B5403BE6D
+:100500008B618C9803BE806180988079A103807A8A
+:100510008A03280D114700E1BE0212AF064012699E
+:10052000B0BF000C88E3B602A0BF000888E3B202A7
+:100530001269B0BF000CA0BF000488E3A3020969E0
+:100540000B908079A5020BAF054001690590026907
+:100550000690114300E1ED021169C0BF0020119027
+:100560008079ED0209690B908079B8020BAF0540E4
+:1005700005AF034006AF04408079ED0212AF06409C
+:100580001269B0BF000C88E3E702A0BF000888E34F
+:10059000E3021269B0BF000CA0BF000488E3D402DC
+:1005A0000D6910908079D60210AF05400169059061
+:1005B00002690690114300E1ED021169C0BF0020FD
+:1005C00011908079ED020D6910908079E90210AFE9
+:1005D000054005AF034006AF044020BC7069719030
+:1005E000807A7800716970908079A10320BC6103E2
+:1005F0008B8B806988EF7202720304787190710DA1
+:100600008A8B0B0003B90988C6BE0903A869AB90A1
+:10061000A869AA9010080A6644E30F0309001008AD
+:100620000C6688E314030B8020BC616901B86190FB
+:100630008079F702807A8A03355D0100346901B858
+:1006400034900ABF9E108A8B80AF1480804872AEAF
+:10065000500500F572AE100561AE5110807AF602B9
+:100660008079A103807A8A03355D02005E6901B852
+:100670005E900ABF9E108A8B80AF1480804772AE56
+:10068000580500F572AE180561AE5C10807AF6026E
+:100690008079A1031C00888B806988EF1D901D0D57
+:1006A0000F1010668CE358030E6910660F620D661A
+:1006B0000FBA01E37A0310048A8B03B90988C6BE16
+:1006C0006C038C6AAA61AB988C6AAB61AD988C6A3A
+:1006D000AD61A9988C6AA961AA98047C8B8B047C73
+:1006E0008D8B047C898B047C14080E6608E37903E7
+:1006F0000D04108421BC1C6901B81C9080794A0348
+:1007000003B909888A8BC6BE8803AC5403BE8C61CA
+:10071000AA9800EF20BC46BE09086B900A086C90AE
+:100720000B086D901A0862901B0863901E08649075
+:1007300059BE1E88658066816782688369846A8580
+:1007400000EF20BC6B6909886C690A886D690B88A9
+:1007500062691A8863691B8864691E88650066017E
+:0A0760006702680369046A053ABEE7
+:00000001FF
diff --git a/firmware/ess/maestro3_assp_minisrc.fw.ihex b/firmware/ess/maestro3_assp_minisrc.fw.ihex
new file mode 100644
index 0000000..0315570
--- /dev/null
+++ b/firmware/ess/maestro3_assp_minisrc.fw.ihex
@@ -0,0 +1,51 @@
+:1000000080BF1E106E906E00888B806988EF6F90A5
+:100010006F0D006908EB120420BC6E6901B86E9088
+:10002000807903040EB9078843BE01BF47BE41BEB5
+:10003000807A2A0040BE2930CCEF41BE807A280069
+:1000400040BE2830CCEF076908E32A0409692C90E8
+:1000500080792C040D692C9009101A880A1001BAB5
+:100060001B880D101C880E1001BA1D8880BFED0082
+:100070001E880C05240104B92790186908E3B3040D
+:100080002D901369A0BF987504F72DAEFF008D8BDE
+:10009000196908E363041A6908E3560407B9098873
+:1000A000C6BE5304A910AD9080797C0403B90988B9
+:1000B000C6BE60048918226CAD90A910236E226C14
+:1000C000AD9080797C041A1008E36F0403B90988A5
+:1000D000C6BE6C04A910A090AD9080797C0401B9D3
+:1000E0000988C6BE7B048918226CA090AD90A91027
+:1000F000236E226CA090AD902D6908E39C0424012E
+:1001000003B702B91888898B2C028A10047CA0904E
+:100110002B691F88807E5B052A690988898BA099D5
+:100120008A10A0902B691F88807E5B052A69098848
+:10013000898BAF99997B840424010F061B1013202F
+:100140001B90A0BFFF7F44E3AC041B90898B807A97
+:100150001A05276901BA2790807A2305276908E3E1
+:100160009E0480790F052406261013202690A0BF38
+:10017000FF7F04E3C0048D8B807A1A058079B40474
+:100180002690131026301B908D8B807A1A05807A6A
+:100190002305271001BA279008E3B40424010F06B1
+:1001A000898B1A6908E3EA04196988E3E00403B952
+:1001B0000988C6BEDD04A01FAE2FA99880790F055F
+:1001C00001B9188807B90988C6BEE704EE10A990DE
+:1001D00080790F05196908E3FE0403B9098846BE52
+:1001E000C6BEFA04A0171EBEAE1FBFBF00FF13BEDF
+:1001F000DFBF8080A99947BE80790F0501B90988C2
+:10020000C6BE0E05A016A026B7BF00FF1EBEA01ECC
+:10021000AE2EBFBF00FF13BEDFBF8080A9990C8543
+:100220000F86076988E31605070D108559BE1E88DD
+:100230004ABE00EF1E101C901F101D90A0101E90B3
+:10024000A0101F9000EF1E101C3020901B73205434
+:1002500003BE259825101C2025902573145403BE39
+:100260008E8B80982F6988E3390559BE07BB806162
+:100270008098A08B1F101D3021901B73215403BE4A
+:100280002E982E101D202E902E73155403BE80988C
+:100290002F6988E34F0559BE07BB80618098A08B0A
+:1002A000186908EF2573165403BEA0982E731754CF
+:1002B00003BEA09800EFA08BC6BE6B0559BE04BB61
+:1002C00090AA04BE1EBEE099E08BA069D090A06900
+:1002D000D0901F0805B81F88908BA069D090A069A6
+:1002E0009090D08BD88B1FBE00EF00000000000064
+:1002F00000000000000000000000000000000000FE
+:1003000000000000000000000000000000000000ED
+:020310000000EB
+:00000001FF
diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig
index a969d95..83c00ae 100644
--- a/sound/pci/Kconfig
+++ b/sound/pci/Kconfig
@@ -754,7 +754,7 @@ config SND_KORG1212_FIRMWARE_IN_KERNEL
config SND_MAESTRO3
tristate "ESS Allegro/Maestro3"
depends on SND
- select FW_LOADER if !SND_MAESTRO3_FIRMWARE_IN_KERNEL
+ select FW_LOADER
select SND_AC97_CODEC
help
Say Y here to include support for soundcards based on ESS Maestro 3
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index cbb08d9..b258297 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -58,10 +58,8 @@ MODULE_SUPPORTED_DEVICE("{{ESS,Maestro3 PCI},"
"{ESS,Allegro PCI},"
"{ESS,Allegro-1 PCI},"
"{ESS,Canyon3D-2/LE PCI}}");
-#ifndef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
MODULE_FIRMWARE("ess/maestro3_assp_kernel.fw");
MODULE_FIRMWARE("ess/maestro3_assp_minisrc.fw");
-#endif
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
@@ -2101,161 +2099,6 @@ static int __devinit snd_m3_mixer(struct snd_m3 *chip)
}
-#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
-
-/*
- * DSP Code images
- */
-
-static const u16 assp_kernel_image[] = {
- 0x7980, 0x0030, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x00FB, 0x7980, 0x00DD, 0x7980, 0x03B4,
- 0x7980, 0x0332, 0x7980, 0x0287, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4,
- 0x7980, 0x031A, 0x7980, 0x03B4, 0x7980, 0x022F, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4,
- 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x0063, 0x7980, 0x006B, 0x7980, 0x03B4, 0x7980, 0x03B4,
- 0xBF80, 0x2C7C, 0x8806, 0x8804, 0xBE40, 0xBC20, 0xAE09, 0x1000, 0xAE0A, 0x0001, 0x6938, 0xEB08,
- 0x0053, 0x695A, 0xEB08, 0x00D6, 0x0009, 0x8B88, 0x6980, 0xE388, 0x0036, 0xBE30, 0xBC20, 0x6909,
- 0xB801, 0x9009, 0xBE41, 0xBE41, 0x6928, 0xEB88, 0x0078, 0xBE41, 0xBE40, 0x7980, 0x0038, 0xBE41,
- 0xBE41, 0x903A, 0x6938, 0xE308, 0x0056, 0x903A, 0xBE41, 0xBE40, 0xEF00, 0x903A, 0x6939, 0xE308,
- 0x005E, 0x903A, 0xEF00, 0x690B, 0x660C, 0xEF8C, 0x690A, 0x660C, 0x620B, 0x6609, 0xEF00, 0x6910,
- 0x660F, 0xEF04, 0xE388, 0x0075, 0x690E, 0x660F, 0x6210, 0x660D, 0xEF00, 0x690E, 0x660D, 0xEF00,
- 0xAE70, 0x0001, 0xBC20, 0xAE27, 0x0001, 0x6939, 0xEB08, 0x005D, 0x6926, 0xB801, 0x9026, 0x0026,
- 0x8B88, 0x6980, 0xE388, 0x00CB, 0x9028, 0x0D28, 0x4211, 0xE100, 0x007A, 0x4711, 0xE100, 0x00A0,
- 0x7A80, 0x0063, 0xB811, 0x660A, 0x6209, 0xE304, 0x007A, 0x0C0B, 0x4005, 0x100A, 0xBA01, 0x9012,
- 0x0C12, 0x4002, 0x7980, 0x00AF, 0x7A80, 0x006B, 0xBE02, 0x620E, 0x660D, 0xBA10, 0xE344, 0x007A,
- 0x0C10, 0x4005, 0x100E, 0xBA01, 0x9012, 0x0C12, 0x4002, 0x1003, 0xBA02, 0x9012, 0x0C12, 0x4000,
- 0x1003, 0xE388, 0x00BA, 0x1004, 0x7980, 0x00BC, 0x1004, 0xBA01, 0x9012, 0x0C12, 0x4001, 0x0C05,
- 0x4003, 0x0C06, 0x4004, 0x1011, 0xBFB0, 0x01FF, 0x9012, 0x0C12, 0x4006, 0xBC20, 0xEF00, 0xAE26,
- 0x1028, 0x6970, 0xBFD0, 0x0001, 0x9070, 0xE388, 0x007A, 0xAE28, 0x0000, 0xEF00, 0xAE70, 0x0300,
- 0x0C70, 0xB00C, 0xAE5A, 0x0000, 0xEF00, 0x7A80, 0x038A, 0x697F, 0xB801, 0x907F, 0x0056, 0x8B88,
- 0x0CA0, 0xB008, 0xAF71, 0xB000, 0x4E71, 0xE200, 0x00F3, 0xAE56, 0x1057, 0x0056, 0x0CA0, 0xB008,
- 0x8056, 0x7980, 0x03A1, 0x0810, 0xBFA0, 0x1059, 0xE304, 0x03A1, 0x8056, 0x7980, 0x03A1, 0x7A80,
- 0x038A, 0xBF01, 0xBE43, 0xBE59, 0x907C, 0x6937, 0xE388, 0x010D, 0xBA01, 0xE308, 0x010C, 0xAE71,
- 0x0004, 0x0C71, 0x5000, 0x6936, 0x9037, 0xBF0A, 0x109E, 0x8B8A, 0xAF80, 0x8014, 0x4C80, 0xBF0A,
- 0x0560, 0xF500, 0xBF0A, 0x0520, 0xB900, 0xBB17, 0x90A0, 0x6917, 0xE388, 0x0148, 0x0D17, 0xE100,
- 0x0127, 0xBF0C, 0x0578, 0xBF0D, 0x057C, 0x7980, 0x012B, 0xBF0C, 0x0538, 0xBF0D, 0x053C, 0x6900,
- 0xE308, 0x0135, 0x8B8C, 0xBE59, 0xBB07, 0x90A0, 0xBC20, 0x7980, 0x0157, 0x030C, 0x8B8B, 0xB903,
- 0x8809, 0xBEC6, 0x013E, 0x69AC, 0x90AB, 0x69AD, 0x90AB, 0x0813, 0x660A, 0xE344, 0x0144, 0x0309,
- 0x830C, 0xBC20, 0x7980, 0x0157, 0x6955, 0xE388, 0x0157, 0x7C38, 0xBF0B, 0x0578, 0xF500, 0xBF0B,
- 0x0538, 0xB907, 0x8809, 0xBEC6, 0x0156, 0x10AB, 0x90AA, 0x6974, 0xE388, 0x0163, 0xAE72, 0x0540,
- 0xF500, 0xAE72, 0x0500, 0xAE61, 0x103B, 0x7A80, 0x02F6, 0x6978, 0xE388, 0x0182, 0x8B8C, 0xBF0C,
- 0x0560, 0xE500, 0x7C40, 0x0814, 0xBA20, 0x8812, 0x733D, 0x7A80, 0x0380, 0x733E, 0x7A80, 0x0380,
- 0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40, 0x0814, 0xBA2C, 0x8812, 0x733F, 0x7A80, 0x0380, 0x7340,
- 0x7A80, 0x0380, 0x6975, 0xE388, 0x018E, 0xAE72, 0x0548, 0xF500, 0xAE72, 0x0508, 0xAE61, 0x1041,
- 0x7A80, 0x02F6, 0x6979, 0xE388, 0x01AD, 0x8B8C, 0xBF0C, 0x0560, 0xE500, 0x7C40, 0x0814, 0xBA18,
- 0x8812, 0x7343, 0x7A80, 0x0380, 0x7344, 0x7A80, 0x0380, 0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40,
- 0x0814, 0xBA24, 0x8812, 0x7345, 0x7A80, 0x0380, 0x7346, 0x7A80, 0x0380, 0x6976, 0xE388, 0x01B9,
- 0xAE72, 0x0558, 0xF500, 0xAE72, 0x0518, 0xAE61, 0x1047, 0x7A80, 0x02F6, 0x697A, 0xE388, 0x01D8,
- 0x8B8C, 0xBF0C, 0x0560, 0xE500, 0x7C40, 0x0814, 0xBA08, 0x8812, 0x7349, 0x7A80, 0x0380, 0x734A,
- 0x7A80, 0x0380, 0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40, 0x0814, 0xBA14, 0x8812, 0x734B, 0x7A80,
- 0x0380, 0x734C, 0x7A80, 0x0380, 0xBC21, 0xAE1C, 0x1090, 0x8B8A, 0xBF0A, 0x0560, 0xE500, 0x7C40,
- 0x0812, 0xB804, 0x8813, 0x8B8D, 0xBF0D, 0x056C, 0xE500, 0x7C40, 0x0815, 0xB804, 0x8811, 0x7A80,
- 0x034A, 0x8B8A, 0xBF0A, 0x0560, 0xE500, 0x7C40, 0x731F, 0xB903, 0x8809, 0xBEC6, 0x01F9, 0x548A,
- 0xBE03, 0x98A0, 0x7320, 0xB903, 0x8809, 0xBEC6, 0x0201, 0x548A, 0xBE03, 0x98A0, 0x1F20, 0x2F1F,
- 0x9826, 0xBC20, 0x6935, 0xE388, 0x03A1, 0x6933, 0xB801, 0x9033, 0xBFA0, 0x02EE, 0xE308, 0x03A1,
- 0x9033, 0xBF00, 0x6951, 0xE388, 0x021F, 0x7334, 0xBE80, 0x5760, 0xBE03, 0x9F7E, 0xBE59, 0x9034,
- 0x697E, 0x0D51, 0x9013, 0xBC20, 0x695C, 0xE388, 0x03A1, 0x735E, 0xBE80, 0x5760, 0xBE03, 0x9F7E,
- 0xBE59, 0x905E, 0x697E, 0x0D5C, 0x9013, 0x7980, 0x03A1, 0x7A80, 0x038A, 0xBF01, 0xBE43, 0x6977,
- 0xE388, 0x024E, 0xAE61, 0x104D, 0x0061, 0x8B88, 0x6980, 0xE388, 0x024E, 0x9071, 0x0D71, 0x000B,
- 0xAFA0, 0x8010, 0xAFA0, 0x8010, 0x0810, 0x660A, 0xE308, 0x0249, 0x0009, 0x0810, 0x660C, 0xE388,
- 0x024E, 0x800B, 0xBC20, 0x697B, 0xE388, 0x03A1, 0xBF0A, 0x109E, 0x8B8A, 0xAF80, 0x8014, 0x4C80,
- 0xE100, 0x0266, 0x697C, 0xBF90, 0x0560, 0x9072, 0x0372, 0x697C, 0xBF90, 0x0564, 0x9073, 0x0473,
- 0x7980, 0x0270, 0x697C, 0xBF90, 0x0520, 0x9072, 0x0372, 0x697C, 0xBF90, 0x0524, 0x9073, 0x0473,
- 0x697C, 0xB801, 0x907C, 0xBF0A, 0x10FD, 0x8B8A, 0xAF80, 0x8010, 0x734F, 0x548A, 0xBE03, 0x9880,
- 0xBC21, 0x7326, 0x548B, 0xBE03, 0x618B, 0x988C, 0xBE03, 0x6180, 0x9880, 0x7980, 0x03A1, 0x7A80,
- 0x038A, 0x0D28, 0x4711, 0xE100, 0x02BE, 0xAF12, 0x4006, 0x6912, 0xBFB0, 0x0C00, 0xE388, 0x02B6,
- 0xBFA0, 0x0800, 0xE388, 0x02B2, 0x6912, 0xBFB0, 0x0C00, 0xBFA0, 0x0400, 0xE388, 0x02A3, 0x6909,
- 0x900B, 0x7980, 0x02A5, 0xAF0B, 0x4005, 0x6901, 0x9005, 0x6902, 0x9006, 0x4311, 0xE100, 0x02ED,
- 0x6911, 0xBFC0, 0x2000, 0x9011, 0x7980, 0x02ED, 0x6909, 0x900B, 0x7980, 0x02B8, 0xAF0B, 0x4005,
- 0xAF05, 0x4003, 0xAF06, 0x4004, 0x7980, 0x02ED, 0xAF12, 0x4006, 0x6912, 0xBFB0, 0x0C00, 0xE388,
- 0x02E7, 0xBFA0, 0x0800, 0xE388, 0x02E3, 0x6912, 0xBFB0, 0x0C00, 0xBFA0, 0x0400, 0xE388, 0x02D4,
- 0x690D, 0x9010, 0x7980, 0x02D6, 0xAF10, 0x4005, 0x6901, 0x9005, 0x6902, 0x9006, 0x4311, 0xE100,
- 0x02ED, 0x6911, 0xBFC0, 0x2000, 0x9011, 0x7980, 0x02ED, 0x690D, 0x9010, 0x7980, 0x02E9, 0xAF10,
- 0x4005, 0xAF05, 0x4003, 0xAF06, 0x4004, 0xBC20, 0x6970, 0x9071, 0x7A80, 0x0078, 0x6971, 0x9070,
- 0x7980, 0x03A1, 0xBC20, 0x0361, 0x8B8B, 0x6980, 0xEF88, 0x0272, 0x0372, 0x7804, 0x9071, 0x0D71,
- 0x8B8A, 0x000B, 0xB903, 0x8809, 0xBEC6, 0x0309, 0x69A8, 0x90AB, 0x69A8, 0x90AA, 0x0810, 0x660A,
- 0xE344, 0x030F, 0x0009, 0x0810, 0x660C, 0xE388, 0x0314, 0x800B, 0xBC20, 0x6961, 0xB801, 0x9061,
- 0x7980, 0x02F7, 0x7A80, 0x038A, 0x5D35, 0x0001, 0x6934, 0xB801, 0x9034, 0xBF0A, 0x109E, 0x8B8A,
- 0xAF80, 0x8014, 0x4880, 0xAE72, 0x0550, 0xF500, 0xAE72, 0x0510, 0xAE61, 0x1051, 0x7A80, 0x02F6,
- 0x7980, 0x03A1, 0x7A80, 0x038A, 0x5D35, 0x0002, 0x695E, 0xB801, 0x905E, 0xBF0A, 0x109E, 0x8B8A,
- 0xAF80, 0x8014, 0x4780, 0xAE72, 0x0558, 0xF500, 0xAE72, 0x0518, 0xAE61, 0x105C, 0x7A80, 0x02F6,
- 0x7980, 0x03A1, 0x001C, 0x8B88, 0x6980, 0xEF88, 0x901D, 0x0D1D, 0x100F, 0x6610, 0xE38C, 0x0358,
- 0x690E, 0x6610, 0x620F, 0x660D, 0xBA0F, 0xE301, 0x037A, 0x0410, 0x8B8A, 0xB903, 0x8809, 0xBEC6,
- 0x036C, 0x6A8C, 0x61AA, 0x98AB, 0x6A8C, 0x61AB, 0x98AD, 0x6A8C, 0x61AD, 0x98A9, 0x6A8C, 0x61A9,
- 0x98AA, 0x7C04, 0x8B8B, 0x7C04, 0x8B8D, 0x7C04, 0x8B89, 0x7C04, 0x0814, 0x660E, 0xE308, 0x0379,
- 0x040D, 0x8410, 0xBC21, 0x691C, 0xB801, 0x901C, 0x7980, 0x034A, 0xB903, 0x8809, 0x8B8A, 0xBEC6,
- 0x0388, 0x54AC, 0xBE03, 0x618C, 0x98AA, 0xEF00, 0xBC20, 0xBE46, 0x0809, 0x906B, 0x080A, 0x906C,
- 0x080B, 0x906D, 0x081A, 0x9062, 0x081B, 0x9063, 0x081E, 0x9064, 0xBE59, 0x881E, 0x8065, 0x8166,
- 0x8267, 0x8368, 0x8469, 0x856A, 0xEF00, 0xBC20, 0x696B, 0x8809, 0x696C, 0x880A, 0x696D, 0x880B,
- 0x6962, 0x881A, 0x6963, 0x881B, 0x6964, 0x881E, 0x0065, 0x0166, 0x0267, 0x0368, 0x0469, 0x056A,
- 0xBE3A,
-};
-
-/*
- * Mini sample rate converter code image
- * that is to be loaded at 0x400 on the DSP.
- */
-static const u16 assp_minisrc_image[] = {
-
- 0xBF80, 0x101E, 0x906E, 0x006E, 0x8B88, 0x6980, 0xEF88, 0x906F, 0x0D6F, 0x6900, 0xEB08, 0x0412,
- 0xBC20, 0x696E, 0xB801, 0x906E, 0x7980, 0x0403, 0xB90E, 0x8807, 0xBE43, 0xBF01, 0xBE47, 0xBE41,
- 0x7A80, 0x002A, 0xBE40, 0x3029, 0xEFCC, 0xBE41, 0x7A80, 0x0028, 0xBE40, 0x3028, 0xEFCC, 0x6907,
- 0xE308, 0x042A, 0x6909, 0x902C, 0x7980, 0x042C, 0x690D, 0x902C, 0x1009, 0x881A, 0x100A, 0xBA01,
- 0x881B, 0x100D, 0x881C, 0x100E, 0xBA01, 0x881D, 0xBF80, 0x00ED, 0x881E, 0x050C, 0x0124, 0xB904,
- 0x9027, 0x6918, 0xE308, 0x04B3, 0x902D, 0x6913, 0xBFA0, 0x7598, 0xF704, 0xAE2D, 0x00FF, 0x8B8D,
- 0x6919, 0xE308, 0x0463, 0x691A, 0xE308, 0x0456, 0xB907, 0x8809, 0xBEC6, 0x0453, 0x10A9, 0x90AD,
- 0x7980, 0x047C, 0xB903, 0x8809, 0xBEC6, 0x0460, 0x1889, 0x6C22, 0x90AD, 0x10A9, 0x6E23, 0x6C22,
- 0x90AD, 0x7980, 0x047C, 0x101A, 0xE308, 0x046F, 0xB903, 0x8809, 0xBEC6, 0x046C, 0x10A9, 0x90A0,
- 0x90AD, 0x7980, 0x047C, 0xB901, 0x8809, 0xBEC6, 0x047B, 0x1889, 0x6C22, 0x90A0, 0x90AD, 0x10A9,
- 0x6E23, 0x6C22, 0x90A0, 0x90AD, 0x692D, 0xE308, 0x049C, 0x0124, 0xB703, 0xB902, 0x8818, 0x8B89,
- 0x022C, 0x108A, 0x7C04, 0x90A0, 0x692B, 0x881F, 0x7E80, 0x055B, 0x692A, 0x8809, 0x8B89, 0x99A0,
- 0x108A, 0x90A0, 0x692B, 0x881F, 0x7E80, 0x055B, 0x692A, 0x8809, 0x8B89, 0x99AF, 0x7B99, 0x0484,
- 0x0124, 0x060F, 0x101B, 0x2013, 0x901B, 0xBFA0, 0x7FFF, 0xE344, 0x04AC, 0x901B, 0x8B89, 0x7A80,
- 0x051A, 0x6927, 0xBA01, 0x9027, 0x7A80, 0x0523, 0x6927, 0xE308, 0x049E, 0x7980, 0x050F, 0x0624,
- 0x1026, 0x2013, 0x9026, 0xBFA0, 0x7FFF, 0xE304, 0x04C0, 0x8B8D, 0x7A80, 0x051A, 0x7980, 0x04B4,
- 0x9026, 0x1013, 0x3026, 0x901B, 0x8B8D, 0x7A80, 0x051A, 0x7A80, 0x0523, 0x1027, 0xBA01, 0x9027,
- 0xE308, 0x04B4, 0x0124, 0x060F, 0x8B89, 0x691A, 0xE308, 0x04EA, 0x6919, 0xE388, 0x04E0, 0xB903,
- 0x8809, 0xBEC6, 0x04DD, 0x1FA0, 0x2FAE, 0x98A9, 0x7980, 0x050F, 0xB901, 0x8818, 0xB907, 0x8809,
- 0xBEC6, 0x04E7, 0x10EE, 0x90A9, 0x7980, 0x050F, 0x6919, 0xE308, 0x04FE, 0xB903, 0x8809, 0xBE46,
- 0xBEC6, 0x04FA, 0x17A0, 0xBE1E, 0x1FAE, 0xBFBF, 0xFF00, 0xBE13, 0xBFDF, 0x8080, 0x99A9, 0xBE47,
- 0x7980, 0x050F, 0xB901, 0x8809, 0xBEC6, 0x050E, 0x16A0, 0x26A0, 0xBFB7, 0xFF00, 0xBE1E, 0x1EA0,
- 0x2EAE, 0xBFBF, 0xFF00, 0xBE13, 0xBFDF, 0x8080, 0x99A9, 0x850C, 0x860F, 0x6907, 0xE388, 0x0516,
- 0x0D07, 0x8510, 0xBE59, 0x881E, 0xBE4A, 0xEF00, 0x101E, 0x901C, 0x101F, 0x901D, 0x10A0, 0x901E,
- 0x10A0, 0x901F, 0xEF00, 0x101E, 0x301C, 0x9020, 0x731B, 0x5420, 0xBE03, 0x9825, 0x1025, 0x201C,
- 0x9025, 0x7325, 0x5414, 0xBE03, 0x8B8E, 0x9880, 0x692F, 0xE388, 0x0539, 0xBE59, 0xBB07, 0x6180,
- 0x9880, 0x8BA0, 0x101F, 0x301D, 0x9021, 0x731B, 0x5421, 0xBE03, 0x982E, 0x102E, 0x201D, 0x902E,
- 0x732E, 0x5415, 0xBE03, 0x9880, 0x692F, 0xE388, 0x054F, 0xBE59, 0xBB07, 0x6180, 0x9880, 0x8BA0,
- 0x6918, 0xEF08, 0x7325, 0x5416, 0xBE03, 0x98A0, 0x732E, 0x5417, 0xBE03, 0x98A0, 0xEF00, 0x8BA0,
- 0xBEC6, 0x056B, 0xBE59, 0xBB04, 0xAA90, 0xBE04, 0xBE1E, 0x99E0, 0x8BE0, 0x69A0, 0x90D0, 0x69A0,
- 0x90D0, 0x081F, 0xB805, 0x881F, 0x8B90, 0x69A0, 0x90D0, 0x69A0, 0x9090, 0x8BD0, 0x8BD8, 0xBE1F,
- 0xEF00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-};
-
-static const struct firmware assp_kernel = {
- .data = (u8 *)assp_kernel_image,
- .size = sizeof assp_kernel_image
-};
-static const struct firmware assp_minisrc = {
- .data = (u8 *)assp_minisrc_image,
- .size = sizeof assp_minisrc_image
-};
-
-#ifdef __LITTLE_ENDIAN
-static inline void snd_m3_convert_to_le(const struct firmware *fw) { }
-#else
-static void snd_m3_convert_to_le(const struct firmware *fw)
-{
- int i;
- u16 *data = (u16 *)fw->data;
-
- for (i = 0; i < fw->size / 2; ++i)
- cpu_to_le16s(&data[i]);
-}
-#endif
-
-#endif /* CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL */
-
-
/*
* initialize ASSP
*/
@@ -2547,10 +2390,8 @@ static int snd_m3_free(struct snd_m3 *chip)
if (chip->iobase)
pci_release_regions(chip->pci);
-#ifndef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
release_firmware(chip->assp_kernel_image);
release_firmware(chip->assp_minisrc_image);
-#endif
pci_disable_device(chip->pci);
kfree(chip);
@@ -2740,29 +2581,19 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
return -ENOMEM;
}
-#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
- chip->assp_kernel_image = &assp_kernel;
- snd_m3_convert_to_le(chip->assp_kernel_image);
-#else
err = request_firmware(&chip->assp_kernel_image,
"ess/maestro3_assp_kernel.fw", &pci->dev);
if (err < 0) {
snd_m3_free(chip);
return err;
}
-#endif
-#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
- chip->assp_minisrc_image = &assp_minisrc;
- snd_m3_convert_to_le(chip->assp_minisrc_image);
-#else
err = request_firmware(&chip->assp_minisrc_image,
"ess/maestro3_assp_minisrc.fw", &pci->dev);
if (err < 0) {
snd_m3_free(chip);
return err;
}
-#endif
if ((err = pci_request_regions(pci, card->driver)) < 0) {
snd_m3_free(chip);
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread
* [PATCH N/28] ymfpci: treat firmware data as const
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (28 preceding siblings ...)
2008-05-29 9:09 ` [PATCHv2 #ERROR!/28] maestro3: treat firmware data as const David Woodhouse
@ 2008-05-29 12:21 ` David Woodhouse
2008-05-29 12:23 ` [PATCH N/28] firmware: convert ymfpci driver to use firmware loader exclusively David Woodhouse
2008-05-29 13:47 ` [PATCH] smctr: use request_firmware() David Woodhouse
` (4 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-29 12:21 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, Jaroslav Kysela, Takashi Iwai
Standardise both in-kernel and loaded firmware to be stored as
little-endian instead of host-endian.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
As with the maestro3 version, take the least intrusive solution since
it's not going to be there for long.
sound/pci/ymfpci/ymfpci_main.c | 59 +++++++++++++++++++++++-----------------
1 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c
index 29b3056..6298b29 100644
--- a/sound/pci/ymfpci/ymfpci_main.c
+++ b/sound/pci/ymfpci/ymfpci_main.c
@@ -26,6 +26,7 @@
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
+#include <linux/mutex.h>
#include <sound/core.h>
#include <sound/control.h>
@@ -2009,11 +2010,34 @@ static struct firmware snd_ymfpci_controller_1e_microcode = {
.size = YDSXG_CTRLLENGTH,
.data = (u8 *)CntrlInst1E,
};
+
+#ifdef __BIG_ENDIAN
+static int microcode_swapped;
+static DEFINE_MUTEX(microcode_swap);
+
+static void snd_ymfpci_convert_to_le(const struct firmware *fw)
+{
+ int i;
+ u32 *data = (u32 *)fw->data;
+
+ for (i = 0; i < fw->size / 4; ++i)
+ cpu_to_le32s(&data[i]);
+}
#endif
-#ifdef CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL
static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
{
+#ifdef __BIG_ENDIAN
+ mutex_lock(µcode_swap);
+ if (!microcode_swapped) {
+ snd_ymfpci_convert_to_le(&snd_ymfpci_dsp_microcode);
+ snd_ymfpci_convert_to_le(&snd_ymfpci_controller_1e_microcode);
+ snd_ymfpci_convert_to_le(&snd_ymfpci_controller_microcode);
+ microcode_swapped = 1;
+ }
+ mutex_unlock(µcode_swap);
+#endif
+
chip->dsp_microcode = &snd_ymfpci_dsp_microcode;
if (chip->device_id == PCI_DEVICE_ID_YAMAHA_724F ||
chip->device_id == PCI_DEVICE_ID_YAMAHA_740C ||
@@ -2029,19 +2053,6 @@ static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
#else /* use fw_loader */
-#ifdef __LITTLE_ENDIAN
-static inline void snd_ymfpci_convert_from_le(const struct firmware *fw) { }
-#else
-static void snd_ymfpci_convert_from_le(const struct firmware *fw)
-{
- int i;
- u32 *data = (u32 *)fw->data;
-
- for (i = 0; i < fw->size / 4; ++i)
- le32_to_cpus(&data[i]);
-}
-#endif
-
static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
{
int err, is_1e;
@@ -2050,9 +2061,7 @@ static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
err = request_firmware(&chip->dsp_microcode, "yamaha/ds1_dsp.fw",
&chip->pci->dev);
if (err >= 0) {
- if (chip->dsp_microcode->size == YDSXG_DSPLENGTH)
- snd_ymfpci_convert_from_le(chip->dsp_microcode);
- else {
+ if (chip->dsp_microcode->size != YDSXG_DSPLENGTH) {
snd_printk(KERN_ERR "DSP microcode has wrong size\n");
err = -EINVAL;
}
@@ -2067,9 +2076,7 @@ static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
err = request_firmware(&chip->controller_microcode, name,
&chip->pci->dev);
if (err >= 0) {
- if (chip->controller_microcode->size == YDSXG_CTRLLENGTH)
- snd_ymfpci_convert_from_le(chip->controller_microcode);
- else {
+ if (chip->controller_microcode->size != YDSXG_CTRLLENGTH) {
snd_printk(KERN_ERR "controller microcode"
" has wrong size\n");
err = -EINVAL;
@@ -2090,7 +2097,7 @@ static void snd_ymfpci_download_image(struct snd_ymfpci *chip)
{
int i;
u16 ctrl;
- u32 *inst;
+ const __le32 *inst;
snd_ymfpci_writel(chip, YDSXGR_NATIVEDACOUTVOL, 0x00000000);
snd_ymfpci_disable_dsp(chip);
@@ -2105,14 +2112,16 @@ static void snd_ymfpci_download_image(struct snd_ymfpci *chip)
snd_ymfpci_writew(chip, YDSXGR_GLOBALCTRL, ctrl & ~0x0007);
/* setup DSP instruction code */
- inst = (u32 *)chip->dsp_microcode->data;
+ inst = (const __le32 *)chip->dsp_microcode->data;
for (i = 0; i < YDSXG_DSPLENGTH / 4; i++)
- snd_ymfpci_writel(chip, YDSXGR_DSPINSTRAM + (i << 2), inst[i]);
+ snd_ymfpci_writel(chip, YDSXGR_DSPINSTRAM + (i << 2),
+ le32_to_cpu(inst[i]));
/* setup control instruction code */
- inst = (u32 *)chip->controller_microcode->data;
+ inst = (const __le32 *)chip->controller_microcode->data;
for (i = 0; i < YDSXG_CTRLLENGTH / 4; i++)
- snd_ymfpci_writel(chip, YDSXGR_CTRLINSTRAM + (i << 2), inst[i]);
+ snd_ymfpci_writel(chip, YDSXGR_CTRLINSTRAM + (i << 2),
+ le32_to_cpu(inst[i]));
snd_ymfpci_enable_dsp(chip);
}
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCH N/28] firmware: convert ymfpci driver to use firmware loader exclusively
2008-05-29 12:21 ` [PATCH N/28] ymfpci: treat firmware data as const David Woodhouse
@ 2008-05-29 12:23 ` David Woodhouse
0 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-29 12:23 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, Jaroslav Kysela, Takashi Iwai
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
firmware/Makefile | 2 +
firmware/yamaha/ds1_ctrl.fw.ihex | 769 ++++++++++++++++++
firmware/yamaha/ds1_dsp.fw.ihex | 9 +
firmware/yamaha/ds1e_ctrl.fw.ihex | 769 ++++++++++++++++++
sound/pci/ymfpci/ymfpci_image.h | 1565 -------------------------------------
sound/pci/ymfpci/ymfpci_main.c | 63 --
6 files changed, 1549 insertions(+), 1628 deletions(-)
create mode 100644 firmware/yamaha/ds1_ctrl.fw.ihex
create mode 100644 firmware/yamaha/ds1_dsp.fw.ihex
create mode 100644 firmware/yamaha/ds1e_ctrl.fw.ihex
delete mode 100644 sound/pci/ymfpci/ymfpci_image.h
diff --git a/firmware/Makefile b/firmware/Makefile
index 4b4a57b..c70d18c 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -11,6 +11,8 @@ fw-external-y := $(subst ",,$(CONFIG_BUILTIN_FIRMWARE))
fw-shipped-$(CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL) += korg/k1212.dsp
fw-shipped-$(CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL) += \
ess/maestro3_assp_kernel.fw ess/maestro3_assp_minisrc.fw
+fw-shipped-$(CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL) += yamaha/ds1_ctrl.fw \
+ yamaha/ds1_dsp.fw yamaha/ds1e_ctrl.fw
firmware-y := $(fw-external-y) $(fw-shipped-y)
firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
diff --git a/firmware/yamaha/ds1_ctrl.fw.ihex b/firmware/yamaha/ds1_ctrl.fw.ihex
new file mode 100644
index 0000000..aa9b1d7
--- /dev/null
+++ b/firmware/yamaha/ds1_ctrl.fw.ihex
@@ -0,0 +1,769 @@
+:10000000070000000700240007000C0007001C0088
+:1000100007000600020070002000000040000300FE
+:100020000471000086420000400003000D0F000034
+:10003000100800003A042000820200000D020000B7
+:10004000100800003A04200082120000820E2000F6
+:10005000821A00000D2D0300100800003A04100061
+:100060008DD30200100800003A0418000D010000B2
+:1000700015000200FD000000200000006088030061
+:100080006090030060800300408003004080030014
+:1000900040800300408001007D0A00004080030092
+:1000A000408003004080010002042000820800001C
+:1000B0001A0008000409000086590100070000002A
+:1000C000070026000700000007000000068A010064
+:1000D000070000008D0C0300100800003A0418000F
+:1000E000070026007D080000428001000A1600007B
+:1000F00006A20400070000008D2100001008000087
+:100100003A04080006C2210007000000FD070000B5
+:10011000428001000A0008000409000086930200E2
+:1001200095010000040D09000700000020080000F0
+:10013000F50000007D0B000060F00100FD000000F4
+:1001400006220300408001007D0A00004280030077
+:100150004A8013000A001800201800006090050073
+:100160006088050040800100FD0000004280010021
+:100170000A007000150100004411070086230300E7
+:100180000000030020700000064A030040800100C8
+:100190008D340000100800003A04080006EA21002F
+:1001A000070000008DD30200100800003A04180078
+:1001B0000682010007000000070024008D0F0000E8
+:1001C000100800003A16000002240000025C000043
+:1001D000FD28000020000000408001000D00080004
+:1001E0001508000084095100070000004D000000C0
+:1001F0005D0E0000020E00008D410000100800009E
+:100200003A040800068A2C00070000008D00000058
+:1002100024090000020F00008D45000010080000B6
+:100220003A040800068A2C00070000007D38000010
+:10023000428001000A000800151000008409010036
+:10024000868301000700000006AA010007000000E5
+:10025000FD080000428001000A0018000419000097
+:100260008680210007002800101800003A042800AA
+:10027000020C28000D000000100800003A142800AD
+:100280008D80080020080000FD0200004080010071
+:10029000070020000D02000004991800070000006C
+:1002A0002D400000BD000000FD0200004280010062
+:1002B0000A00080004090000865A05000700000033
+:1002C00000010000200A00007D04000040800100C1
+:1002D000428001000A002000153000004421010086
+:1002E000864903000700000004210000864903003E
+:1002F000070000008D0F0000100800003A0C2800D5
+:100300004439020086C906000700000010180000EA
+:100310003A0428000D81080020080000FD020000BA
+:100320004080010007002000102800003A007800FB
+:100330008D680000100800003A040800068A2800B2
+:10034000070000000D40000015100000049918007F
+:1003500004292900043939000700000006020600BC
+:1003600007000000F50400007D00000020000000F0
+:100370008D00000060080100408001007D04000045
+:10038000428003004A8021000A001800441902003C
+:1003900086582100070000007540000004F171003C
+:1003A00007000000420001000A00280004290000A4
+:1003B00086202100070000000D3C000004A9300049
+:1003C000070000007D070000428001000A000800CD
+:1003D0000409000086DA07007D05000020280000DF
+:1003E00060B0030006F207004080010020300000EA
+:1003F00060A8030040800100FD020000428001006F
+:100400000A0008000409000086FA0700070000003F
+:100410007D050000428001000A0428008D0E0000C6
+:10042000100800003A0C28000D0000001008000021
+:100430003A1428000D00090020080000FD02000009
+:100440004080010007002000FD3D0000200000006A
+:10045000408001007D1000008D8D0000100800001C
+:100460003A040800068A280007000000150800006A
+:100470001A00080084090100865109007D1300005C
+:1004800000052000200F2800608F3300608F3B00A4
+:10049000608F4300608F4B00608F5300608F5B0064
+:1004A000608A030040800100BD7F0000C43D380029
+:1004B000070000007D1A0000751300004280010053
+:1004C0004A0009000A001000048D0B000495130077
+:1004D00007000000200800006090010004110000E7
+:1004E0008620210040000100FD170000428001002D
+:1004F0000A0008000409000086222100070000000D
+:100500007D190000428003004A8009000A001000A3
+:100510002409000064160000FD1100004280030061
+:100520004A802B004A8019008D0000004489210078
+:10053000070000004422000086E10A0007000000D6
+:10054000641A0000242A00007D190000020108003E
+:10055000220110002008000060900300408001008C
+:10056000FD3D00008D0000002008000040800100DB
+:10057000751300007D1A0000420001004A80090046
+:100580000A0010001D020000E4890100E492290025
+:1005900044913000070000000D060000150A00001D
+:1005A0001D0C000025100000E4A90000E42B010050
+:1005B00064040000E4B30100E432020064040000BB
+:1005C0006404000064040000640400000D040000E2
+:1005D000C4B108000700000020080000F50B00006F
+:1005E000400003007D190000428003004A8009009A
+:1005F000240A00000A000800640E0800070000003A
+:1006000022011000200800006010030040000100DB
+:10061000AC6400007D02000020000000408001006A
+:100620007D10000042800100FD1100004A803B0067
+:100630004A8009000A0020009500000044111A00B9
+:1006400044A1000086200D000D04000084B90000C4
+:1006500086210D00FD18000042800100FD10000001
+:100660004A8009000A0028009500000024090100C2
+:10067000642A000086110D00070000000429000014
+:1006800086220D0007000000062A0D000200080067
+:100690008D0000007D38000020080000408001002F
+:1006A0007D120000428001000A00100004390000A1
+:1006B00086D10D000D080000B5FF7F0084B9000051
+:1006C00086A10D0025000000067A0E002D00000016
+:1006D000150000002D0800008DC702002008000052
+:1006E00006C20E000D00000035807F0084B90000B6
+:1006F00086710E00250040008D00000044091100A5
+:10070000070000008D0100000495100007000000A4
+:10071000649100002404000024040000240400006C
+:1007200002011000020028008DC60200200800000F
+:1007300006C20E008D0100002D0400008D00000097
+:1007400004951000070000000D02000084911000C5
+:10075000070000000DC70200200800008D00000007
+:10076000FD38000040800100FD3B0000201000002B
+:1007700060A80300150800008431310084212100A5
+:100780000700000060B0030060A00300408001008B
+:10079000FD2200009500000024090100240400004F
+:1007A0002404000064120000020110002008000070
+:1007B0006090030040800100241900008DFB0000C0
+:1007C0007D390000200800004080050042800300C1
+:1007D0004A840900060600000A04080024040000F8
+:1007E000240400007D110000428001000A0008007E
+:1007F000240A000002052800020C28000D800900D0
+:1008000020080000FD0200004080010007002000D9
+:10081000FD220000428001000A000800950000004F
+:10082000C40D2800241901007D1900004280010038
+:10083000FD1100004A8009000A001000B500000008
+:1008400044311100048D0A0007000000440A08002A
+:100850000495120007000000FD2300002010000096
+:100860004080030044121000070000002008000030
+:100870006090030040800100FD0200004280010002
+:100880000A0008000409000086FA100007000000B2
+:10089000FD3B000000010000100A00007A800B0000
+:1008A0004A80130084090900070000009500000039
+:1008B000043D0100868011000A00100002001000B3
+:1008C0008409090007000000428003004A801100EB
+:1008D000040D0900070000000A001000840D090043
+:1008E000070000007D250000200800004080010076
+:1008F0000D010000100800003A1428007D120000CD
+:10090000428001000A0020007D19000042800100A1
+:100910007D1100004A8031000A00100024310000DF
+:100920000D2801007D3900002008000040800500EE
+:10093000428003004A840900060600000A040800F9
+:1009400002013000243100002404000024040000CF
+:1009500024120000020528004C1A00008601130032
+:10096000020070002D000000000003007D38000030
+:10097000428001000A001000062A13002421000012
+:10098000AD000000020010000D010000240900006D
+:10099000246B00008D3601007D3900002008000026
+:1009A00040800500428003004A84090006060000DA
+:1009B0000A040800643200008D000000240A0000D0
+:1009C000201000007D220000408001000D3C01004D
+:1009D000100800003A04080006D2290007000000B1
+:1009E000202800007D200000408001007D110000D3
+:1009F000428003004A8013000A8033007D380000E3
+:100A0000428001000A00080004090000863A16002E
+:100A1000070000008D000000640903008D470100FD
+:100A20007D3900002008000040800500428003005E
+:100A30004A840900060600000A0408000201380082
+:100A4000240400002404000024120000FD02000021
+:100A5000428001000A0008000409000086A2140078
+:100A600007000000020528004C1A00008639160015
+:100A700007000000642103002C630000FD3D00001E
+:100A8000428001000A0008009500000004090900E6
+:100A900007000000200800004C1A000086611500C5
+:100AA0004080010000000300067A150024210000A8
+:100AB0000D01000024090000246B00008D5B010083
+:100AC0007D390000200800004080050042800300BE
+:100AD0004A840900060600000A040800643A00007F
+:100AE0009500000024120000FD0200004280010079
+:100AF0000A0008000409000086DA1500070000005B
+:100B00008D620100100800003A04080006D2290096
+:100B10000700000006D2140007000000207000004B
+:100B20000A0108002A011000FD200000608803006F
+:100B300060900300408001007D220000428001009F
+:100B4000FD3D00000A0008004A843100040900004D
+:100B500086D816008B0018008D000000049918003C
+:100B60002C31000006AA1700070000004C320000DC
+:100B700086331700070000000419000086301700B4
+:100B80000700000095000000449119002C2200008D
+:100B9000243100006C6300003D0E0000751300005E
+:100BA000FD0B0000420001004A8009000A0010000D
+:100BB000EC8A0300EC9303004C22000086A9170086
+:100BC000070000008D000000049918006C2200004E
+:100BD0002C3200000A053000AB1D300083200000DD
+:100BE000FD180000428001000A000800248901006D
+:100BF000020530008310000075180000420001005B
+:100C00000A0010008D000000240901007513000087
+:100C100042053300CB0C3300CB2C3300CB343300F4
+:100C2000CB3C3300CB443300CB4C3300CB543300AC
+:100C30008B5C300083600000F50200004200010080
+:100C40000A00080004090000867A18000700000066
+:100C50002D1E0000FD050000428001000A00080072
+:100C600024890200020528000D060000100800007B
+:100C70003A0C28008D000000100800003A142800EB
+:100C80008D800A0020080000F502000040000100ED
+:100C90000700220075120000420003004A002100F4
+:100CA0008D00000044091A00070000000D980100A3
+:100CB000100800003A04080006222B00070000007C
+:100CC000F5010000420003004A000D000A00100078
+:100CD00044910800070000002008000040000100C7
+:100CE000F525000044310A0007000000200800003C
+:100CF00060280300400003007D21000042800300C3
+:100D00004A800B000A001000200800006010030059
+:100D1000400003008D000000240100002C010000B1
+:100D2000640E0000641A00006C6300000A010800F1
+:100D30002A0110002008000060100300400003009A
+:100D4000FD200000428001000A0008007D22000012
+:100D5000428001000A00100020080000601003001B
+:100D6000400003007D190000428001000A000800D5
+:100D7000FD220000428003000A001000200800004D
+:100D80006010030040000300040D0900070000008C
+:100D90002008000040000300428003004A800B004E
+:100DA0000A0010002008000060100300400003004B
+:100DB000428003004A8013004A801900040D11008C
+:100DC000048D1900070000000A0008002010000030
+:100DD0006018030060080300400003008D0000005D
+:100DE00044090B000700000020080000400001003B
+:100DF000F5050000420003000A000800200800007A
+:100E000040000100F5000000420001000A00080057
+:100E10000409000086601C00751E000042000300EB
+:100E20004A0401000A0C000006721C0007000000C2
+:100E300002040000020C00007D170000F51A0000FB
+:100E4000428001004A1403004A1C03004A240300A4
+:100E50004A2C03004A3403004A3C03004A4403007E
+:100E60000A4C00003D040000F5130000FD1A0000CC
+:100E7000420003004A000B004A801B004A80130016
+:100E80000A0020004491080044A11900E4890300ED
+:100E9000EC990300025500000A5D000042000300C7
+:100EA0004A000B004A801B004A8013000A00200001
+:100EB0004491080044A11900E4890300EC9903005F
+:100EC000026500000A6D0000420003004A000B00AA
+:100ED0004A0019004A802B004A8013004A802100F2
+:100EE0000A0030004491080044A1190044B12A00CE
+:100EF000E4890300EC990300027500000A7D0000FC
+:100F0000E4A90300020700007D10000015040000A2
+:100F1000428001000A000800E4090100020F0000FD
+:100F2000F52A0000FD190000420001004A80090076
+:100F30000A0010003409000074160000F5290000B2
+:100F4000420001000A0010007C91000075200000A2
+:100F5000420001000A0008000409000086D21E00B9
+:100F6000F5260000F5270000420003004A000900B2
+:100F70000A0010003C0A00007C160000751A0000F0
+:100F8000FD0B0000420001004A8051000A004800A9
+:100F90000700160075100000420001000A2C28000E
+:100FA000121D280012252800321F000007001E0015
+:100FB00007000E007519000042000100F52D000029
+:100FC0004A000D000A0010004491000086B21F0084
+:100FD000420001000A3428005D0E00008D00000070
+:100FE000750300002008000040000100F4D2050055
+:100FF00004D154005C7300008653200007000000F9
+:1010000007000C000700080007000A000D0402009A
+:10101000100800003A040800062233000700000010
+:10102000065A200007000000070008007522000093
+:10103000420001000A002000042100008620210057
+:101040002D1E0000F5020000420001000A00080009
+:101050000409000086922000070000001020000014
+:101060003A0430007D050000C38001000A0008003A
+:101070002489020002052800020C28000D810A00C4
+:1010800020080000F50200004000010007002200D7
+:10109000FD040000428001000A007000000003000F
+:1010A0002070000006FA0600408001000D180200C2
+:1010B000100800003A04080006222B000700000078
+:1010C000FD020000428001000A000800040900003F
+:1010D000868A21000700000006F2010007000000D8
+:1010E00075080000FD0900000D010000060A22003D
+:1010F00095020000750B00007D0900000D00000046
+:1011000015050000420001000A0018000419000043
+:1011100086782800F506000020100000400001003D
+:10112000F5040000200800004000010075070000E1
+:10113000420001004A8009000A001000241100004A
+:101140000409000086BA2200150800000201080008
+:101150000412100006DA22007505000004120800CF
+:1011600007000000020110007505000025040000C2
+:10117000241102000201100020080000601003008A
+:101180004000010024190000867828008D0000002E
+:1011900064040000049D00008688270002011800F6
+:1011A00075050000420001000A0428008D010000BE
+:1011B00024090000020D28000D0000002409000091
+:1011C000021528000D00100020080000F5020000A4
+:1011D000400001000700200075110000FD02000022
+:1011E000428001000A0008000409000086C22300B2
+:1011F0000700000000010000200B0800600B130036
+:10120000600B1B00600A0300400001004200050063
+:101210004A003D004A0035004A002D000A00200027
+:10122000F5060000420001000A142800F504000041
+:10123000420001000A00080015030000040D01002F
+:1012400086CA24001540000095000000040D01002E
+:1012500086B82400220010002A00100006E22400B4
+:10126000070000000431330004A92A000700000031
+:10127000242103000205280024110000240400009A
+:1012800024040000243200002C2900006C630000BC
+:1012900086F325000700000064B10200640400002A
+:1012A000640400008D000000640A0000020D2800A4
+:1012B0008D00100020080000F50200004000010031
+:1012C000070022008D00000004B93800070000006C
+:1012D0006C2903000A013000F50200004200010001
+:1012E0000A0008000409000086BA25000700000073
+:1012F0002C3102000A0528008D0000006C09010055
+:101300000A0D28000D01100020080000F502000061
+:101310004000010007002200241100002404000006
+:10132000240400002432000002013000442903009C
+:10133000867A26000700000002003000F504000055
+:10134000420001000A00080015030000040D01001E
+:1013500086C0260024310000640400000201300031
+:10136000F5020000420001000A0008000409000024
+:1013700086CA260007000000243100000205300064
+:10138000243900008305300083080000F5050000C3
+:10139000420001000A0428008D00000024810000A2
+:1013A000020D28008D000000248100000215280095
+:1013B0008D01100020080000F5020000400001002F
+:1013C0000700220025100000750500004200030000
+:1013D0004A0009000A00100004090A000411120062
+:1013E0000700000020100000600805004000050014
+:1013F000FD060000428001004A0009000A001000BA
+:10140000A500000004090A000411120007000000F2
+:10141000200800006090010040000100F50200007B
+:10142000420001000A00080004090000864228006A
+:1014300007000000060A230007000000060600005F
+:1014400007000000F5020000420001000A00080049
+:101450000409000086922800070000000001000037
+:10146000200B0800608B1300608B1B00608B230037
+:10147000608B2B00608B3300608B3B00608B4300E4
+:10148000608B4B00608B5300608B5B00608B630054
+:10149000608B6B00608B7300608B7B00608F030040
+:1014A000608F0B00608F1300608F1B00608F230024
+:1014B000608F2B00608F3300608F3B00608F430094
+:1014C000608F4B00608F5300608F5B00608F630004
+:1014D000608F6B00608F7300608F7B00608A0300F9
+:1014E00006060000408001008D000000640A000034
+:1014F000020D2800240A00007D0200004280010045
+:101500000A00100024120000FD03000042800100C8
+:101510000A0008000409000086822A000700000073
+:101520008D010000240A000064040000640400002F
+:101530000201080024090000240400002404000023
+:10154000020110000D0002004491000086D92A001B
+:1015500007000000FD010000428001000A000800B1
+:10156000440A000086BB2A00428001000D000A00E8
+:1015700020080000FD02000040800100070020005C
+:101580007D020000201000000606000040800100DF
+:10159000F5020000420001000A00080004090000F2
+:1015A000862A2B00070000007D0300004280010016
+:1015B0000A00080004090000865A2B0007000000FA
+:1015C000750000007D2E0000420001004A800B00E3
+:1015D0002000000004090000860600004000010011
+:1015E0004A8431008B043000830800008D00000025
+:1015F000100800003A1428008D00000010080000B8
+:101600003A0C280075060000420001000A0008009C
+:101610001538000024090100020528000D000B0008
+:1016200020080000F502000040000100060600004E
+:1016300007002200640400006404000006060000A5
+:1016400007000000340100008D7F00003C0900000D
+:10165000121D280012252800321F000007000E006E
+:101660000D0100007D030000200800004080010003
+:10167000F4D2050007000000070008007D03000009
+:10168000428001000A0008000409000086022D00C3
+:101690000700000006060000070000000700000029
+:1016A0001200000007001000070032000700600071
+:1016B000800010001A0048000449000086612D00D7
+:1016C00007000000101200003A0058004501000019
+:1016D000045D5C0007000000800000001A00480064
+:1016E0000449000086B12D00070000001012000020
+:1016F0003A0050000459000086082E004500000002
+:10170000C5000000F5FF7F007DFF7F0024D50700A6
+:101710002442000002015000020520008200000067
+:101720001A0040000441000086392E000700000026
+:10173000653800001A004000204000004D100000F5
+:1017400084C10400861B3000400000000700040034
+:10175000650100004501000020400000400000003D
+:1017600065070000800008001A00400004410000E6
+:1017700086C92E0007000000101200003A00400049
+:101780000441000086222F004D000000CD00000023
+:10179000104800003A042000820800001A004000AF
+:1017A0000441000086312F0007000000204800009F
+:1017B000045900008608300040000000E5070000E2
+:1017C00080042000A0162800E0163200E0163A003F
+:1017D000E0164200601202004000000032000000EB
+:1017E000750040007D00000074D507001205200040
+:1017F000820000001A0040000441000086E12F0032
+:1018000007000000067203000700640007000600DE
+:10181000E50000002000000040000000650A000014
+:1018200020000000400002004000020040000000D4
+:1018300065010000420000000A0070000471000011
+:1018400086A2300007000000068201000700640045
+:101850000000050020700000400000000672030038
+:1018600007006400070000006D300000608802007F
+:10187000609002000A0008006088020040800000BA
+:10188000120010000D10000084910000864131000C
+:101890000D0E000084910000865132000700000008
+:1018A00007003000201000006D3B00004080000069
+:1018B000800000001A000800040900008661310061
+:1018C0000700000020120000ED0D00004080000025
+:1018D000428000000A0010000D00400044951000F6
+:1018E0000700000020100000ED0D00004080000007
+:1018F000428000000A042000820000001A00080054
+:101900000409000086F13100070000006D3B000073
+:10191000428000000A000800150E00008409010042
+:10192000869B3200070060001A000800150C0000BA
+:1019300084090100868332002000000007001A009D
+:10194000ED02000040800000070062006D300000E2
+:10195000428002004A800A00200800004A800A00F3
+:10196000060600004A80100007000000122528002B
+:10197000321F0000F4D2050004D154005C73000053
+:10198000860700000700000007000C0007000A009F
+:1019900007001C00653400004000020020480000E1
+:1019A000605002000A004000604002004000000059
+:1019B000444945000700000020400000E53A0000CF
+:1019C00040000000E5280000420000000A00480036
+:1019D0000449000086683800652C000042000000C1
+:1019E0000A004000D5000000044145000700000047
+:1019F000550600000445050086F23400D5010000BC
+:101A00000445050086F03400652B0000420000000C
+:101A1000E53A00004A0050000A004000D4C34500E7
+:101A2000070000000445450007000000CD0000004D
+:101A30004449440007000000044545000700000039
+:101A40004D010000444955000700000044510400C6
+:101A500086E93400652C0000420000000A004800BE
+:101A600004D14C000700000044C1040086F3340098
+:101A70000700000007001600E52C000042000400EB
+:101A80000A004000204000004000000065290000DE
+:101A9000420000000A00400004410000866035005A
+:101AA000070000000224000006A23600025C0000CD
+:101AB000E5250000420000000A00400074420000DA
+:101AC000E52A0000420000000A00400074420000C5
+:101AD00012015000E5290000420000000A00400009
+:101AE000344200000441450007000000204000008F
+:101AF00040000000E53E0000200000004000000023
+:101B0000E52D0000520140000A005000445104003D
+:101B1000864A3600C5000000E53E00002040000077
+:101B200040000000E52B0000420000000A004000D9
+:101B30005442400007000000E52A00002040000059
+:101B400040000000320150003401040074560000CF
+:101B5000E5290000420002000A00420042000000A5
+:101B60000A0050007C410500E5280000420000000A
+:101B70000A004800C500000044C14C008610370030
+:101B8000E5260000E5270000420002004A00400070
+:101B90000A0050003C4200007C560000E52800008E
+:101BA0002048000040000000121D280012252800D7
+:101BB000721F000065290000420000000A0040007A
+:101BC0000441000086AA370007000E000700160037
+:101BD00007001E00E53E0000420000000A00400031
+:101BE0000441000086E83700652D00004200000037
+:101BF0000A34280065340000420002004A00420016
+:101C0000204000004A004A004A005000F4D205007B
+:101C100004D154005C7300008651380007000000B6
+:101C2000060600000700080007000C000700080077
+:101C300007000A00E5010000450002002040000006
+:101C4000600000006503000040000000652E0000F9
+:101C5000201A0000601A0A004000000065340000ED
+:101C6000420002004A004200204000004A004A00B0
+:101C7000060600004A0050000000000000000000BE
+:101C80000000000000000000000000000000000054
+:101C90000000000000000000000000000000000044
+:101CA0000000000000000000000000000000000034
+:101CB0000000000000000000000000000000000024
+:101CC0000000000000000000000000000000000014
+:101CD0000000000000000000000000000000000004
+:101CE00000000000000000000000000000000000F4
+:101CF00000000000000000000000000000000000E4
+:101D000000000000000000000000000000000000D3
+:101D100000000000000000000000000000000000C3
+:101D200000000000000000000000000000000000B3
+:101D300000000000000000000000000000000000A3
+:101D40000000000000000000000000000000000093
+:101D50000000000000000000000000000000000083
+:101D60000000000000000000000000000000000073
+:101D70000000000000000000000000000000000063
+:101D80000000000000000000000000000000000053
+:101D90000000000000000000000000000000000043
+:101DA0000000000000000000000000000000000033
+:101DB0000000000000000000000000000000000023
+:101DC0000000000000000000000000000000000013
+:101DD0000000000000000000000000000000000003
+:101DE00000000000000000000000000000000000F3
+:101DF00000000000000000000000000000000000E3
+:101E000000000000000000000000000000000000D2
+:101E100000000000000000000000000000000000C2
+:101E200000000000000000000000000000000000B2
+:101E300000000000000000000000000000000000A2
+:101E40000000000000000000000000000000000092
+:101E50000000000000000000000000000000000082
+:101E60000000000000000000000000000000000072
+:101E70000000000000000000000000000000000062
+:101E80000000000000000000000000000000000052
+:101E90000000000000000000000000000000000042
+:101EA0000000000000000000000000000000000032
+:101EB0000000000000000000000000000000000022
+:101EC0000000000000000000000000000000000012
+:101ED0000000000000000000000000000000000002
+:101EE00000000000000000000000000000000000F2
+:101EF00000000000000000000000000000000000E2
+:101F000000000000000000000000000000000000D1
+:101F100000000000000000000000000000000000C1
+:101F200000000000000000000000000000000000B1
+:101F300000000000000000000000000000000000A1
+:101F40000000000000000000000000000000000091
+:101F50000000000000000000000000000000000081
+:101F60000000000000000000000000000000000071
+:101F70000000000000000000000000000000000061
+:101F80000000000000000000000000000000000051
+:101F90000000000000000000000000000000000041
+:101FA0000000000000000000000000000000000031
+:101FB0000000000000000000000000000000000021
+:101FC0000000000000000000000000000000000011
+:101FD0000000000000000000000000000000000001
+:101FE00000000000000000000000000000000000F1
+:101FF00000000000000000000000000000000000E1
+:1020000000000000000000000000000000000000D0
+:1020100000000000000000000000000000000000C0
+:1020200000000000000000000000000000000000B0
+:1020300000000000000000000000000000000000A0
+:102040000000000000000000000000000000000090
+:102050000000000000000000000000000000000080
+:102060000000000000000000000000000000000070
+:102070000000000000000000000000000000000060
+:102080000000000000000000000000000000000050
+:102090000000000000000000000000000000000040
+:1020A0000000000000000000000000000000000030
+:1020B0000000000000000000000000000000000020
+:1020C0000000000000000000000000000000000010
+:1020D0000000000000000000000000000000000000
+:1020E00000000000000000000000000000000000F0
+:1020F00000000000000000000000000000000000E0
+:1021000000000000000000000000000000000000CF
+:1021100000000000000000000000000000000000BF
+:1021200000000000000000000000000000000000AF
+:10213000000000000000000000000000000000009F
+:10214000000000000000000000000000000000008F
+:10215000000000000000000000000000000000007F
+:10216000000000000000000000000000000000006F
+:10217000000000000000000000000000000000005F
+:10218000000000000000000000000000000000004F
+:10219000000000000000000000000000000000003F
+:1021A000000000000000000000000000000000002F
+:1021B000000000000000000000000000000000001F
+:1021C000000000000000000000000000000000000F
+:1021D00000000000000000000000000000000000FF
+:1021E00000000000000000000000000000000000EF
+:1021F00000000000000000000000000000000000DF
+:1022000000000000000000000000000000000000CE
+:1022100000000000000000000000000000000000BE
+:1022200000000000000000000000000000000000AE
+:10223000000000000000000000000000000000009E
+:10224000000000000000000000000000000000008E
+:10225000000000000000000000000000000000007E
+:10226000000000000000000000000000000000006E
+:10227000000000000000000000000000000000005E
+:10228000000000000000000000000000000000004E
+:10229000000000000000000000000000000000003E
+:1022A000000000000000000000000000000000002E
+:1022B000000000000000000000000000000000001E
+:1022C000000000000000000000000000000000000E
+:1022D00000000000000000000000000000000000FE
+:1022E00000000000000000000000000000000000EE
+:1022F00000000000000000000000000000000000DE
+:1023000000000000000000000000000000000000CD
+:1023100000000000000000000000000000000000BD
+:1023200000000000000000000000000000000000AD
+:10233000000000000000000000000000000000009D
+:10234000000000000000000000000000000000008D
+:10235000000000000000000000000000000000007D
+:10236000000000000000000000000000000000006D
+:10237000000000000000000000000000000000005D
+:10238000000000000000000000000000000000004D
+:10239000000000000000000000000000000000003D
+:1023A000000000000000000000000000000000002D
+:1023B000000000000000000000000000000000001D
+:1023C000000000000000000000000000000000000D
+:1023D00000000000000000000000000000000000FD
+:1023E00000000000000000000000000000000000ED
+:1023F00000000000000000000000000000000000DD
+:1024000000000000000000000000000000000000CC
+:1024100000000000000000000000000000000000BC
+:1024200000000000000000000000000000000000AC
+:10243000000000000000000000000000000000009C
+:10244000000000000000000000000000000000008C
+:10245000000000000000000000000000000000007C
+:10246000000000000000000000000000000000006C
+:10247000000000000000000000000000000000005C
+:10248000000000000000000000000000000000004C
+:10249000000000000000000000000000000000003C
+:1024A000000000000000000000000000000000002C
+:1024B000000000000000000000000000000000001C
+:1024C000000000000000000000000000000000000C
+:1024D00000000000000000000000000000000000FC
+:1024E00000000000000000000000000000000000EC
+:1024F00000000000000000000000000000000000DC
+:1025000000000000000000000000000000000000CB
+:1025100000000000000000000000000000000000BB
+:1025200000000000000000000000000000000000AB
+:10253000000000000000000000000000000000009B
+:10254000000000000000000000000000000000008B
+:10255000000000000000000000000000000000007B
+:10256000000000000000000000000000000000006B
+:10257000000000000000000000000000000000005B
+:10258000000000000000000000000000000000004B
+:10259000000000000000000000000000000000003B
+:1025A000000000000000000000000000000000002B
+:1025B000000000000000000000000000000000001B
+:1025C000000000000000000000000000000000000B
+:1025D00000000000000000000000000000000000FB
+:1025E00000000000000000000000000000000000EB
+:1025F00000000000000000000000000000000000DB
+:1026000000000000000000000000000000000000CA
+:1026100000000000000000000000000000000000BA
+:1026200000000000000000000000000000000000AA
+:10263000000000000000000000000000000000009A
+:10264000000000000000000000000000000000008A
+:10265000000000000000000000000000000000007A
+:10266000000000000000000000000000000000006A
+:10267000000000000000000000000000000000005A
+:10268000000000000000000000000000000000004A
+:10269000000000000000000000000000000000003A
+:1026A000000000000000000000000000000000002A
+:1026B000000000000000000000000000000000001A
+:1026C000000000000000000000000000000000000A
+:1026D00000000000000000000000000000000000FA
+:1026E00000000000000000000000000000000000EA
+:1026F00000000000000000000000000000000000DA
+:1027000000000000000000000000000000000000C9
+:1027100000000000000000000000000000000000B9
+:1027200000000000000000000000000000000000A9
+:102730000000000000000000000000000000000099
+:102740000000000000000000000000000000000089
+:102750000000000000000000000000000000000079
+:102760000000000000000000000000000000000069
+:102770000000000000000000000000000000000059
+:102780000000000000000000000000000000000049
+:102790000000000000000000000000000000000039
+:1027A0000000000000000000000000000000000029
+:1027B0000000000000000000000000000000000019
+:1027C0000000000000000000000000000000000009
+:1027D00000000000000000000000000000000000F9
+:1027E00000000000000000000000000000000000E9
+:1027F00000000000000000000000000000000000D9
+:1028000000000000000000000000000000000000C8
+:1028100000000000000000000000000000000000B8
+:1028200000000000000000000000000000000000A8
+:102830000000000000000000000000000000000098
+:102840000000000000000000000000000000000088
+:102850000000000000000000000000000000000078
+:102860000000000000000000000000000000000068
+:102870000000000000000000000000000000000058
+:102880000000000000000000000000000000000048
+:102890000000000000000000000000000000000038
+:1028A0000000000000000000000000000000000028
+:1028B0000000000000000000000000000000000018
+:1028C0000000000000000000000000000000000008
+:1028D00000000000000000000000000000000000F8
+:1028E00000000000000000000000000000000000E8
+:1028F00000000000000000000000000000000000D8
+:1029000000000000000000000000000000000000C7
+:1029100000000000000000000000000000000000B7
+:1029200000000000000000000000000000000000A7
+:102930000000000000000000000000000000000097
+:102940000000000000000000000000000000000087
+:102950000000000000000000000000000000000077
+:102960000000000000000000000000000000000067
+:102970000000000000000000000000000000000057
+:102980000000000000000000000000000000000047
+:102990000000000000000000000000000000000037
+:1029A0000000000000000000000000000000000027
+:1029B0000000000000000000000000000000000017
+:1029C0000000000000000000000000000000000007
+:1029D00000000000000000000000000000000000F7
+:1029E00000000000000000000000000000000000E7
+:1029F00000000000000000000000000000000000D7
+:102A000000000000000000000000000000000000C6
+:102A100000000000000000000000000000000000B6
+:102A200000000000000000000000000000000000A6
+:102A30000000000000000000000000000000000096
+:102A40000000000000000000000000000000000086
+:102A50000000000000000000000000000000000076
+:102A60000000000000000000000000000000000066
+:102A70000000000000000000000000000000000056
+:102A80000000000000000000000000000000000046
+:102A90000000000000000000000000000000000036
+:102AA0000000000000000000000000000000000026
+:102AB0000000000000000000000000000000000016
+:102AC0000000000000000000000000000000000006
+:102AD00000000000000000000000000000000000F6
+:102AE00000000000000000000000000000000000E6
+:102AF00000000000000000000000000000000000D6
+:102B000000000000000000000000000000000000C5
+:102B100000000000000000000000000000000000B5
+:102B200000000000000000000000000000000000A5
+:102B30000000000000000000000000000000000095
+:102B40000000000000000000000000000000000085
+:102B50000000000000000000000000000000000075
+:102B60000000000000000000000000000000000065
+:102B70000000000000000000000000000000000055
+:102B80000000000000000000000000000000000045
+:102B90000000000000000000000000000000000035
+:102BA0000000000000000000000000000000000025
+:102BB0000000000000000000000000000000000015
+:102BC0000000000000000000000000000000000005
+:102BD00000000000000000000000000000000000F5
+:102BE00000000000000000000000000000000000E5
+:102BF00000000000000000000000000000000000D5
+:102C000000000000000000000000000000000000C4
+:102C100000000000000000000000000000000000B4
+:102C200000000000000000000000000000000000A4
+:102C30000000000000000000000000000000000094
+:102C40000000000000000000000000000000000084
+:102C50000000000000000000000000000000000074
+:102C60000000000000000000000000000000000064
+:102C70000000000000000000000000000000000054
+:102C80000000000000000000000000000000000044
+:102C90000000000000000000000000000000000034
+:102CA0000000000000000000000000000000000024
+:102CB0000000000000000000000000000000000014
+:102CC0000000000000000000000000000000000004
+:102CD00000000000000000000000000000000000F4
+:102CE00000000000000000000000000000000000E4
+:102CF00000000000000000000000000000000000D4
+:102D000000000000000000000000000000000000C3
+:102D100000000000000000000000000000000000B3
+:102D200000000000000000000000000000000000A3
+:102D30000000000000000000000000000000000093
+:102D40000000000000000000000000000000000083
+:102D50000000000000000000000000000000000073
+:102D60000000000000000000000000000000000063
+:102D70000000000000000000000000000000000053
+:102D80000000000000000000000000000000000043
+:102D90000000000000000000000000000000000033
+:102DA0000000000000000000000000000000000023
+:102DB0000000000000000000000000000000000013
+:102DC0000000000000000000000000000000000003
+:102DD00000000000000000000000000000000000F3
+:102DE00000000000000000000000000000000000E3
+:102DF00000000000000000000000000000000000D3
+:102E000000000000000000000000000000000000C2
+:102E100000000000000000000000000000000000B2
+:102E200000000000000000000000000000000000A2
+:102E30000000000000000000000000000000000092
+:102E40000000000000000000000000000000000082
+:102E50000000000000000000000000000000000072
+:102E60000000000000000000000000000000000062
+:102E70000000000000000000000000000000000052
+:102E80000000000000000000000000000000000042
+:102E90000000000000000000000000000000000032
+:102EA0000000000000000000000000000000000022
+:102EB0000000000000000000000000000000000012
+:102EC0000000000000000000000000000000000002
+:102ED00000000000000000000000000000000000F2
+:102EE00000000000000000000000000000000000E2
+:102EF00000000000000000000000000000000000D2
+:102F000000000000000000000000000000000000C1
+:102F100000000000000000000000000000000000B1
+:102F200000000000000000000000000000000000A1
+:102F30000000000000000000000000000000000091
+:102F40000000000000000000000000000000000081
+:102F50000000000000000000000000000000000071
+:102F60000000000000000000000000000000000061
+:102F70000000000000000000000000000000000051
+:102F80000000000000000000000000000000000041
+:102F90000000000000000000000000000000000031
+:102FA0000000000000000000000000000000000021
+:102FB0000000000000000000000000000000000011
+:102FC0000000000000000000000000000000000001
+:102FD00000000000000000000000000000000000F1
+:102FE00000000000000000000000000000000000E1
+:102FF00000000000000000000000000000000000D1
+:00000001FF
diff --git a/firmware/yamaha/ds1_dsp.fw.ihex b/firmware/yamaha/ds1_dsp.fw.ihex
new file mode 100644
index 0000000..acb0ba4
--- /dev/null
+++ b/firmware/yamaha/ds1_dsp.fw.ihex
@@ -0,0 +1,9 @@
+:1000000081000000A40100000A0000002F00000091
+:1000100053020800170380017B4000003F8400006A
+:100020003C4801003C9401003CD805003C1C000009
+:100030007BC000003F0C05003C5021010000000087
+:1000400000000000000000000000000000000000B0
+:1000500000000000000000000000000000000000A0
+:100060000000000000000000000000000000000090
+:100070000000000000000000000000000000000080
+:00000001FF
diff --git a/firmware/yamaha/ds1e_ctrl.fw.ihex b/firmware/yamaha/ds1e_ctrl.fw.ihex
new file mode 100644
index 0000000..597f429
--- /dev/null
+++ b/firmware/yamaha/ds1e_ctrl.fw.ihex
@@ -0,0 +1,769 @@
+:10000000070000000700240007000C0007001C0088
+:1000100007000600020070002000000040000300FE
+:100020000471000086420000400003000D0F000034
+:10003000100800003A042000820200000D020000B7
+:10004000100800003A04200082120000820E2000F6
+:100050000D800000100800003A042000821A000001
+:100060000D460300100800003A0410000DEC0200D9
+:10007000100800003A0418000D01000015000200ED
+:10008000FD00000020000000608803006090030075
+:100090006080030040800300408003004080030034
+:1000A000408001007D0A0000408003004080030082
+:1000B0004080010002042000820800001A000800AD
+:1000C00004090000867101000700000007002600F7
+:1000D00007004000070000008D2503001008000005
+:1000E0003A04180007002600024428007D0800009A
+:1000F000428001000A16000006A205000700000069
+:10010000070044000D230000100800003A04080016
+:1001100006FA220007000000FD07000042800100EF
+:100120000A0008000409000086AB020095010000E7
+:10013000040D09000700000020080000F500000081
+:100140007D0B000060F00100FD000000063A030096
+:10015000408001007D0A0000428003004A801300B5
+:100160000A00180020180000609005006088050053
+:1001700040800100FD000000428001000A00700084
+:100180001501000044110700863B03000000030036
+:100190002070000006620300408001000D36000060
+:1001A000100800003A04080006222300070000009F
+:1001B0000DEC0200100800003A041800069A010035
+:1001C00007000000070024008D0F00001008000049
+:1001D0003A16000002240000025C0000FD28000026
+:1001E00020000000408001000D00080015080000FC
+:1001F00084095100070000004D0000005D0E000062
+:10020000020E00000D430000100800003A04080030
+:1002100006122E00070000008D00000024090000D7
+:10022000020F00000D470000100800003A0408000B
+:1002300006122E0007000000800448001012000083
+:100240003A0428008D770000100800003A0C2800BE
+:100250008D060000100800003A142800024428000F
+:100260008D250300100800003A0418008DFF0700D8
+:1002700020080000FD020000408001000700260069
+:1002800007002000FD020000428001000A00080073
+:100290000409000086120500070000000700240082
+:1002A0000DEC0200100800003A0418007D38000030
+:1002B000428001000A0008001510000084090100B6
+:1002C000869B01000700000006B201000700000045
+:1002D000FD080000428001000A0018000419000017
+:1002E00086B8220007002800101800003A042800F1
+:1002F000020C28000D000000100800003A1428002D
+:100300008D80080020080000FD02000040800100F0
+:10031000070020000D0200000499180007000000EB
+:100320002D400000BD000000FD02000042800100E1
+:100330000A00080004090000865A060007000000B1
+:1003400000010000200A00007D0400004080010040
+:10035000428001000A002000153000004421010005
+:10036000866103000700000004210000866103008D
+:10037000070000008D0F0000100800003A0C280054
+:100380004439020086C90700070000001018000069
+:100390003A0428000D81080020080000FD0200003A
+:1003A0004080010007002000102800003A0078007B
+:1003B0008D780000100800003A04080006122A0098
+:1003C000070000000D4000001510000004991800FF
+:1003D000042929000439390007000000060207003B
+:1003E00007000000F50400007D0000002000000070
+:1003F0008D00000060080100408001007D040000C5
+:10040000428003004A8021000A00180044190200BB
+:1004100086902200070000007540000004F1710082
+:1004200007000000420001000A0028000429000023
+:1004300086582200070000000D3C000004A930008F
+:10044000070000007D070000428001000A0008004C
+:100450000409000086DA08007D050000202800005D
+:1004600060B0030006F20800408001002030000068
+:1004700060A8030040800100FD02000042800100EE
+:100480000A0008000409000086FA080007000000BE
+:100490007D050000428001000A0428008D0E000046
+:1004A000100800003A0C28000D00000010080000A1
+:1004B0003A1428000D00090020080000FD02000089
+:1004C0004080010007002000FD3D000020000000EA
+:1004D000408001007D1000008D9D0000100800008C
+:1004E0003A04080006122A00070000001508000060
+:1004F0001A0008008409010086510A007D130000DB
+:1005000000052000200F2800608F3300608F3B0023
+:10051000608F4300608F4B00608F5300608F5B00E3
+:10052000608A0300408001007D10000042800100CD
+:100530000A000800150200008409010086813A00C3
+:1005400007000000BD7F0000C43D38000700000028
+:100550007D1A000075130000428001004A00090066
+:100560000A001000048D0B00049513000700000022
+:10057000200800006090010004110000865822004D
+:1005800040000100FD170000428001000A00080041
+:1005900004090000865A2200070000007D190000AF
+:1005A000428003004A8009000A001000240900006C
+:1005B00064160000FD110000428003004A802B00F9
+:1005C0004A8019008D0000004489210007000000C6
+:1005D0004422000086190C0007000000641A000085
+:1005E000242A00007D1900000201080022011000E9
+:1005F000200800006090030040800100FD3D0000E5
+:100600008D000000200800004080010075130000EC
+:100610007D1A0000420001004A8009000A00100013
+:100620001D020000E4890100E49229004491300099
+:10063000070000000D060000150A00001D0C000058
+:1006400025100000E4A90000E42B01006404000070
+:10065000E4B30100E432020064040000640400001A
+:1006600064040000640400000D040000C4B108002C
+:100670000700000020080000F50B00004000030008
+:100680007D190000428003004A800900240A00000E
+:100690000A000800640E0800070000002201100094
+:1006A000200800006010030040000100AC6400005E
+:1006B0007D02000020000000408001007D1000004D
+:1006C00042800100FD1100004A803B004A80090081
+:1006D0000A0020009500000044111A0044A1000007
+:1006E00086580E000D04000084B9000086590E00E3
+:1006F000FD18000042800100FD1000004A80090042
+:100700000A0028009500000024090100642A000066
+:1007100086490E000700000004290000865A0E00DA
+:100720000700000006620E00020008008D000000B5
+:100730007D38000020080000408001007D1200008C
+:10074000428001000A0010000439000086090F00F1
+:100750000D080000B5FF7F0084B9000086D90E00A7
+:100760002500000006B20F002D000000150000005B
+:100770002D0800000DE002002008000006FA0F001E
+:100780000D00000035807F0084B9000086A90F00AD
+:10079000250040008D000000440911000700000002
+:1007A0008D01000004951000070000006491000016
+:1007B00024040000240400002404000002011000AE
+:1007C000020028000DDF02002008000006FA0F00DA
+:1007D0008D0100002D0400008D0000000495100024
+:1007E000070000000D0200008491100007000000C7
+:1007F0008DDF0200200800008D000000FD380000A1
+:1008000040800100FD3B00002010000060A80300B4
+:100810001508000084313100842121000700000008
+:1008200060B0030060A0030040800100FD220000D2
+:1008300095000000240901002404000024040000A5
+:100840006412000002011000200800006090030004
+:1008500040800100241900000D0F01007D390000C7
+:100860002008000040800500428003004A840900FF
+:10087000060600000A040800240400002404000006
+:100880007D110000428001000A000800240A0000D7
+:1008900002052800020C28000D8009002008000035
+:1008A000FD0200004080010007002000FD22000042
+:1008B000428001000A00080095000000C40D2800D5
+:1008C000241901007D19000042800100FD11000083
+:1008D0004A8009000A001000B500000044311100F0
+:1008E000048D0A0007000000440A08000495120065
+:1008F00007000000FD2300002010000040800300DE
+:10090000441210000700000020080000609003005F
+:1009100040800100FD020000428001000A00080042
+:10092000040900008632120007000000FD3B0000B1
+:1009300000010000100A00007A800B004A801300BA
+:10094000840909000700000095000000043D010033
+:1009500086B812000A001000020010008409090085
+:1009600007000000428003004A801100040D0900C6
+:10097000070000000A001000840D090007000000B5
+:100980007D25000020080000408001000D010000CE
+:10099000100800003A1428007D1200004280010077
+:1009A0000A0020007D190000428001007D11000036
+:1009B0004A8031000A001000243100008D3B010004
+:1009C0007D390000200800004080050042800300BF
+:1009D0004A840900060600000A04080002013000EB
+:1009E000243100002404000024040000241200002C
+:1009F000020528004C1A000086391400020070001D
+:100A00002D000000000003007D380000428001003E
+:100A10000A0010000662140024210000AD0000004E
+:100A2000020010000D01000024090000246B0000EA
+:100A30000D4A01007D3900002008000040800500BB
+:100A4000428003004A840900060600000A040800E8
+:100A5000643200008D000000240A00002010000015
+:100A60007D220000408001008D4F01001008000031
+:100A70003A040800065A2B00070000002028000056
+:100A80007D200000408001007D11000042800300B5
+:100A90004A8013000A8033007D3800004280010044
+:100AA0000A00080004090000867217000700000011
+:100AB0008D000000640903000D5B01007D3900001A
+:100AC0002008000040800500428003004A8409009D
+:100AD000060600000A040800020138002404000091
+:100AE0002404000024120000FD02000042800100E6
+:100AF0000A0008000409000086DA1500070000005B
+:100B0000020528004C1A000086711700070000003B
+:100B1000642103002C630000FD3D000042800100C1
+:100B20000A00080095000000040909000700000001
+:100B3000200800004C1A0000869916004080010031
+:100B40000000030006B21600242100000D01000081
+:100B500024090000246B00000D6F01007D390000A6
+:100B60002008000040800500428003004A840900FC
+:100B7000060600000A040800643A00009500000020
+:100B800024120000FD020000428001000A0008005B
+:100B90000409000086121700070000000D7601000E
+:100BA000100800003A040800065A2B000700000055
+:100BB000060A160007000000207000000A01080065
+:100BC0002A011000FD2000006088030060900300EF
+:100BD000408001007D22000042800100FD3D0000B8
+:100BE0000A0008004A843100040900008610180039
+:100BF0008B0018008D000000049918002C310000B3
+:100C000006E21800070000004C320000866B180056
+:100C100007000000041900008668180007000000A3
+:100C200095000000449119002C220000243100009E
+:100C30006C6300003D0E000075130000FD0B00000A
+:100C4000420001004A8009000A001000EC8A0300FB
+:100C5000EC9303004C22000086E11800070000001E
+:100C60008D000000049918006C2200002C32000056
+:100C70000A053000AB1D300083200000FD18000085
+:100C8000428001000A0008002489010002053000AA
+:100C90008310000075180000420001000A001000D7
+:100CA0008D00000024090100751300004205330087
+:100CB000CB0C3300CB2C3300CB343300CB3C330094
+:100CC000CB443300CB4C3300CB5433008B5C30002F
+:100CD00083600000F5020000420001000A000800E5
+:100CE0000409000086B21900070000002D1E000054
+:100CF000FD050000428001000A000800248902006E
+:100D0000020528000D060000100800003A0C28001B
+:100D10008D000000100800003A1428008D800A00A1
+:100D200020080000F502000040000100070022003A
+:100D300075120000420003004A0021008D000000EF
+:100D400044091A00070000008DAB010010080000E4
+:100D50003A04080006AA2C0007000000F501000074
+:100D6000420003004A000D000A00100044910800F0
+:100D7000070000002008000040000100F5250000E9
+:100D800044310A000700000020080000602803002A
+:100D9000400003007D210000428003004A800B00D8
+:100DA0000A0010002008000060100300400003004B
+:100DB0008D000000240100002C010000640E0000E2
+:100DC000641A00006C6300000A0108002A01100088
+:100DD000200800006010030040000300FD20000018
+:100DE000428001000A0008007D22000042800100CC
+:100DF0000A001000200800006010030040000300FB
+:100E00007D190000428001000A000800FD22000058
+:100E1000428003000A001000200800006010030058
+:100E200040000300040D0900070000002008000036
+:100E300040000300428003004A800B000A001000BB
+:100E400020080000601003004000030042800300FF
+:100E50004A8013004A801900040D1100048D190006
+:100E6000070000000A0008002010000060180300BE
+:100E700060080300400003008D00000044090B00DF
+:100E8000070000002008000040000100F5050000F8
+:100E9000420003000A000800200800004000010092
+:100EA000F5000000420001000A00080004090000EB
+:100EB00086981D00751E0000420003004A040100D0
+:100EC0000A0C000006AA1D00070000000204000032
+:100ED000020C00007D170000F51A0000428001009E
+:100EE0004A1403004A1C03004A2403004A2C03004E
+:100EF0004A3403004A3C03004A4403000A4C000001
+:100F00003D040000F5130000FD1A0000420003003C
+:100F10004A000B004A801B004A8013000A00200090
+:100F20004491080044A11900E4890300EC990300EE
+:100F3000025500000A5D0000420003004A000B0059
+:100F40004A801B004A8013000A00200044910800D8
+:100F500044A11900E4890300EC9903000265000034
+:100F60000A6D0000420003004A000B004A0019000D
+:100F70004A802B004A8013004A8021000A0030007A
+:100F80004491080044A1190044B12A00E4890300F7
+:100F9000EC990300027500000A7D0000E4A903003B
+:100FA000020700007D1000001504000042800100CF
+:100FB0000A000800E4090100020F0000F52A000001
+:100FC000FD190000420001004A8009000A001000DB
+:100FD0003409000074160000F529000042000100E9
+:100FE0000A0010007C910000752000004200010002
+:100FF0000A00080004090000860A2000F526000007
+:10100000F5270000420003004A0009000A00100012
+:101010003C0A00007C160000751A0000FD0B000061
+:10102000420001004A8051000A00480007001600F3
+:1010300075100000420001000A2C2800121D280033
+:1010400012252800321F000007001E0007000E00B6
+:101050007519000042000100F52D00004A000D0046
+:101060000A0010004491000086EA200042000100BE
+:101070000A3428005D0E00008D000000750300009A
+:101080002008000040000100F4D2050004D1540003
+:101090005C730000868B21000700000007000C0035
+:1010A0000700080007000A008D1702001008000062
+:1010B0003A04080006B2340007000000069221003E
+:1010C0000700000007000800752200004200010030
+:1010D0000A00200004210000865822002D1E000076
+:1010E000F5020000420001000A00080004090000A7
+:1010F00086CA210007000000102000003A043000DA
+:101100007D050000C38001000A0008002489020058
+:1011100002052800020C28000D810A0020080000AA
+:10112000F50200004000010007002200FD0400005D
+:10113000428001000A0070000000030020700000DF
+:1011400006FA0700408001008D2B02001008000005
+:101150003A04080006AA2C0007000000FD02000067
+:10116000428001000A0008000409000086C2220033
+:1011700007000000060202000700000075080000DA
+:10118000FD0900000D010000064223009502000049
+:10119000750B00007D0900000D0000001505000022
+:1011A000420001000A0018000419000086002A000D
+:1011B000F50600002010000040000100F5040000CA
+:1011C00020080000400001007507000042000100F7
+:1011D0004A8009000A0010002411000004090000E0
+:1011E00086F2230015080000020108000412100016
+:1011F0000612240075050000041208000700000014
+:1012000002011000750500002504000024110200F1
+:1012100002011000200800006010030040000100DF
+:101220002419000086002A008D00000064040000DC
+:10123000049D0000861029000201180075050000B9
+:10124000420001000A0428008D010000240900006A
+:10125000020D28000D0000002409000002152800DE
+:101260000D00100020080000F50200004000010001
+:101270000700200075110000FD02000042800100FF
+:101280000A0008000409000086FA24000700000094
+:1012900000010000200B0800600B1300600B1B0016
+:1012A000600A030040000100420005004A003D00C2
+:1012B0004A0035004A002D000A002000F506000013
+:1012C000420001000A142800F50400004200010059
+:1012D0000A00080015030000040D01008602260024
+:1012E0001540000095000000040D010086F0250067
+:1012F000220010002A001000061A26000700000035
+:101300000431330004A92A0007000000242103004F
+:1013100002052800024428002411000002014000B8
+:101320002404000024040000243200002C290000C2
+:101330006C630000867327000700000064B10200A0
+:1013400064040000640400008D000000640A0000D2
+:10135000020D28008D00100020080000F50200009A
+:1013600040000100070022008D00000004B9380091
+:10137000070000006C2903000A013000F50200009C
+:10138000420001000A00080004090000860227004C
+:10139000070000002C2100000A0528006C31000025
+:1013A0006C0400006C0400000A45280024110000B1
+:1013B000646B0000020110008D0000006C09010048
+:1013C0000A0D28000D01100020080000F5020000A1
+:1013D0004000010007002200244100002404000016
+:1013E00024040000243200000201300044290300DC
+:1013F00086FA27000700000002003000F504000014
+:10140000420001000A00080015030000040D01005D
+:1014100086402800243100006404000002013000EE
+:10142000F5020000420001000A0008000409000063
+:10143000864A2800070000000244280024310000EA
+:1014400002053000243900008305300083080000C5
+:10145000F5050000420001000A0428008D0000008C
+:1014600024810000020D28008D000000248100006E
+:10147000021528008D01100020080000F502000070
+:101480004000010007002200251000007505000043
+:10149000420003004A0009000A00100004090A0083
+:1014A0000411120007000000201000006008050071
+:1014B00040000500FD060000428001004A000900CE
+:1014C0000A001000A500000004090A00041112001F
+:1014D00007000000200800006090010040000100AB
+:1014E000F5020000420001000A00080004090000A3
+:1014F00086CA2900070000000642240007000000F9
+:101500000606000007000000F5020000420001008E
+:101510000A00080004090000861A2A0007000000DB
+:1015200000010000200B0800608B1300608B1B0083
+:10153000608B2300608B2B00608B3300608B3B0043
+:10154000608B4300608B4B00608B5300608B5B00B3
+:10155000608B6300608B6B00608B7300608B7B0023
+:10156000608F0300608F0B00608F1300608F1B0083
+:10157000608F2300608F2B00608F3300608F3B00F3
+:10158000608F4300608F4B00608F5300608F5B0063
+:10159000608F6300608F6B00608F7300608F7B00D3
+:1015A000608A030006060000408001008D000000F4
+:1015B000640A0000020D2800240A00007D020000D9
+:1015C000428001000A00100024120000FD03000008
+:1015D000428001000A00080004090000860A2C006D
+:1015E000070000008D010000240A000064040000D0
+:1015F0006404000002010800240900002404000023
+:1016000024040000020110000D00020044910000BB
+:1016100086612C0007000000FD01000042800100EF
+:101620000A000800440A000086432C0042800100A2
+:101630000D000A0020080000FD02000040800100AB
+:10164000070020007D0200002010000006060000B8
+:1016500040800100F5020000420001000A0008007D
+:101660000409000086B22C00070000007D03000082
+:10167000428001000A0008000409000086E22C00F4
+:1016800007000000750000007D2E000042000100F0
+:101690004A800B00200000000409000086060000BC
+:1016A000400001004A8431008B04300083080000B0
+:1016B0008D000000100800003A1428008D00000082
+:1016C000100800003A0C28007506000042000100D6
+:1016D0000A0008001538000024090100020528004E
+:1016E0000D000B0020080000F50200004000010082
+:1016F00006060000070022006404000064040000E5
+:101700000606000007000000340100008D7F000085
+:101710003C090000121D280012252800321F00007D
+:1017200007000E000D0100007D03000020080000EE
+:1017300040800100F4D20500070000000700080007
+:101740007D030000428001000A0008000409000037
+:10175000868A2E0007000000060600000700000031
+:101760000700000012000000070010000700320010
+:101770000700600007004600800010001A004800C3
+:101780000449000086F12E0007000000101200003E
+:101790003A00580045010000045D5C0007000000AD
+:1017A000800000001A0048000449000086412F0014
+:1017B00007000000101200003A0050000459000019
+:1017C00086982F0045000000C5000000F5FF7F004F
+:1017D0007DFF7F0024D50700244200000201500055
+:1017E00002052000820000001A00400004410000B1
+:1017F00086C92F0007000000653800001A0040006D
+:10180000204000004D10000084C1040086AB310070
+:1018100040000000070004006501000045010000D1
+:101820002040000040000000650700008000080024
+:101830001A004000044100008659300007000000F3
+:10184000101200003A0040000441000086B230004F
+:101850004D000000CD000000104800003A042000B8
+:10186000820800001A0040000441000086C13000D8
+:10187000070000002048000004590000869831004D
+:1018800040000000E507000080042000A0162800AA
+:10189000E0163200E0163A00E01642006012020044
+:1018A0004000000032000000750040007D00000094
+:1018B00074D5070012052000820000001A004000C5
+:1018C000044100008671310007000000068A030011
+:1018D00007006400E5000000200000004000000058
+:1018E000650A0000200000004000020040000200E5
+:1018F0004000000065010000420000000A00700086
+:101900000471000086323200070000000700060064
+:10191000069A010007006400000005002070000026
+:1019200040000000068A0300070064000700000072
+:101930006D30000060880200609002000A0008001C
+:101940006088020040800000120010000D100000AE
+:101950008491000086D132000D0E000084910000B9
+:1019600086E133000700000007003000201000006F
+:101970006D3B000040800000800000001A0008005D
+:101980000409000086F13200070000002012000068
+:10199000ED0D000040800000428000000A001000B1
+:1019A0000D004000449510000700000020100000CA
+:1019B000ED0D000040800000428000000A0420007D
+:1019C000820000001A00080004090000868133002C
+:1019D000070000006D3B0000428000000A00080084
+:1019E000150E000084090100862B340007006000FA
+:1019F0001A000800150C0000840901008613340049
+:101A00002000000007001A00ED02000040800000E6
+:101A1000070062006D300000428002004A800A0028
+:101A2000200800004A800A00060600004A801000D4
+:101A30000700000012252800321F0000F4D2050024
+:101A400004D154005C73000086070000070000000A
+:101A500007000C0007000A0007001C0065340000A6
+:101A60004000020020480000605002000A004000D0
+:101A700060400200400000004449450007000000AB
+:101A800020400000E53A000040000000E52800008A
+:101A9000420000000A0048000449000086F83900AE
+:101AA000652C0000420000000A004000D500000044
+:101AB00004414500070000005506000004450500EC
+:101AC00086823600D5010000044505008680360078
+:101AD000652B000042000000E53A00004A0050007B
+:101AE0000A004000D4C3450007000000044545003B
+:101AF00007000000CD00000044494400070000003A
+:101B000004454500070000004D0100004449550010
+:101B1000070000004451040086793600652C00005F
+:101B2000420000000A00480004D14C0007000000F9
+:101B300044C1040086833600070000000700160039
+:101B4000E52C0000420004000A0040002040000094
+:101B50004000000065290000420000000A0040002B
+:101B60000441000086F03600070000000224000057
+:101B700006323800025C0000E5250000420000004B
+:101B80000A00400074420000E52A00004200000004
+:101B90000A0040007442000012015000E5290000D4
+:101BA000420000000A0040003442000004414500A9
+:101BB000070000002040000040000000E53E00005B
+:101BC0002000000040000000E52D00005201400010
+:101BD0000A0050004451040086DA3700C5000000B6
+:101BE000E53E00002040000040000000E52B000022
+:101BF000420000000A00400054424000070000007C
+:101C0000E52A0000204000004000000032015000A2
+:101C10003401040074560000E5290000420002006F
+:101C20000A004200420000000A0050007C4105000A
+:101C3000E5280000420000000A004800C50000003E
+:101C400044C14C0086A03800E5260000E5270000CE
+:101C5000420002004A0040000A0050003C420000DE
+:101C60007C560000E52800002048000040000000ED
+:101C7000121D280012252800721F0000652900008F
+:101C8000420000000A00400004410000863A39008A
+:101C900007000E000700160007001E00E53E0000CA
+:101CA000420000000A00400004410000867839002C
+:101CB000652D0000420000000A3428006534000051
+:101CC000420002004A004200204000004A004A0050
+:101CD0004A005000F4D2050004D154005C730000A7
+:101CE00086E1390007000000060600000700080032
+:101CF00007000C000700080007000A00E5010000CB
+:101D00004500020020400000600000006503000064
+:101D100040000000652E0000201A0000601A0A0032
+:101D20004000000065340000420002004A0042000A
+:101D3000204000004A004A00060600004A00500009
+:101D4000FD170000428001000A000800040900009D
+:101D5000865A2200070000007D100000428001002A
+:101D6000FD1100004A8033004A8019000A0020005B
+:101D70009500000044112A0044A1010086903B0018
+:101D80000D04000084B1000086913B00FD180000A6
+:101D900042800100FD1000004A8009000A0038005E
+:101DA0009500000024090100643A000086813B0090
+:101DB000070000000439000086923B000700000085
+:101DC000069A3B000D0000008D0000002008000076
+:101DD0007D38000040800100020070007D1100008D
+:101DE000428001007D1900004A8029000A0030006D
+:101DF0000200380024310000240400002404000004
+:101E0000242A0000020528008D06000010080000AA
+:101E10003A1428000D75000024B10000642200006F
+:101E200086033D0002442800100800003A0C2800F8
+:101E30000D800B0020080000FD0200004080010022
+:101E4000070020008D75000024B100000201100081
+:101E50004421010086493E00101800003A0010009D
+:101E60007D380000428001000A00080004090000DB
+:101E700086483E0000000300064A3E00BD00000008
+:101E80008D00000064310200640A0000020D280089
+:101E90008D800B0020080000FD0200004080010042
+:101EA000070020007D380000428001000A00080081
+:101EB0000409000086323E0000000300FD0200001D
+:101EC000428001000A0008000409000086823D00EB
+:101ED00007000000102800003A0428000D750000DB
+:101EE0002409030064220000020D28006C31020066
+:101EF0000A4528000D810B0020080000FD020000AB
+:101F000040800100070020008D000000240A00002E
+:101F1000064A3E0002011000101800003A001000AE
+:101F2000BD000000103800003A0430007D180000A9
+:101F300042800100FD1800004A8009000A002000CC
+:101F4000AD000000248902002C21070010100000C1
+:101F5000830530008B0D3000BB143000831C300033
+:101F6000832000007D130000428003004A84330078
+:101F7000CBAC3300CBB43300CBBC3300CBC4330089
+:101F8000CBCC3300CBD433008B5C300083600000BB
+:101F90000D1E0000FD050000428001000A00200027
+:101FA000240902008D0600006CA900009D000000BD
+:101FB000FD020000428001000A0008000409000040
+:101FC000866A3F0007000000020528000A0D28006D
+:101FD00002442800101800003A1428008D000C005C
+:101FE00020080000FD0200004080010007002200E0
+:101FF00004390000865822000D1E00007D050000F7
+:10200000428001000A00200024090200A50000000F
+:10201000FD020000428001000A00080004090000DF
+:10202000862A40000700000002052800020C280054
+:10203000102000003A1428000D010C0020080000B8
+:10204000FD02000040800100065A22000700220025
+:102050000000000000000000000000000000000080
+:102060000000000000000000000000000000000070
+:102070000000000000000000000000000000000060
+:102080000000000000000000000000000000000050
+:102090000000000000000000000000000000000040
+:1020A0000000000000000000000000000000000030
+:1020B0000000000000000000000000000000000020
+:1020C0000000000000000000000000000000000010
+:1020D0000000000000000000000000000000000000
+:1020E00000000000000000000000000000000000F0
+:1020F00000000000000000000000000000000000E0
+:1021000000000000000000000000000000000000CF
+:1021100000000000000000000000000000000000BF
+:1021200000000000000000000000000000000000AF
+:10213000000000000000000000000000000000009F
+:10214000000000000000000000000000000000008F
+:10215000000000000000000000000000000000007F
+:10216000000000000000000000000000000000006F
+:10217000000000000000000000000000000000005F
+:10218000000000000000000000000000000000004F
+:10219000000000000000000000000000000000003F
+:1021A000000000000000000000000000000000002F
+:1021B000000000000000000000000000000000001F
+:1021C000000000000000000000000000000000000F
+:1021D00000000000000000000000000000000000FF
+:1021E00000000000000000000000000000000000EF
+:1021F00000000000000000000000000000000000DF
+:1022000000000000000000000000000000000000CE
+:1022100000000000000000000000000000000000BE
+:1022200000000000000000000000000000000000AE
+:10223000000000000000000000000000000000009E
+:10224000000000000000000000000000000000008E
+:10225000000000000000000000000000000000007E
+:10226000000000000000000000000000000000006E
+:10227000000000000000000000000000000000005E
+:10228000000000000000000000000000000000004E
+:10229000000000000000000000000000000000003E
+:1022A000000000000000000000000000000000002E
+:1022B000000000000000000000000000000000001E
+:1022C000000000000000000000000000000000000E
+:1022D00000000000000000000000000000000000FE
+:1022E00000000000000000000000000000000000EE
+:1022F00000000000000000000000000000000000DE
+:1023000000000000000000000000000000000000CD
+:1023100000000000000000000000000000000000BD
+:1023200000000000000000000000000000000000AD
+:10233000000000000000000000000000000000009D
+:10234000000000000000000000000000000000008D
+:10235000000000000000000000000000000000007D
+:10236000000000000000000000000000000000006D
+:10237000000000000000000000000000000000005D
+:10238000000000000000000000000000000000004D
+:10239000000000000000000000000000000000003D
+:1023A000000000000000000000000000000000002D
+:1023B000000000000000000000000000000000001D
+:1023C000000000000000000000000000000000000D
+:1023D00000000000000000000000000000000000FD
+:1023E00000000000000000000000000000000000ED
+:1023F00000000000000000000000000000000000DD
+:1024000000000000000000000000000000000000CC
+:1024100000000000000000000000000000000000BC
+:1024200000000000000000000000000000000000AC
+:10243000000000000000000000000000000000009C
+:10244000000000000000000000000000000000008C
+:10245000000000000000000000000000000000007C
+:10246000000000000000000000000000000000006C
+:10247000000000000000000000000000000000005C
+:10248000000000000000000000000000000000004C
+:10249000000000000000000000000000000000003C
+:1024A000000000000000000000000000000000002C
+:1024B000000000000000000000000000000000001C
+:1024C000000000000000000000000000000000000C
+:1024D00000000000000000000000000000000000FC
+:1024E00000000000000000000000000000000000EC
+:1024F00000000000000000000000000000000000DC
+:1025000000000000000000000000000000000000CB
+:1025100000000000000000000000000000000000BB
+:1025200000000000000000000000000000000000AB
+:10253000000000000000000000000000000000009B
+:10254000000000000000000000000000000000008B
+:10255000000000000000000000000000000000007B
+:10256000000000000000000000000000000000006B
+:10257000000000000000000000000000000000005B
+:10258000000000000000000000000000000000004B
+:10259000000000000000000000000000000000003B
+:1025A000000000000000000000000000000000002B
+:1025B000000000000000000000000000000000001B
+:1025C000000000000000000000000000000000000B
+:1025D00000000000000000000000000000000000FB
+:1025E00000000000000000000000000000000000EB
+:1025F00000000000000000000000000000000000DB
+:1026000000000000000000000000000000000000CA
+:1026100000000000000000000000000000000000BA
+:1026200000000000000000000000000000000000AA
+:10263000000000000000000000000000000000009A
+:10264000000000000000000000000000000000008A
+:10265000000000000000000000000000000000007A
+:10266000000000000000000000000000000000006A
+:10267000000000000000000000000000000000005A
+:10268000000000000000000000000000000000004A
+:10269000000000000000000000000000000000003A
+:1026A000000000000000000000000000000000002A
+:1026B000000000000000000000000000000000001A
+:1026C000000000000000000000000000000000000A
+:1026D00000000000000000000000000000000000FA
+:1026E00000000000000000000000000000000000EA
+:1026F00000000000000000000000000000000000DA
+:1027000000000000000000000000000000000000C9
+:1027100000000000000000000000000000000000B9
+:1027200000000000000000000000000000000000A9
+:102730000000000000000000000000000000000099
+:102740000000000000000000000000000000000089
+:102750000000000000000000000000000000000079
+:102760000000000000000000000000000000000069
+:102770000000000000000000000000000000000059
+:102780000000000000000000000000000000000049
+:102790000000000000000000000000000000000039
+:1027A0000000000000000000000000000000000029
+:1027B0000000000000000000000000000000000019
+:1027C0000000000000000000000000000000000009
+:1027D00000000000000000000000000000000000F9
+:1027E00000000000000000000000000000000000E9
+:1027F00000000000000000000000000000000000D9
+:1028000000000000000000000000000000000000C8
+:1028100000000000000000000000000000000000B8
+:1028200000000000000000000000000000000000A8
+:102830000000000000000000000000000000000098
+:102840000000000000000000000000000000000088
+:102850000000000000000000000000000000000078
+:102860000000000000000000000000000000000068
+:102870000000000000000000000000000000000058
+:102880000000000000000000000000000000000048
+:102890000000000000000000000000000000000038
+:1028A0000000000000000000000000000000000028
+:1028B0000000000000000000000000000000000018
+:1028C0000000000000000000000000000000000008
+:1028D00000000000000000000000000000000000F8
+:1028E00000000000000000000000000000000000E8
+:1028F00000000000000000000000000000000000D8
+:1029000000000000000000000000000000000000C7
+:1029100000000000000000000000000000000000B7
+:1029200000000000000000000000000000000000A7
+:102930000000000000000000000000000000000097
+:102940000000000000000000000000000000000087
+:102950000000000000000000000000000000000077
+:102960000000000000000000000000000000000067
+:102970000000000000000000000000000000000057
+:102980000000000000000000000000000000000047
+:102990000000000000000000000000000000000037
+:1029A0000000000000000000000000000000000027
+:1029B0000000000000000000000000000000000017
+:1029C0000000000000000000000000000000000007
+:1029D00000000000000000000000000000000000F7
+:1029E00000000000000000000000000000000000E7
+:1029F00000000000000000000000000000000000D7
+:102A000000000000000000000000000000000000C6
+:102A100000000000000000000000000000000000B6
+:102A200000000000000000000000000000000000A6
+:102A30000000000000000000000000000000000096
+:102A40000000000000000000000000000000000086
+:102A50000000000000000000000000000000000076
+:102A60000000000000000000000000000000000066
+:102A70000000000000000000000000000000000056
+:102A80000000000000000000000000000000000046
+:102A90000000000000000000000000000000000036
+:102AA0000000000000000000000000000000000026
+:102AB0000000000000000000000000000000000016
+:102AC0000000000000000000000000000000000006
+:102AD00000000000000000000000000000000000F6
+:102AE00000000000000000000000000000000000E6
+:102AF00000000000000000000000000000000000D6
+:102B000000000000000000000000000000000000C5
+:102B100000000000000000000000000000000000B5
+:102B200000000000000000000000000000000000A5
+:102B30000000000000000000000000000000000095
+:102B40000000000000000000000000000000000085
+:102B50000000000000000000000000000000000075
+:102B60000000000000000000000000000000000065
+:102B70000000000000000000000000000000000055
+:102B80000000000000000000000000000000000045
+:102B90000000000000000000000000000000000035
+:102BA0000000000000000000000000000000000025
+:102BB0000000000000000000000000000000000015
+:102BC0000000000000000000000000000000000005
+:102BD00000000000000000000000000000000000F5
+:102BE00000000000000000000000000000000000E5
+:102BF00000000000000000000000000000000000D5
+:102C000000000000000000000000000000000000C4
+:102C100000000000000000000000000000000000B4
+:102C200000000000000000000000000000000000A4
+:102C30000000000000000000000000000000000094
+:102C40000000000000000000000000000000000084
+:102C50000000000000000000000000000000000074
+:102C60000000000000000000000000000000000064
+:102C70000000000000000000000000000000000054
+:102C80000000000000000000000000000000000044
+:102C90000000000000000000000000000000000034
+:102CA0000000000000000000000000000000000024
+:102CB0000000000000000000000000000000000014
+:102CC0000000000000000000000000000000000004
+:102CD00000000000000000000000000000000000F4
+:102CE00000000000000000000000000000000000E4
+:102CF00000000000000000000000000000000000D4
+:102D000000000000000000000000000000000000C3
+:102D100000000000000000000000000000000000B3
+:102D200000000000000000000000000000000000A3
+:102D30000000000000000000000000000000000093
+:102D40000000000000000000000000000000000083
+:102D50000000000000000000000000000000000073
+:102D60000000000000000000000000000000000063
+:102D70000000000000000000000000000000000053
+:102D80000000000000000000000000000000000043
+:102D90000000000000000000000000000000000033
+:102DA0000000000000000000000000000000000023
+:102DB0000000000000000000000000000000000013
+:102DC0000000000000000000000000000000000003
+:102DD00000000000000000000000000000000000F3
+:102DE00000000000000000000000000000000000E3
+:102DF00000000000000000000000000000000000D3
+:102E000000000000000000000000000000000000C2
+:102E100000000000000000000000000000000000B2
+:102E200000000000000000000000000000000000A2
+:102E30000000000000000000000000000000000092
+:102E40000000000000000000000000000000000082
+:102E50000000000000000000000000000000000072
+:102E60000000000000000000000000000000000062
+:102E70000000000000000000000000000000000052
+:102E80000000000000000000000000000000000042
+:102E90000000000000000000000000000000000032
+:102EA0000000000000000000000000000000000022
+:102EB0000000000000000000000000000000000012
+:102EC0000000000000000000000000000000000002
+:102ED00000000000000000000000000000000000F2
+:102EE00000000000000000000000000000000000E2
+:102EF00000000000000000000000000000000000D2
+:102F000000000000000000000000000000000000C1
+:102F100000000000000000000000000000000000B1
+:102F200000000000000000000000000000000000A1
+:102F30000000000000000000000000000000000091
+:102F40000000000000000000000000000000000081
+:102F50000000000000000000000000000000000071
+:102F60000000000000000000000000000000000061
+:102F70000000000000000000000000000000000051
+:102F80000000000000000000000000000000000041
+:102F90000000000000000000000000000000000031
+:102FA0000000000000000000000000000000000021
+:102FB0000000000000000000000000000000000011
+:102FC0000000000000000000000000000000000001
+:102FD00000000000000000000000000000000000F1
+:102FE00000000000000000000000000000000000E1
+:102FF00000000000000000000000000000000000D1
+:00000001FF
diff --git a/sound/pci/ymfpci/ymfpci_image.h b/sound/pci/ymfpci/ymfpci_image.h
deleted file mode 100644
index 112f2ff..0000000
--- a/sound/pci/ymfpci/ymfpci_image.h
+++ /dev/null
@@ -1,1565 +0,0 @@
-#ifndef _HWMCODE_
-#define _HWMCODE_
-
-static u32 DspInst[YDSXG_DSPLENGTH / 4] = {
- 0x00000081, 0x000001a4, 0x0000000a, 0x0000002f,
- 0x00080253, 0x01800317, 0x0000407b, 0x0000843f,
- 0x0001483c, 0x0001943c, 0x0005d83c, 0x00001c3c,
- 0x0000c07b, 0x00050c3f, 0x0121503c, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000
-};
-
-static u32 CntrlInst[YDSXG_CTRLLENGTH / 4] = {
- 0x000007, 0x240007, 0x0C0007, 0x1C0007,
- 0x060007, 0x700002, 0x000020, 0x030040,
- 0x007104, 0x004286, 0x030040, 0x000F0D,
- 0x000810, 0x20043A, 0x000282, 0x00020D,
- 0x000810, 0x20043A, 0x001282, 0x200E82,
- 0x001A82, 0x032D0D, 0x000810, 0x10043A,
- 0x02D38D, 0x000810, 0x18043A, 0x00010D,
- 0x020015, 0x0000FD, 0x000020, 0x038860,
- 0x039060, 0x038060, 0x038040, 0x038040,
- 0x038040, 0x018040, 0x000A7D, 0x038040,
- 0x038040, 0x018040, 0x200402, 0x000882,
- 0x08001A, 0x000904, 0x015986, 0x000007,
- 0x260007, 0x000007, 0x000007, 0x018A06,
- 0x000007, 0x030C8D, 0x000810, 0x18043A,
- 0x260007, 0x00087D, 0x018042, 0x00160A,
- 0x04A206, 0x000007, 0x00218D, 0x000810,
- 0x08043A, 0x21C206, 0x000007, 0x0007FD,
- 0x018042, 0x08000A, 0x000904, 0x029386,
- 0x000195, 0x090D04, 0x000007, 0x000820,
- 0x0000F5, 0x000B7D, 0x01F060, 0x0000FD,
- 0x032206, 0x018040, 0x000A7D, 0x038042,
- 0x13804A, 0x18000A, 0x001820, 0x059060,
- 0x058860, 0x018040, 0x0000FD, 0x018042,
- 0x70000A, 0x000115, 0x071144, 0x032386,
- 0x030000, 0x007020, 0x034A06, 0x018040,
- 0x00348D, 0x000810, 0x08043A, 0x21EA06,
- 0x000007, 0x02D38D, 0x000810, 0x18043A,
- 0x018206, 0x000007, 0x240007, 0x000F8D,
- 0x000810, 0x00163A, 0x002402, 0x005C02,
- 0x0028FD, 0x000020, 0x018040, 0x08000D,
- 0x000815, 0x510984, 0x000007, 0x00004D,
- 0x000E5D, 0x000E02, 0x00418D, 0x000810,
- 0x08043A, 0x2C8A06, 0x000007, 0x00008D,
- 0x000924, 0x000F02, 0x00458D, 0x000810,
- 0x08043A, 0x2C8A06, 0x000007, 0x00387D,
- 0x018042, 0x08000A, 0x001015, 0x010984,
- 0x018386, 0x000007, 0x01AA06, 0x000007,
- 0x0008FD, 0x018042, 0x18000A, 0x001904,
- 0x218086, 0x280007, 0x001810, 0x28043A,
- 0x280C02, 0x00000D, 0x000810, 0x28143A,
- 0x08808D, 0x000820, 0x0002FD, 0x018040,
- 0x200007, 0x00020D, 0x189904, 0x000007,
- 0x00402D, 0x0000BD, 0x0002FD, 0x018042,
- 0x08000A, 0x000904, 0x055A86, 0x000007,
- 0x000100, 0x000A20, 0x00047D, 0x018040,
- 0x018042, 0x20000A, 0x003015, 0x012144,
- 0x034986, 0x000007, 0x002104, 0x034986,
- 0x000007, 0x000F8D, 0x000810, 0x280C3A,
- 0x023944, 0x06C986, 0x000007, 0x001810,
- 0x28043A, 0x08810D, 0x000820, 0x0002FD,
- 0x018040, 0x200007, 0x002810, 0x78003A,
- 0x00688D, 0x000810, 0x08043A, 0x288A06,
- 0x000007, 0x00400D, 0x001015, 0x189904,
- 0x292904, 0x393904, 0x000007, 0x060206,
- 0x000007, 0x0004F5, 0x00007D, 0x000020,
- 0x00008D, 0x010860, 0x018040, 0x00047D,
- 0x038042, 0x21804A, 0x18000A, 0x021944,
- 0x215886, 0x000007, 0x004075, 0x71F104,
- 0x000007, 0x010042, 0x28000A, 0x002904,
- 0x212086, 0x000007, 0x003C0D, 0x30A904,
- 0x000007, 0x00077D, 0x018042, 0x08000A,
- 0x000904, 0x07DA86, 0x00057D, 0x002820,
- 0x03B060, 0x07F206, 0x018040, 0x003020,
- 0x03A860, 0x018040, 0x0002FD, 0x018042,
- 0x08000A, 0x000904, 0x07FA86, 0x000007,
- 0x00057D, 0x018042, 0x28040A, 0x000E8D,
- 0x000810, 0x280C3A, 0x00000D, 0x000810,
- 0x28143A, 0x09000D, 0x000820, 0x0002FD,
- 0x018040, 0x200007, 0x003DFD, 0x000020,
- 0x018040, 0x00107D, 0x008D8D, 0x000810,
- 0x08043A, 0x288A06, 0x000007, 0x000815,
- 0x08001A, 0x010984, 0x095186, 0x00137D,
- 0x200500, 0x280F20, 0x338F60, 0x3B8F60,
- 0x438F60, 0x4B8F60, 0x538F60, 0x5B8F60,
- 0x038A60, 0x018040, 0x007FBD, 0x383DC4,
- 0x000007, 0x001A7D, 0x001375, 0x018042,
- 0x09004A, 0x10000A, 0x0B8D04, 0x139504,
- 0x000007, 0x000820, 0x019060, 0x001104,
- 0x212086, 0x010040, 0x0017FD, 0x018042,
- 0x08000A, 0x000904, 0x212286, 0x000007,
- 0x00197D, 0x038042, 0x09804A, 0x10000A,
- 0x000924, 0x001664, 0x0011FD, 0x038042,
- 0x2B804A, 0x19804A, 0x00008D, 0x218944,
- 0x000007, 0x002244, 0x0AE186, 0x000007,
- 0x001A64, 0x002A24, 0x00197D, 0x080102,
- 0x100122, 0x000820, 0x039060, 0x018040,
- 0x003DFD, 0x00008D, 0x000820, 0x018040,
- 0x001375, 0x001A7D, 0x010042, 0x09804A,
- 0x10000A, 0x00021D, 0x0189E4, 0x2992E4,
- 0x309144, 0x000007, 0x00060D, 0x000A15,
- 0x000C1D, 0x001025, 0x00A9E4, 0x012BE4,
- 0x000464, 0x01B3E4, 0x0232E4, 0x000464,
- 0x000464, 0x000464, 0x000464, 0x00040D,
- 0x08B1C4, 0x000007, 0x000820, 0x000BF5,
- 0x030040, 0x00197D, 0x038042, 0x09804A,
- 0x000A24, 0x08000A, 0x080E64, 0x000007,
- 0x100122, 0x000820, 0x031060, 0x010040,
- 0x0064AC, 0x00027D, 0x000020, 0x018040,
- 0x00107D, 0x018042, 0x0011FD, 0x3B804A,
- 0x09804A, 0x20000A, 0x000095, 0x1A1144,
- 0x00A144, 0x0D2086, 0x00040D, 0x00B984,
- 0x0D2186, 0x0018FD, 0x018042, 0x0010FD,
- 0x09804A, 0x28000A, 0x000095, 0x010924,
- 0x002A64, 0x0D1186, 0x000007, 0x002904,
- 0x0D2286, 0x000007, 0x0D2A06, 0x080002,
- 0x00008D, 0x00387D, 0x000820, 0x018040,
- 0x00127D, 0x018042, 0x10000A, 0x003904,
- 0x0DD186, 0x00080D, 0x7FFFB5, 0x00B984,
- 0x0DA186, 0x000025, 0x0E7A06, 0x00002D,
- 0x000015, 0x00082D, 0x02C78D, 0x000820,
- 0x0EC206, 0x00000D, 0x7F8035, 0x00B984,
- 0x0E7186, 0x400025, 0x00008D, 0x110944,
- 0x000007, 0x00018D, 0x109504, 0x000007,
- 0x009164, 0x000424, 0x000424, 0x000424,
- 0x100102, 0x280002, 0x02C68D, 0x000820,
- 0x0EC206, 0x00018D, 0x00042D, 0x00008D,
- 0x109504, 0x000007, 0x00020D, 0x109184,
- 0x000007, 0x02C70D, 0x000820, 0x00008D,
- 0x0038FD, 0x018040, 0x003BFD, 0x001020,
- 0x03A860, 0x000815, 0x313184, 0x212184,
- 0x000007, 0x03B060, 0x03A060, 0x018040,
- 0x0022FD, 0x000095, 0x010924, 0x000424,
- 0x000424, 0x001264, 0x100102, 0x000820,
- 0x039060, 0x018040, 0x001924, 0x00FB8D,
- 0x00397D, 0x000820, 0x058040, 0x038042,
- 0x09844A, 0x000606, 0x08040A, 0x000424,
- 0x000424, 0x00117D, 0x018042, 0x08000A,
- 0x000A24, 0x280502, 0x280C02, 0x09800D,
- 0x000820, 0x0002FD, 0x018040, 0x200007,
- 0x0022FD, 0x018042, 0x08000A, 0x000095,
- 0x280DC4, 0x011924, 0x00197D, 0x018042,
- 0x0011FD, 0x09804A, 0x10000A, 0x0000B5,
- 0x113144, 0x0A8D04, 0x000007, 0x080A44,
- 0x129504, 0x000007, 0x0023FD, 0x001020,
- 0x038040, 0x101244, 0x000007, 0x000820,
- 0x039060, 0x018040, 0x0002FD, 0x018042,
- 0x08000A, 0x000904, 0x10FA86, 0x000007,
- 0x003BFD, 0x000100, 0x000A10, 0x0B807A,
- 0x13804A, 0x090984, 0x000007, 0x000095,
- 0x013D04, 0x118086, 0x10000A, 0x100002,
- 0x090984, 0x000007, 0x038042, 0x11804A,
- 0x090D04, 0x000007, 0x10000A, 0x090D84,
- 0x000007, 0x00257D, 0x000820, 0x018040,
- 0x00010D, 0x000810, 0x28143A, 0x00127D,
- 0x018042, 0x20000A, 0x00197D, 0x018042,
- 0x00117D, 0x31804A, 0x10000A, 0x003124,
- 0x01280D, 0x00397D, 0x000820, 0x058040,
- 0x038042, 0x09844A, 0x000606, 0x08040A,
- 0x300102, 0x003124, 0x000424, 0x000424,
- 0x001224, 0x280502, 0x001A4C, 0x130186,
- 0x700002, 0x00002D, 0x030000, 0x00387D,
- 0x018042, 0x10000A, 0x132A06, 0x002124,
- 0x0000AD, 0x100002, 0x00010D, 0x000924,
- 0x006B24, 0x01368D, 0x00397D, 0x000820,
- 0x058040, 0x038042, 0x09844A, 0x000606,
- 0x08040A, 0x003264, 0x00008D, 0x000A24,
- 0x001020, 0x00227D, 0x018040, 0x013C0D,
- 0x000810, 0x08043A, 0x29D206, 0x000007,
- 0x002820, 0x00207D, 0x018040, 0x00117D,
- 0x038042, 0x13804A, 0x33800A, 0x00387D,
- 0x018042, 0x08000A, 0x000904, 0x163A86,
- 0x000007, 0x00008D, 0x030964, 0x01478D,
- 0x00397D, 0x000820, 0x058040, 0x038042,
- 0x09844A, 0x000606, 0x08040A, 0x380102,
- 0x000424, 0x000424, 0x001224, 0x0002FD,
- 0x018042, 0x08000A, 0x000904, 0x14A286,
- 0x000007, 0x280502, 0x001A4C, 0x163986,
- 0x000007, 0x032164, 0x00632C, 0x003DFD,
- 0x018042, 0x08000A, 0x000095, 0x090904,
- 0x000007, 0x000820, 0x001A4C, 0x156186,
- 0x018040, 0x030000, 0x157A06, 0x002124,
- 0x00010D, 0x000924, 0x006B24, 0x015B8D,
- 0x00397D, 0x000820, 0x058040, 0x038042,
- 0x09844A, 0x000606, 0x08040A, 0x003A64,
- 0x000095, 0x001224, 0x0002FD, 0x018042,
- 0x08000A, 0x000904, 0x15DA86, 0x000007,
- 0x01628D, 0x000810, 0x08043A, 0x29D206,
- 0x000007, 0x14D206, 0x000007, 0x007020,
- 0x08010A, 0x10012A, 0x0020FD, 0x038860,
- 0x039060, 0x018040, 0x00227D, 0x018042,
- 0x003DFD, 0x08000A, 0x31844A, 0x000904,
- 0x16D886, 0x18008B, 0x00008D, 0x189904,
- 0x00312C, 0x17AA06, 0x000007, 0x00324C,
- 0x173386, 0x000007, 0x001904, 0x173086,
- 0x000007, 0x000095, 0x199144, 0x00222C,
- 0x003124, 0x00636C, 0x000E3D, 0x001375,
- 0x000BFD, 0x010042, 0x09804A, 0x10000A,
- 0x038AEC, 0x0393EC, 0x00224C, 0x17A986,
- 0x000007, 0x00008D, 0x189904, 0x00226C,
- 0x00322C, 0x30050A, 0x301DAB, 0x002083,
- 0x0018FD, 0x018042, 0x08000A, 0x018924,
- 0x300502, 0x001083, 0x001875, 0x010042,
- 0x10000A, 0x00008D, 0x010924, 0x001375,
- 0x330542, 0x330CCB, 0x332CCB, 0x3334CB,
- 0x333CCB, 0x3344CB, 0x334CCB, 0x3354CB,
- 0x305C8B, 0x006083, 0x0002F5, 0x010042,
- 0x08000A, 0x000904, 0x187A86, 0x000007,
- 0x001E2D, 0x0005FD, 0x018042, 0x08000A,
- 0x028924, 0x280502, 0x00060D, 0x000810,
- 0x280C3A, 0x00008D, 0x000810, 0x28143A,
- 0x0A808D, 0x000820, 0x0002F5, 0x010040,
- 0x220007, 0x001275, 0x030042, 0x21004A,
- 0x00008D, 0x1A0944, 0x000007, 0x01980D,
- 0x000810, 0x08043A, 0x2B2206, 0x000007,
- 0x0001F5, 0x030042, 0x0D004A, 0x10000A,
- 0x089144, 0x000007, 0x000820, 0x010040,
- 0x0025F5, 0x0A3144, 0x000007, 0x000820,
- 0x032860, 0x030040, 0x00217D, 0x038042,
- 0x0B804A, 0x10000A, 0x000820, 0x031060,
- 0x030040, 0x00008D, 0x000124, 0x00012C,
- 0x000E64, 0x001A64, 0x00636C, 0x08010A,
- 0x10012A, 0x000820, 0x031060, 0x030040,
- 0x0020FD, 0x018042, 0x08000A, 0x00227D,
- 0x018042, 0x10000A, 0x000820, 0x031060,
- 0x030040, 0x00197D, 0x018042, 0x08000A,
- 0x0022FD, 0x038042, 0x10000A, 0x000820,
- 0x031060, 0x030040, 0x090D04, 0x000007,
- 0x000820, 0x030040, 0x038042, 0x0B804A,
- 0x10000A, 0x000820, 0x031060, 0x030040,
- 0x038042, 0x13804A, 0x19804A, 0x110D04,
- 0x198D04, 0x000007, 0x08000A, 0x001020,
- 0x031860, 0x030860, 0x030040, 0x00008D,
- 0x0B0944, 0x000007, 0x000820, 0x010040,
- 0x0005F5, 0x030042, 0x08000A, 0x000820,
- 0x010040, 0x0000F5, 0x010042, 0x08000A,
- 0x000904, 0x1C6086, 0x001E75, 0x030042,
- 0x01044A, 0x000C0A, 0x1C7206, 0x000007,
- 0x000402, 0x000C02, 0x00177D, 0x001AF5,
- 0x018042, 0x03144A, 0x031C4A, 0x03244A,
- 0x032C4A, 0x03344A, 0x033C4A, 0x03444A,
- 0x004C0A, 0x00043D, 0x0013F5, 0x001AFD,
- 0x030042, 0x0B004A, 0x1B804A, 0x13804A,
- 0x20000A, 0x089144, 0x19A144, 0x0389E4,
- 0x0399EC, 0x005502, 0x005D0A, 0x030042,
- 0x0B004A, 0x1B804A, 0x13804A, 0x20000A,
- 0x089144, 0x19A144, 0x0389E4, 0x0399EC,
- 0x006502, 0x006D0A, 0x030042, 0x0B004A,
- 0x19004A, 0x2B804A, 0x13804A, 0x21804A,
- 0x30000A, 0x089144, 0x19A144, 0x2AB144,
- 0x0389E4, 0x0399EC, 0x007502, 0x007D0A,
- 0x03A9E4, 0x000702, 0x00107D, 0x000415,
- 0x018042, 0x08000A, 0x0109E4, 0x000F02,
- 0x002AF5, 0x0019FD, 0x010042, 0x09804A,
- 0x10000A, 0x000934, 0x001674, 0x0029F5,
- 0x010042, 0x10000A, 0x00917C, 0x002075,
- 0x010042, 0x08000A, 0x000904, 0x1ED286,
- 0x0026F5, 0x0027F5, 0x030042, 0x09004A,
- 0x10000A, 0x000A3C, 0x00167C, 0x001A75,
- 0x000BFD, 0x010042, 0x51804A, 0x48000A,
- 0x160007, 0x001075, 0x010042, 0x282C0A,
- 0x281D12, 0x282512, 0x001F32, 0x1E0007,
- 0x0E0007, 0x001975, 0x010042, 0x002DF5,
- 0x0D004A, 0x10000A, 0x009144, 0x1FB286,
- 0x010042, 0x28340A, 0x000E5D, 0x00008D,
- 0x000375, 0x000820, 0x010040, 0x05D2F4,
- 0x54D104, 0x00735C, 0x205386, 0x000007,
- 0x0C0007, 0x080007, 0x0A0007, 0x02040D,
- 0x000810, 0x08043A, 0x332206, 0x000007,
- 0x205A06, 0x000007, 0x080007, 0x002275,
- 0x010042, 0x20000A, 0x002104, 0x212086,
- 0x001E2D, 0x0002F5, 0x010042, 0x08000A,
- 0x000904, 0x209286, 0x000007, 0x002010,
- 0x30043A, 0x00057D, 0x0180C3, 0x08000A,
- 0x028924, 0x280502, 0x280C02, 0x0A810D,
- 0x000820, 0x0002F5, 0x010040, 0x220007,
- 0x0004FD, 0x018042, 0x70000A, 0x030000,
- 0x007020, 0x06FA06, 0x018040, 0x02180D,
- 0x000810, 0x08043A, 0x2B2206, 0x000007,
- 0x0002FD, 0x018042, 0x08000A, 0x000904,
- 0x218A86, 0x000007, 0x01F206, 0x000007,
- 0x000875, 0x0009FD, 0x00010D, 0x220A06,
- 0x000295, 0x000B75, 0x00097D, 0x00000D,
- 0x000515, 0x010042, 0x18000A, 0x001904,
- 0x287886, 0x0006F5, 0x001020, 0x010040,
- 0x0004F5, 0x000820, 0x010040, 0x000775,
- 0x010042, 0x09804A, 0x10000A, 0x001124,
- 0x000904, 0x22BA86, 0x000815, 0x080102,
- 0x101204, 0x22DA06, 0x000575, 0x081204,
- 0x000007, 0x100102, 0x000575, 0x000425,
- 0x021124, 0x100102, 0x000820, 0x031060,
- 0x010040, 0x001924, 0x287886, 0x00008D,
- 0x000464, 0x009D04, 0x278886, 0x180102,
- 0x000575, 0x010042, 0x28040A, 0x00018D,
- 0x000924, 0x280D02, 0x00000D, 0x000924,
- 0x281502, 0x10000D, 0x000820, 0x0002F5,
- 0x010040, 0x200007, 0x001175, 0x0002FD,
- 0x018042, 0x08000A, 0x000904, 0x23C286,
- 0x000007, 0x000100, 0x080B20, 0x130B60,
- 0x1B0B60, 0x030A60, 0x010040, 0x050042,
- 0x3D004A, 0x35004A, 0x2D004A, 0x20000A,
- 0x0006F5, 0x010042, 0x28140A, 0x0004F5,
- 0x010042, 0x08000A, 0x000315, 0x010D04,
- 0x24CA86, 0x004015, 0x000095, 0x010D04,
- 0x24B886, 0x100022, 0x10002A, 0x24E206,
- 0x000007, 0x333104, 0x2AA904, 0x000007,
- 0x032124, 0x280502, 0x001124, 0x000424,
- 0x000424, 0x003224, 0x00292C, 0x00636C,
- 0x25F386, 0x000007, 0x02B164, 0x000464,
- 0x000464, 0x00008D, 0x000A64, 0x280D02,
- 0x10008D, 0x000820, 0x0002F5, 0x010040,
- 0x220007, 0x00008D, 0x38B904, 0x000007,
- 0x03296C, 0x30010A, 0x0002F5, 0x010042,
- 0x08000A, 0x000904, 0x25BA86, 0x000007,
- 0x02312C, 0x28050A, 0x00008D, 0x01096C,
- 0x280D0A, 0x10010D, 0x000820, 0x0002F5,
- 0x010040, 0x220007, 0x001124, 0x000424,
- 0x000424, 0x003224, 0x300102, 0x032944,
- 0x267A86, 0x000007, 0x300002, 0x0004F5,
- 0x010042, 0x08000A, 0x000315, 0x010D04,
- 0x26C086, 0x003124, 0x000464, 0x300102,
- 0x0002F5, 0x010042, 0x08000A, 0x000904,
- 0x26CA86, 0x000007, 0x003124, 0x300502,
- 0x003924, 0x300583, 0x000883, 0x0005F5,
- 0x010042, 0x28040A, 0x00008D, 0x008124,
- 0x280D02, 0x00008D, 0x008124, 0x281502,
- 0x10018D, 0x000820, 0x0002F5, 0x010040,
- 0x220007, 0x001025, 0x000575, 0x030042,
- 0x09004A, 0x10000A, 0x0A0904, 0x121104,
- 0x000007, 0x001020, 0x050860, 0x050040,
- 0x0006FD, 0x018042, 0x09004A, 0x10000A,
- 0x0000A5, 0x0A0904, 0x121104, 0x000007,
- 0x000820, 0x019060, 0x010040, 0x0002F5,
- 0x010042, 0x08000A, 0x000904, 0x284286,
- 0x000007, 0x230A06, 0x000007, 0x000606,
- 0x000007, 0x0002F5, 0x010042, 0x08000A,
- 0x000904, 0x289286, 0x000007, 0x000100,
- 0x080B20, 0x138B60, 0x1B8B60, 0x238B60,
- 0x2B8B60, 0x338B60, 0x3B8B60, 0x438B60,
- 0x4B8B60, 0x538B60, 0x5B8B60, 0x638B60,
- 0x6B8B60, 0x738B60, 0x7B8B60, 0x038F60,
- 0x0B8F60, 0x138F60, 0x1B8F60, 0x238F60,
- 0x2B8F60, 0x338F60, 0x3B8F60, 0x438F60,
- 0x4B8F60, 0x538F60, 0x5B8F60, 0x638F60,
- 0x6B8F60, 0x738F60, 0x7B8F60, 0x038A60,
- 0x000606, 0x018040, 0x00008D, 0x000A64,
- 0x280D02, 0x000A24, 0x00027D, 0x018042,
- 0x10000A, 0x001224, 0x0003FD, 0x018042,
- 0x08000A, 0x000904, 0x2A8286, 0x000007,
- 0x00018D, 0x000A24, 0x000464, 0x000464,
- 0x080102, 0x000924, 0x000424, 0x000424,
- 0x100102, 0x02000D, 0x009144, 0x2AD986,
- 0x000007, 0x0001FD, 0x018042, 0x08000A,
- 0x000A44, 0x2ABB86, 0x018042, 0x0A000D,
- 0x000820, 0x0002FD, 0x018040, 0x200007,
- 0x00027D, 0x001020, 0x000606, 0x018040,
- 0x0002F5, 0x010042, 0x08000A, 0x000904,
- 0x2B2A86, 0x000007, 0x00037D, 0x018042,
- 0x08000A, 0x000904, 0x2B5A86, 0x000007,
- 0x000075, 0x002E7D, 0x010042, 0x0B804A,
- 0x000020, 0x000904, 0x000686, 0x010040,
- 0x31844A, 0x30048B, 0x000883, 0x00008D,
- 0x000810, 0x28143A, 0x00008D, 0x000810,
- 0x280C3A, 0x000675, 0x010042, 0x08000A,
- 0x003815, 0x010924, 0x280502, 0x0B000D,
- 0x000820, 0x0002F5, 0x010040, 0x000606,
- 0x220007, 0x000464, 0x000464, 0x000606,
- 0x000007, 0x000134, 0x007F8D, 0x00093C,
- 0x281D12, 0x282512, 0x001F32, 0x0E0007,
- 0x00010D, 0x00037D, 0x000820, 0x018040,
- 0x05D2F4, 0x000007, 0x080007, 0x00037D,
- 0x018042, 0x08000A, 0x000904, 0x2D0286,
- 0x000007, 0x000606, 0x000007, 0x000007,
- 0x000012, 0x100007, 0x320007, 0x600007,
- 0x100080, 0x48001A, 0x004904, 0x2D6186,
- 0x000007, 0x001210, 0x58003A, 0x000145,
- 0x5C5D04, 0x000007, 0x000080, 0x48001A,
- 0x004904, 0x2DB186, 0x000007, 0x001210,
- 0x50003A, 0x005904, 0x2E0886, 0x000045,
- 0x0000C5, 0x7FFFF5, 0x7FFF7D, 0x07D524,
- 0x004224, 0x500102, 0x200502, 0x000082,
- 0x40001A, 0x004104, 0x2E3986, 0x000007,
- 0x003865, 0x40001A, 0x004020, 0x00104D,
- 0x04C184, 0x301B86, 0x000040, 0x040007,
- 0x000165, 0x000145, 0x004020, 0x000040,
- 0x000765, 0x080080, 0x40001A, 0x004104,
- 0x2EC986, 0x000007, 0x001210, 0x40003A,
- 0x004104, 0x2F2286, 0x00004D, 0x0000CD,
- 0x004810, 0x20043A, 0x000882, 0x40001A,
- 0x004104, 0x2F3186, 0x000007, 0x004820,
- 0x005904, 0x300886, 0x000040, 0x0007E5,
- 0x200480, 0x2816A0, 0x3216E0, 0x3A16E0,
- 0x4216E0, 0x021260, 0x000040, 0x000032,
- 0x400075, 0x00007D, 0x07D574, 0x200512,
- 0x000082, 0x40001A, 0x004104, 0x2FE186,
- 0x000007, 0x037206, 0x640007, 0x060007,
- 0x0000E5, 0x000020, 0x000040, 0x000A65,
- 0x000020, 0x020040, 0x020040, 0x000040,
- 0x000165, 0x000042, 0x70000A, 0x007104,
- 0x30A286, 0x000007, 0x018206, 0x640007,
- 0x050000, 0x007020, 0x000040, 0x037206,
- 0x640007, 0x000007, 0x00306D, 0x028860,
- 0x029060, 0x08000A, 0x028860, 0x008040,
- 0x100012, 0x00100D, 0x009184, 0x314186,
- 0x000E0D, 0x009184, 0x325186, 0x000007,
- 0x300007, 0x001020, 0x003B6D, 0x008040,
- 0x000080, 0x08001A, 0x000904, 0x316186,
- 0x000007, 0x001220, 0x000DED, 0x008040,
- 0x008042, 0x10000A, 0x40000D, 0x109544,
- 0x000007, 0x001020, 0x000DED, 0x008040,
- 0x008042, 0x20040A, 0x000082, 0x08001A,
- 0x000904, 0x31F186, 0x000007, 0x003B6D,
- 0x008042, 0x08000A, 0x000E15, 0x010984,
- 0x329B86, 0x600007, 0x08001A, 0x000C15,
- 0x010984, 0x328386, 0x000020, 0x1A0007,
- 0x0002ED, 0x008040, 0x620007, 0x00306D,
- 0x028042, 0x0A804A, 0x000820, 0x0A804A,
- 0x000606, 0x10804A, 0x000007, 0x282512,
- 0x001F32, 0x05D2F4, 0x54D104, 0x00735C,
- 0x000786, 0x000007, 0x0C0007, 0x0A0007,
- 0x1C0007, 0x003465, 0x020040, 0x004820,
- 0x025060, 0x40000A, 0x024060, 0x000040,
- 0x454944, 0x000007, 0x004020, 0x003AE5,
- 0x000040, 0x0028E5, 0x000042, 0x48000A,
- 0x004904, 0x386886, 0x002C65, 0x000042,
- 0x40000A, 0x0000D5, 0x454104, 0x000007,
- 0x000655, 0x054504, 0x34F286, 0x0001D5,
- 0x054504, 0x34F086, 0x002B65, 0x000042,
- 0x003AE5, 0x50004A, 0x40000A, 0x45C3D4,
- 0x000007, 0x454504, 0x000007, 0x0000CD,
- 0x444944, 0x000007, 0x454504, 0x000007,
- 0x00014D, 0x554944, 0x000007, 0x045144,
- 0x34E986, 0x002C65, 0x000042, 0x48000A,
- 0x4CD104, 0x000007, 0x04C144, 0x34F386,
- 0x000007, 0x160007, 0x002CE5, 0x040042,
- 0x40000A, 0x004020, 0x000040, 0x002965,
- 0x000042, 0x40000A, 0x004104, 0x356086,
- 0x000007, 0x002402, 0x36A206, 0x005C02,
- 0x0025E5, 0x000042, 0x40000A, 0x004274,
- 0x002AE5, 0x000042, 0x40000A, 0x004274,
- 0x500112, 0x0029E5, 0x000042, 0x40000A,
- 0x004234, 0x454104, 0x000007, 0x004020,
- 0x000040, 0x003EE5, 0x000020, 0x000040,
- 0x002DE5, 0x400152, 0x50000A, 0x045144,
- 0x364A86, 0x0000C5, 0x003EE5, 0x004020,
- 0x000040, 0x002BE5, 0x000042, 0x40000A,
- 0x404254, 0x000007, 0x002AE5, 0x004020,
- 0x000040, 0x500132, 0x040134, 0x005674,
- 0x0029E5, 0x020042, 0x42000A, 0x000042,
- 0x50000A, 0x05417C, 0x0028E5, 0x000042,
- 0x48000A, 0x0000C5, 0x4CC144, 0x371086,
- 0x0026E5, 0x0027E5, 0x020042, 0x40004A,
- 0x50000A, 0x00423C, 0x00567C, 0x0028E5,
- 0x004820, 0x000040, 0x281D12, 0x282512,
- 0x001F72, 0x002965, 0x000042, 0x40000A,
- 0x004104, 0x37AA86, 0x0E0007, 0x160007,
- 0x1E0007, 0x003EE5, 0x000042, 0x40000A,
- 0x004104, 0x37E886, 0x002D65, 0x000042,
- 0x28340A, 0x003465, 0x020042, 0x42004A,
- 0x004020, 0x4A004A, 0x50004A, 0x05D2F4,
- 0x54D104, 0x00735C, 0x385186, 0x000007,
- 0x000606, 0x080007, 0x0C0007, 0x080007,
- 0x0A0007, 0x0001E5, 0x020045, 0x004020,
- 0x000060, 0x000365, 0x000040, 0x002E65,
- 0x001A20, 0x0A1A60, 0x000040, 0x003465,
- 0x020042, 0x42004A, 0x004020, 0x4A004A,
- 0x000606, 0x50004A, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000
-};
-
-// --------------------------------------------
-// DS-1E Controller InstructionRAM Code
-// 1999/06/21
-// Buf441 slot is Enabled.
-// --------------------------------------------
-// 04/09 creat
-// 04/12 stop nise fix
-// 06/21 WorkingOff timming
-static u32 CntrlInst1E[YDSXG_CTRLLENGTH / 4] = {
- 0x000007, 0x240007, 0x0C0007, 0x1C0007,
- 0x060007, 0x700002, 0x000020, 0x030040,
- 0x007104, 0x004286, 0x030040, 0x000F0D,
- 0x000810, 0x20043A, 0x000282, 0x00020D,
- 0x000810, 0x20043A, 0x001282, 0x200E82,
- 0x00800D, 0x000810, 0x20043A, 0x001A82,
- 0x03460D, 0x000810, 0x10043A, 0x02EC0D,
- 0x000810, 0x18043A, 0x00010D, 0x020015,
- 0x0000FD, 0x000020, 0x038860, 0x039060,
- 0x038060, 0x038040, 0x038040, 0x038040,
- 0x018040, 0x000A7D, 0x038040, 0x038040,
- 0x018040, 0x200402, 0x000882, 0x08001A,
- 0x000904, 0x017186, 0x000007, 0x260007,
- 0x400007, 0x000007, 0x03258D, 0x000810,
- 0x18043A, 0x260007, 0x284402, 0x00087D,
- 0x018042, 0x00160A, 0x05A206, 0x000007,
- 0x440007, 0x00230D, 0x000810, 0x08043A,
- 0x22FA06, 0x000007, 0x0007FD, 0x018042,
- 0x08000A, 0x000904, 0x02AB86, 0x000195,
- 0x090D04, 0x000007, 0x000820, 0x0000F5,
- 0x000B7D, 0x01F060, 0x0000FD, 0x033A06,
- 0x018040, 0x000A7D, 0x038042, 0x13804A,
- 0x18000A, 0x001820, 0x059060, 0x058860,
- 0x018040, 0x0000FD, 0x018042, 0x70000A,
- 0x000115, 0x071144, 0x033B86, 0x030000,
- 0x007020, 0x036206, 0x018040, 0x00360D,
- 0x000810, 0x08043A, 0x232206, 0x000007,
- 0x02EC0D, 0x000810, 0x18043A, 0x019A06,
- 0x000007, 0x240007, 0x000F8D, 0x000810,
- 0x00163A, 0x002402, 0x005C02, 0x0028FD,
- 0x000020, 0x018040, 0x08000D, 0x000815,
- 0x510984, 0x000007, 0x00004D, 0x000E5D,
- 0x000E02, 0x00430D, 0x000810, 0x08043A,
- 0x2E1206, 0x000007, 0x00008D, 0x000924,
- 0x000F02, 0x00470D, 0x000810, 0x08043A,
- 0x2E1206, 0x000007, 0x480480, 0x001210,
- 0x28043A, 0x00778D, 0x000810, 0x280C3A,
- 0x00068D, 0x000810, 0x28143A, 0x284402,
- 0x03258D, 0x000810, 0x18043A, 0x07FF8D,
- 0x000820, 0x0002FD, 0x018040, 0x260007,
- 0x200007, 0x0002FD, 0x018042, 0x08000A,
- 0x000904, 0x051286, 0x000007, 0x240007,
- 0x02EC0D, 0x000810, 0x18043A, 0x00387D,
- 0x018042, 0x08000A, 0x001015, 0x010984,
- 0x019B86, 0x000007, 0x01B206, 0x000007,
- 0x0008FD, 0x018042, 0x18000A, 0x001904,
- 0x22B886, 0x280007, 0x001810, 0x28043A,
- 0x280C02, 0x00000D, 0x000810, 0x28143A,
- 0x08808D, 0x000820, 0x0002FD, 0x018040,
- 0x200007, 0x00020D, 0x189904, 0x000007,
- 0x00402D, 0x0000BD, 0x0002FD, 0x018042,
- 0x08000A, 0x000904, 0x065A86, 0x000007,
- 0x000100, 0x000A20, 0x00047D, 0x018040,
- 0x018042, 0x20000A, 0x003015, 0x012144,
- 0x036186, 0x000007, 0x002104, 0x036186,
- 0x000007, 0x000F8D, 0x000810, 0x280C3A,
- 0x023944, 0x07C986, 0x000007, 0x001810,
- 0x28043A, 0x08810D, 0x000820, 0x0002FD,
- 0x018040, 0x200007, 0x002810, 0x78003A,
- 0x00788D, 0x000810, 0x08043A, 0x2A1206,
- 0x000007, 0x00400D, 0x001015, 0x189904,
- 0x292904, 0x393904, 0x000007, 0x070206,
- 0x000007, 0x0004F5, 0x00007D, 0x000020,
- 0x00008D, 0x010860, 0x018040, 0x00047D,
- 0x038042, 0x21804A, 0x18000A, 0x021944,
- 0x229086, 0x000007, 0x004075, 0x71F104,
- 0x000007, 0x010042, 0x28000A, 0x002904,
- 0x225886, 0x000007, 0x003C0D, 0x30A904,
- 0x000007, 0x00077D, 0x018042, 0x08000A,
- 0x000904, 0x08DA86, 0x00057D, 0x002820,
- 0x03B060, 0x08F206, 0x018040, 0x003020,
- 0x03A860, 0x018040, 0x0002FD, 0x018042,
- 0x08000A, 0x000904, 0x08FA86, 0x000007,
- 0x00057D, 0x018042, 0x28040A, 0x000E8D,
- 0x000810, 0x280C3A, 0x00000D, 0x000810,
- 0x28143A, 0x09000D, 0x000820, 0x0002FD,
- 0x018040, 0x200007, 0x003DFD, 0x000020,
- 0x018040, 0x00107D, 0x009D8D, 0x000810,
- 0x08043A, 0x2A1206, 0x000007, 0x000815,
- 0x08001A, 0x010984, 0x0A5186, 0x00137D,
- 0x200500, 0x280F20, 0x338F60, 0x3B8F60,
- 0x438F60, 0x4B8F60, 0x538F60, 0x5B8F60,
- 0x038A60, 0x018040, 0x00107D, 0x018042,
- 0x08000A, 0x000215, 0x010984, 0x3A8186,
- 0x000007, 0x007FBD, 0x383DC4, 0x000007,
- 0x001A7D, 0x001375, 0x018042, 0x09004A,
- 0x10000A, 0x0B8D04, 0x139504, 0x000007,
- 0x000820, 0x019060, 0x001104, 0x225886,
- 0x010040, 0x0017FD, 0x018042, 0x08000A,
- 0x000904, 0x225A86, 0x000007, 0x00197D,
- 0x038042, 0x09804A, 0x10000A, 0x000924,
- 0x001664, 0x0011FD, 0x038042, 0x2B804A,
- 0x19804A, 0x00008D, 0x218944, 0x000007,
- 0x002244, 0x0C1986, 0x000007, 0x001A64,
- 0x002A24, 0x00197D, 0x080102, 0x100122,
- 0x000820, 0x039060, 0x018040, 0x003DFD,
- 0x00008D, 0x000820, 0x018040, 0x001375,
- 0x001A7D, 0x010042, 0x09804A, 0x10000A,
- 0x00021D, 0x0189E4, 0x2992E4, 0x309144,
- 0x000007, 0x00060D, 0x000A15, 0x000C1D,
- 0x001025, 0x00A9E4, 0x012BE4, 0x000464,
- 0x01B3E4, 0x0232E4, 0x000464, 0x000464,
- 0x000464, 0x000464, 0x00040D, 0x08B1C4,
- 0x000007, 0x000820, 0x000BF5, 0x030040,
- 0x00197D, 0x038042, 0x09804A, 0x000A24,
- 0x08000A, 0x080E64, 0x000007, 0x100122,
- 0x000820, 0x031060, 0x010040, 0x0064AC,
- 0x00027D, 0x000020, 0x018040, 0x00107D,
- 0x018042, 0x0011FD, 0x3B804A, 0x09804A,
- 0x20000A, 0x000095, 0x1A1144, 0x00A144,
- 0x0E5886, 0x00040D, 0x00B984, 0x0E5986,
- 0x0018FD, 0x018042, 0x0010FD, 0x09804A,
- 0x28000A, 0x000095, 0x010924, 0x002A64,
- 0x0E4986, 0x000007, 0x002904, 0x0E5A86,
- 0x000007, 0x0E6206, 0x080002, 0x00008D,
- 0x00387D, 0x000820, 0x018040, 0x00127D,
- 0x018042, 0x10000A, 0x003904, 0x0F0986,
- 0x00080D, 0x7FFFB5, 0x00B984, 0x0ED986,
- 0x000025, 0x0FB206, 0x00002D, 0x000015,
- 0x00082D, 0x02E00D, 0x000820, 0x0FFA06,
- 0x00000D, 0x7F8035, 0x00B984, 0x0FA986,
- 0x400025, 0x00008D, 0x110944, 0x000007,
- 0x00018D, 0x109504, 0x000007, 0x009164,
- 0x000424, 0x000424, 0x000424, 0x100102,
- 0x280002, 0x02DF0D, 0x000820, 0x0FFA06,
- 0x00018D, 0x00042D, 0x00008D, 0x109504,
- 0x000007, 0x00020D, 0x109184, 0x000007,
- 0x02DF8D, 0x000820, 0x00008D, 0x0038FD,
- 0x018040, 0x003BFD, 0x001020, 0x03A860,
- 0x000815, 0x313184, 0x212184, 0x000007,
- 0x03B060, 0x03A060, 0x018040, 0x0022FD,
- 0x000095, 0x010924, 0x000424, 0x000424,
- 0x001264, 0x100102, 0x000820, 0x039060,
- 0x018040, 0x001924, 0x010F0D, 0x00397D,
- 0x000820, 0x058040, 0x038042, 0x09844A,
- 0x000606, 0x08040A, 0x000424, 0x000424,
- 0x00117D, 0x018042, 0x08000A, 0x000A24,
- 0x280502, 0x280C02, 0x09800D, 0x000820,
- 0x0002FD, 0x018040, 0x200007, 0x0022FD,
- 0x018042, 0x08000A, 0x000095, 0x280DC4,
- 0x011924, 0x00197D, 0x018042, 0x0011FD,
- 0x09804A, 0x10000A, 0x0000B5, 0x113144,
- 0x0A8D04, 0x000007, 0x080A44, 0x129504,
- 0x000007, 0x0023FD, 0x001020, 0x038040,
- 0x101244, 0x000007, 0x000820, 0x039060,
- 0x018040, 0x0002FD, 0x018042, 0x08000A,
- 0x000904, 0x123286, 0x000007, 0x003BFD,
- 0x000100, 0x000A10, 0x0B807A, 0x13804A,
- 0x090984, 0x000007, 0x000095, 0x013D04,
- 0x12B886, 0x10000A, 0x100002, 0x090984,
- 0x000007, 0x038042, 0x11804A, 0x090D04,
- 0x000007, 0x10000A, 0x090D84, 0x000007,
- 0x00257D, 0x000820, 0x018040, 0x00010D,
- 0x000810, 0x28143A, 0x00127D, 0x018042,
- 0x20000A, 0x00197D, 0x018042, 0x00117D,
- 0x31804A, 0x10000A, 0x003124, 0x013B8D,
- 0x00397D, 0x000820, 0x058040, 0x038042,
- 0x09844A, 0x000606, 0x08040A, 0x300102,
- 0x003124, 0x000424, 0x000424, 0x001224,
- 0x280502, 0x001A4C, 0x143986, 0x700002,
- 0x00002D, 0x030000, 0x00387D, 0x018042,
- 0x10000A, 0x146206, 0x002124, 0x0000AD,
- 0x100002, 0x00010D, 0x000924, 0x006B24,
- 0x014A0D, 0x00397D, 0x000820, 0x058040,
- 0x038042, 0x09844A, 0x000606, 0x08040A,
- 0x003264, 0x00008D, 0x000A24, 0x001020,
- 0x00227D, 0x018040, 0x014F8D, 0x000810,
- 0x08043A, 0x2B5A06, 0x000007, 0x002820,
- 0x00207D, 0x018040, 0x00117D, 0x038042,
- 0x13804A, 0x33800A, 0x00387D, 0x018042,
- 0x08000A, 0x000904, 0x177286, 0x000007,
- 0x00008D, 0x030964, 0x015B0D, 0x00397D,
- 0x000820, 0x058040, 0x038042, 0x09844A,
- 0x000606, 0x08040A, 0x380102, 0x000424,
- 0x000424, 0x001224, 0x0002FD, 0x018042,
- 0x08000A, 0x000904, 0x15DA86, 0x000007,
- 0x280502, 0x001A4C, 0x177186, 0x000007,
- 0x032164, 0x00632C, 0x003DFD, 0x018042,
- 0x08000A, 0x000095, 0x090904, 0x000007,
- 0x000820, 0x001A4C, 0x169986, 0x018040,
- 0x030000, 0x16B206, 0x002124, 0x00010D,
- 0x000924, 0x006B24, 0x016F0D, 0x00397D,
- 0x000820, 0x058040, 0x038042, 0x09844A,
- 0x000606, 0x08040A, 0x003A64, 0x000095,
- 0x001224, 0x0002FD, 0x018042, 0x08000A,
- 0x000904, 0x171286, 0x000007, 0x01760D,
- 0x000810, 0x08043A, 0x2B5A06, 0x000007,
- 0x160A06, 0x000007, 0x007020, 0x08010A,
- 0x10012A, 0x0020FD, 0x038860, 0x039060,
- 0x018040, 0x00227D, 0x018042, 0x003DFD,
- 0x08000A, 0x31844A, 0x000904, 0x181086,
- 0x18008B, 0x00008D, 0x189904, 0x00312C,
- 0x18E206, 0x000007, 0x00324C, 0x186B86,
- 0x000007, 0x001904, 0x186886, 0x000007,
- 0x000095, 0x199144, 0x00222C, 0x003124,
- 0x00636C, 0x000E3D, 0x001375, 0x000BFD,
- 0x010042, 0x09804A, 0x10000A, 0x038AEC,
- 0x0393EC, 0x00224C, 0x18E186, 0x000007,
- 0x00008D, 0x189904, 0x00226C, 0x00322C,
- 0x30050A, 0x301DAB, 0x002083, 0x0018FD,
- 0x018042, 0x08000A, 0x018924, 0x300502,
- 0x001083, 0x001875, 0x010042, 0x10000A,
- 0x00008D, 0x010924, 0x001375, 0x330542,
- 0x330CCB, 0x332CCB, 0x3334CB, 0x333CCB,
- 0x3344CB, 0x334CCB, 0x3354CB, 0x305C8B,
- 0x006083, 0x0002F5, 0x010042, 0x08000A,
- 0x000904, 0x19B286, 0x000007, 0x001E2D,
- 0x0005FD, 0x018042, 0x08000A, 0x028924,
- 0x280502, 0x00060D, 0x000810, 0x280C3A,
- 0x00008D, 0x000810, 0x28143A, 0x0A808D,
- 0x000820, 0x0002F5, 0x010040, 0x220007,
- 0x001275, 0x030042, 0x21004A, 0x00008D,
- 0x1A0944, 0x000007, 0x01AB8D, 0x000810,
- 0x08043A, 0x2CAA06, 0x000007, 0x0001F5,
- 0x030042, 0x0D004A, 0x10000A, 0x089144,
- 0x000007, 0x000820, 0x010040, 0x0025F5,
- 0x0A3144, 0x000007, 0x000820, 0x032860,
- 0x030040, 0x00217D, 0x038042, 0x0B804A,
- 0x10000A, 0x000820, 0x031060, 0x030040,
- 0x00008D, 0x000124, 0x00012C, 0x000E64,
- 0x001A64, 0x00636C, 0x08010A, 0x10012A,
- 0x000820, 0x031060, 0x030040, 0x0020FD,
- 0x018042, 0x08000A, 0x00227D, 0x018042,
- 0x10000A, 0x000820, 0x031060, 0x030040,
- 0x00197D, 0x018042, 0x08000A, 0x0022FD,
- 0x038042, 0x10000A, 0x000820, 0x031060,
- 0x030040, 0x090D04, 0x000007, 0x000820,
- 0x030040, 0x038042, 0x0B804A, 0x10000A,
- 0x000820, 0x031060, 0x030040, 0x038042,
- 0x13804A, 0x19804A, 0x110D04, 0x198D04,
- 0x000007, 0x08000A, 0x001020, 0x031860,
- 0x030860, 0x030040, 0x00008D, 0x0B0944,
- 0x000007, 0x000820, 0x010040, 0x0005F5,
- 0x030042, 0x08000A, 0x000820, 0x010040,
- 0x0000F5, 0x010042, 0x08000A, 0x000904,
- 0x1D9886, 0x001E75, 0x030042, 0x01044A,
- 0x000C0A, 0x1DAA06, 0x000007, 0x000402,
- 0x000C02, 0x00177D, 0x001AF5, 0x018042,
- 0x03144A, 0x031C4A, 0x03244A, 0x032C4A,
- 0x03344A, 0x033C4A, 0x03444A, 0x004C0A,
- 0x00043D, 0x0013F5, 0x001AFD, 0x030042,
- 0x0B004A, 0x1B804A, 0x13804A, 0x20000A,
- 0x089144, 0x19A144, 0x0389E4, 0x0399EC,
- 0x005502, 0x005D0A, 0x030042, 0x0B004A,
- 0x1B804A, 0x13804A, 0x20000A, 0x089144,
- 0x19A144, 0x0389E4, 0x0399EC, 0x006502,
- 0x006D0A, 0x030042, 0x0B004A, 0x19004A,
- 0x2B804A, 0x13804A, 0x21804A, 0x30000A,
- 0x089144, 0x19A144, 0x2AB144, 0x0389E4,
- 0x0399EC, 0x007502, 0x007D0A, 0x03A9E4,
- 0x000702, 0x00107D, 0x000415, 0x018042,
- 0x08000A, 0x0109E4, 0x000F02, 0x002AF5,
- 0x0019FD, 0x010042, 0x09804A, 0x10000A,
- 0x000934, 0x001674, 0x0029F5, 0x010042,
- 0x10000A, 0x00917C, 0x002075, 0x010042,
- 0x08000A, 0x000904, 0x200A86, 0x0026F5,
- 0x0027F5, 0x030042, 0x09004A, 0x10000A,
- 0x000A3C, 0x00167C, 0x001A75, 0x000BFD,
- 0x010042, 0x51804A, 0x48000A, 0x160007,
- 0x001075, 0x010042, 0x282C0A, 0x281D12,
- 0x282512, 0x001F32, 0x1E0007, 0x0E0007,
- 0x001975, 0x010042, 0x002DF5, 0x0D004A,
- 0x10000A, 0x009144, 0x20EA86, 0x010042,
- 0x28340A, 0x000E5D, 0x00008D, 0x000375,
- 0x000820, 0x010040, 0x05D2F4, 0x54D104,
- 0x00735C, 0x218B86, 0x000007, 0x0C0007,
- 0x080007, 0x0A0007, 0x02178D, 0x000810,
- 0x08043A, 0x34B206, 0x000007, 0x219206,
- 0x000007, 0x080007, 0x002275, 0x010042,
- 0x20000A, 0x002104, 0x225886, 0x001E2D,
- 0x0002F5, 0x010042, 0x08000A, 0x000904,
- 0x21CA86, 0x000007, 0x002010, 0x30043A,
- 0x00057D, 0x0180C3, 0x08000A, 0x028924,
- 0x280502, 0x280C02, 0x0A810D, 0x000820,
- 0x0002F5, 0x010040, 0x220007, 0x0004FD,
- 0x018042, 0x70000A, 0x030000, 0x007020,
- 0x07FA06, 0x018040, 0x022B8D, 0x000810,
- 0x08043A, 0x2CAA06, 0x000007, 0x0002FD,
- 0x018042, 0x08000A, 0x000904, 0x22C286,
- 0x000007, 0x020206, 0x000007, 0x000875,
- 0x0009FD, 0x00010D, 0x234206, 0x000295,
- 0x000B75, 0x00097D, 0x00000D, 0x000515,
- 0x010042, 0x18000A, 0x001904, 0x2A0086,
- 0x0006F5, 0x001020, 0x010040, 0x0004F5,
- 0x000820, 0x010040, 0x000775, 0x010042,
- 0x09804A, 0x10000A, 0x001124, 0x000904,
- 0x23F286, 0x000815, 0x080102, 0x101204,
- 0x241206, 0x000575, 0x081204, 0x000007,
- 0x100102, 0x000575, 0x000425, 0x021124,
- 0x100102, 0x000820, 0x031060, 0x010040,
- 0x001924, 0x2A0086, 0x00008D, 0x000464,
- 0x009D04, 0x291086, 0x180102, 0x000575,
- 0x010042, 0x28040A, 0x00018D, 0x000924,
- 0x280D02, 0x00000D, 0x000924, 0x281502,
- 0x10000D, 0x000820, 0x0002F5, 0x010040,
- 0x200007, 0x001175, 0x0002FD, 0x018042,
- 0x08000A, 0x000904, 0x24FA86, 0x000007,
- 0x000100, 0x080B20, 0x130B60, 0x1B0B60,
- 0x030A60, 0x010040, 0x050042, 0x3D004A,
- 0x35004A, 0x2D004A, 0x20000A, 0x0006F5,
- 0x010042, 0x28140A, 0x0004F5, 0x010042,
- 0x08000A, 0x000315, 0x010D04, 0x260286,
- 0x004015, 0x000095, 0x010D04, 0x25F086,
- 0x100022, 0x10002A, 0x261A06, 0x000007,
- 0x333104, 0x2AA904, 0x000007, 0x032124,
- 0x280502, 0x284402, 0x001124, 0x400102,
- 0x000424, 0x000424, 0x003224, 0x00292C,
- 0x00636C, 0x277386, 0x000007, 0x02B164,
- 0x000464, 0x000464, 0x00008D, 0x000A64,
- 0x280D02, 0x10008D, 0x000820, 0x0002F5,
- 0x010040, 0x220007, 0x00008D, 0x38B904,
- 0x000007, 0x03296C, 0x30010A, 0x0002F5,
- 0x010042, 0x08000A, 0x000904, 0x270286,
- 0x000007, 0x00212C, 0x28050A, 0x00316C,
- 0x00046C, 0x00046C, 0x28450A, 0x001124,
- 0x006B64, 0x100102, 0x00008D, 0x01096C,
- 0x280D0A, 0x10010D, 0x000820, 0x0002F5,
- 0x010040, 0x220007, 0x004124, 0x000424,
- 0x000424, 0x003224, 0x300102, 0x032944,
- 0x27FA86, 0x000007, 0x300002, 0x0004F5,
- 0x010042, 0x08000A, 0x000315, 0x010D04,
- 0x284086, 0x003124, 0x000464, 0x300102,
- 0x0002F5, 0x010042, 0x08000A, 0x000904,
- 0x284A86, 0x000007, 0x284402, 0x003124,
- 0x300502, 0x003924, 0x300583, 0x000883,
- 0x0005F5, 0x010042, 0x28040A, 0x00008D,
- 0x008124, 0x280D02, 0x00008D, 0x008124,
- 0x281502, 0x10018D, 0x000820, 0x0002F5,
- 0x010040, 0x220007, 0x001025, 0x000575,
- 0x030042, 0x09004A, 0x10000A, 0x0A0904,
- 0x121104, 0x000007, 0x001020, 0x050860,
- 0x050040, 0x0006FD, 0x018042, 0x09004A,
- 0x10000A, 0x0000A5, 0x0A0904, 0x121104,
- 0x000007, 0x000820, 0x019060, 0x010040,
- 0x0002F5, 0x010042, 0x08000A, 0x000904,
- 0x29CA86, 0x000007, 0x244206, 0x000007,
- 0x000606, 0x000007, 0x0002F5, 0x010042,
- 0x08000A, 0x000904, 0x2A1A86, 0x000007,
- 0x000100, 0x080B20, 0x138B60, 0x1B8B60,
- 0x238B60, 0x2B8B60, 0x338B60, 0x3B8B60,
- 0x438B60, 0x4B8B60, 0x538B60, 0x5B8B60,
- 0x638B60, 0x6B8B60, 0x738B60, 0x7B8B60,
- 0x038F60, 0x0B8F60, 0x138F60, 0x1B8F60,
- 0x238F60, 0x2B8F60, 0x338F60, 0x3B8F60,
- 0x438F60, 0x4B8F60, 0x538F60, 0x5B8F60,
- 0x638F60, 0x6B8F60, 0x738F60, 0x7B8F60,
- 0x038A60, 0x000606, 0x018040, 0x00008D,
- 0x000A64, 0x280D02, 0x000A24, 0x00027D,
- 0x018042, 0x10000A, 0x001224, 0x0003FD,
- 0x018042, 0x08000A, 0x000904, 0x2C0A86,
- 0x000007, 0x00018D, 0x000A24, 0x000464,
- 0x000464, 0x080102, 0x000924, 0x000424,
- 0x000424, 0x100102, 0x02000D, 0x009144,
- 0x2C6186, 0x000007, 0x0001FD, 0x018042,
- 0x08000A, 0x000A44, 0x2C4386, 0x018042,
- 0x0A000D, 0x000820, 0x0002FD, 0x018040,
- 0x200007, 0x00027D, 0x001020, 0x000606,
- 0x018040, 0x0002F5, 0x010042, 0x08000A,
- 0x000904, 0x2CB286, 0x000007, 0x00037D,
- 0x018042, 0x08000A, 0x000904, 0x2CE286,
- 0x000007, 0x000075, 0x002E7D, 0x010042,
- 0x0B804A, 0x000020, 0x000904, 0x000686,
- 0x010040, 0x31844A, 0x30048B, 0x000883,
- 0x00008D, 0x000810, 0x28143A, 0x00008D,
- 0x000810, 0x280C3A, 0x000675, 0x010042,
- 0x08000A, 0x003815, 0x010924, 0x280502,
- 0x0B000D, 0x000820, 0x0002F5, 0x010040,
- 0x000606, 0x220007, 0x000464, 0x000464,
- 0x000606, 0x000007, 0x000134, 0x007F8D,
- 0x00093C, 0x281D12, 0x282512, 0x001F32,
- 0x0E0007, 0x00010D, 0x00037D, 0x000820,
- 0x018040, 0x05D2F4, 0x000007, 0x080007,
- 0x00037D, 0x018042, 0x08000A, 0x000904,
- 0x2E8A86, 0x000007, 0x000606, 0x000007,
- 0x000007, 0x000012, 0x100007, 0x320007,
- 0x600007, 0x460007, 0x100080, 0x48001A,
- 0x004904, 0x2EF186, 0x000007, 0x001210,
- 0x58003A, 0x000145, 0x5C5D04, 0x000007,
- 0x000080, 0x48001A, 0x004904, 0x2F4186,
- 0x000007, 0x001210, 0x50003A, 0x005904,
- 0x2F9886, 0x000045, 0x0000C5, 0x7FFFF5,
- 0x7FFF7D, 0x07D524, 0x004224, 0x500102,
- 0x200502, 0x000082, 0x40001A, 0x004104,
- 0x2FC986, 0x000007, 0x003865, 0x40001A,
- 0x004020, 0x00104D, 0x04C184, 0x31AB86,
- 0x000040, 0x040007, 0x000165, 0x000145,
- 0x004020, 0x000040, 0x000765, 0x080080,
- 0x40001A, 0x004104, 0x305986, 0x000007,
- 0x001210, 0x40003A, 0x004104, 0x30B286,
- 0x00004D, 0x0000CD, 0x004810, 0x20043A,
- 0x000882, 0x40001A, 0x004104, 0x30C186,
- 0x000007, 0x004820, 0x005904, 0x319886,
- 0x000040, 0x0007E5, 0x200480, 0x2816A0,
- 0x3216E0, 0x3A16E0, 0x4216E0, 0x021260,
- 0x000040, 0x000032, 0x400075, 0x00007D,
- 0x07D574, 0x200512, 0x000082, 0x40001A,
- 0x004104, 0x317186, 0x000007, 0x038A06,
- 0x640007, 0x0000E5, 0x000020, 0x000040,
- 0x000A65, 0x000020, 0x020040, 0x020040,
- 0x000040, 0x000165, 0x000042, 0x70000A,
- 0x007104, 0x323286, 0x000007, 0x060007,
- 0x019A06, 0x640007, 0x050000, 0x007020,
- 0x000040, 0x038A06, 0x640007, 0x000007,
- 0x00306D, 0x028860, 0x029060, 0x08000A,
- 0x028860, 0x008040, 0x100012, 0x00100D,
- 0x009184, 0x32D186, 0x000E0D, 0x009184,
- 0x33E186, 0x000007, 0x300007, 0x001020,
- 0x003B6D, 0x008040, 0x000080, 0x08001A,
- 0x000904, 0x32F186, 0x000007, 0x001220,
- 0x000DED, 0x008040, 0x008042, 0x10000A,
- 0x40000D, 0x109544, 0x000007, 0x001020,
- 0x000DED, 0x008040, 0x008042, 0x20040A,
- 0x000082, 0x08001A, 0x000904, 0x338186,
- 0x000007, 0x003B6D, 0x008042, 0x08000A,
- 0x000E15, 0x010984, 0x342B86, 0x600007,
- 0x08001A, 0x000C15, 0x010984, 0x341386,
- 0x000020, 0x1A0007, 0x0002ED, 0x008040,
- 0x620007, 0x00306D, 0x028042, 0x0A804A,
- 0x000820, 0x0A804A, 0x000606, 0x10804A,
- 0x000007, 0x282512, 0x001F32, 0x05D2F4,
- 0x54D104, 0x00735C, 0x000786, 0x000007,
- 0x0C0007, 0x0A0007, 0x1C0007, 0x003465,
- 0x020040, 0x004820, 0x025060, 0x40000A,
- 0x024060, 0x000040, 0x454944, 0x000007,
- 0x004020, 0x003AE5, 0x000040, 0x0028E5,
- 0x000042, 0x48000A, 0x004904, 0x39F886,
- 0x002C65, 0x000042, 0x40000A, 0x0000D5,
- 0x454104, 0x000007, 0x000655, 0x054504,
- 0x368286, 0x0001D5, 0x054504, 0x368086,
- 0x002B65, 0x000042, 0x003AE5, 0x50004A,
- 0x40000A, 0x45C3D4, 0x000007, 0x454504,
- 0x000007, 0x0000CD, 0x444944, 0x000007,
- 0x454504, 0x000007, 0x00014D, 0x554944,
- 0x000007, 0x045144, 0x367986, 0x002C65,
- 0x000042, 0x48000A, 0x4CD104, 0x000007,
- 0x04C144, 0x368386, 0x000007, 0x160007,
- 0x002CE5, 0x040042, 0x40000A, 0x004020,
- 0x000040, 0x002965, 0x000042, 0x40000A,
- 0x004104, 0x36F086, 0x000007, 0x002402,
- 0x383206, 0x005C02, 0x0025E5, 0x000042,
- 0x40000A, 0x004274, 0x002AE5, 0x000042,
- 0x40000A, 0x004274, 0x500112, 0x0029E5,
- 0x000042, 0x40000A, 0x004234, 0x454104,
- 0x000007, 0x004020, 0x000040, 0x003EE5,
- 0x000020, 0x000040, 0x002DE5, 0x400152,
- 0x50000A, 0x045144, 0x37DA86, 0x0000C5,
- 0x003EE5, 0x004020, 0x000040, 0x002BE5,
- 0x000042, 0x40000A, 0x404254, 0x000007,
- 0x002AE5, 0x004020, 0x000040, 0x500132,
- 0x040134, 0x005674, 0x0029E5, 0x020042,
- 0x42000A, 0x000042, 0x50000A, 0x05417C,
- 0x0028E5, 0x000042, 0x48000A, 0x0000C5,
- 0x4CC144, 0x38A086, 0x0026E5, 0x0027E5,
- 0x020042, 0x40004A, 0x50000A, 0x00423C,
- 0x00567C, 0x0028E5, 0x004820, 0x000040,
- 0x281D12, 0x282512, 0x001F72, 0x002965,
- 0x000042, 0x40000A, 0x004104, 0x393A86,
- 0x0E0007, 0x160007, 0x1E0007, 0x003EE5,
- 0x000042, 0x40000A, 0x004104, 0x397886,
- 0x002D65, 0x000042, 0x28340A, 0x003465,
- 0x020042, 0x42004A, 0x004020, 0x4A004A,
- 0x50004A, 0x05D2F4, 0x54D104, 0x00735C,
- 0x39E186, 0x000007, 0x000606, 0x080007,
- 0x0C0007, 0x080007, 0x0A0007, 0x0001E5,
- 0x020045, 0x004020, 0x000060, 0x000365,
- 0x000040, 0x002E65, 0x001A20, 0x0A1A60,
- 0x000040, 0x003465, 0x020042, 0x42004A,
- 0x004020, 0x4A004A, 0x000606, 0x50004A,
- 0x0017FD, 0x018042, 0x08000A, 0x000904,
- 0x225A86, 0x000007, 0x00107D, 0x018042,
- 0x0011FD, 0x33804A, 0x19804A, 0x20000A,
- 0x000095, 0x2A1144, 0x01A144, 0x3B9086,
- 0x00040D, 0x00B184, 0x3B9186, 0x0018FD,
- 0x018042, 0x0010FD, 0x09804A, 0x38000A,
- 0x000095, 0x010924, 0x003A64, 0x3B8186,
- 0x000007, 0x003904, 0x3B9286, 0x000007,
- 0x3B9A06, 0x00000D, 0x00008D, 0x000820,
- 0x00387D, 0x018040, 0x700002, 0x00117D,
- 0x018042, 0x00197D, 0x29804A, 0x30000A,
- 0x380002, 0x003124, 0x000424, 0x000424,
- 0x002A24, 0x280502, 0x00068D, 0x000810,
- 0x28143A, 0x00750D, 0x00B124, 0x002264,
- 0x3D0386, 0x284402, 0x000810, 0x280C3A,
- 0x0B800D, 0x000820, 0x0002FD, 0x018040,
- 0x200007, 0x00758D, 0x00B124, 0x100102,
- 0x012144, 0x3E4986, 0x001810, 0x10003A,
- 0x00387D, 0x018042, 0x08000A, 0x000904,
- 0x3E4886, 0x030000, 0x3E4A06, 0x0000BD,
- 0x00008D, 0x023164, 0x000A64, 0x280D02,
- 0x0B808D, 0x000820, 0x0002FD, 0x018040,
- 0x200007, 0x00387D, 0x018042, 0x08000A,
- 0x000904, 0x3E3286, 0x030000, 0x0002FD,
- 0x018042, 0x08000A, 0x000904, 0x3D8286,
- 0x000007, 0x002810, 0x28043A, 0x00750D,
- 0x030924, 0x002264, 0x280D02, 0x02316C,
- 0x28450A, 0x0B810D, 0x000820, 0x0002FD,
- 0x018040, 0x200007, 0x00008D, 0x000A24,
- 0x3E4A06, 0x100102, 0x001810, 0x10003A,
- 0x0000BD, 0x003810, 0x30043A, 0x00187D,
- 0x018042, 0x0018FD, 0x09804A, 0x20000A,
- 0x0000AD, 0x028924, 0x07212C, 0x001010,
- 0x300583, 0x300D8B, 0x3014BB, 0x301C83,
- 0x002083, 0x00137D, 0x038042, 0x33844A,
- 0x33ACCB, 0x33B4CB, 0x33BCCB, 0x33C4CB,
- 0x33CCCB, 0x33D4CB, 0x305C8B, 0x006083,
- 0x001E0D, 0x0005FD, 0x018042, 0x20000A,
- 0x020924, 0x00068D, 0x00A96C, 0x00009D,
- 0x0002FD, 0x018042, 0x08000A, 0x000904,
- 0x3F6A86, 0x000007, 0x280502, 0x280D0A,
- 0x284402, 0x001810, 0x28143A, 0x0C008D,
- 0x000820, 0x0002FD, 0x018040, 0x220007,
- 0x003904, 0x225886, 0x001E0D, 0x00057D,
- 0x018042, 0x20000A, 0x020924, 0x0000A5,
- 0x0002FD, 0x018042, 0x08000A, 0x000904,
- 0x402A86, 0x000007, 0x280502, 0x280C02,
- 0x002010, 0x28143A, 0x0C010D, 0x000820,
- 0x0002FD, 0x018040, 0x225A06, 0x220007,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000,
- 0x000000, 0x000000, 0x000000, 0x000000
-};
-
-#endif //_HWMCODE_
diff --git a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c
index 6298b29..2164e34 100644
--- a/sound/pci/ymfpci/ymfpci_main.c
+++ b/sound/pci/ymfpci/ymfpci_main.c
@@ -1994,65 +1994,6 @@ static void snd_ymfpci_disable_dsp(struct snd_ymfpci *chip)
}
}
-#ifdef CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL
-
-#include "ymfpci_image.h"
-
-static struct firmware snd_ymfpci_dsp_microcode = {
- .size = YDSXG_DSPLENGTH,
- .data = (u8 *)DspInst,
-};
-static struct firmware snd_ymfpci_controller_microcode = {
- .size = YDSXG_CTRLLENGTH,
- .data = (u8 *)CntrlInst,
-};
-static struct firmware snd_ymfpci_controller_1e_microcode = {
- .size = YDSXG_CTRLLENGTH,
- .data = (u8 *)CntrlInst1E,
-};
-
-#ifdef __BIG_ENDIAN
-static int microcode_swapped;
-static DEFINE_MUTEX(microcode_swap);
-
-static void snd_ymfpci_convert_to_le(const struct firmware *fw)
-{
- int i;
- u32 *data = (u32 *)fw->data;
-
- for (i = 0; i < fw->size / 4; ++i)
- cpu_to_le32s(&data[i]);
-}
-#endif
-
-static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
-{
-#ifdef __BIG_ENDIAN
- mutex_lock(µcode_swap);
- if (!microcode_swapped) {
- snd_ymfpci_convert_to_le(&snd_ymfpci_dsp_microcode);
- snd_ymfpci_convert_to_le(&snd_ymfpci_controller_1e_microcode);
- snd_ymfpci_convert_to_le(&snd_ymfpci_controller_microcode);
- microcode_swapped = 1;
- }
- mutex_unlock(µcode_swap);
-#endif
-
- chip->dsp_microcode = &snd_ymfpci_dsp_microcode;
- if (chip->device_id == PCI_DEVICE_ID_YAMAHA_724F ||
- chip->device_id == PCI_DEVICE_ID_YAMAHA_740C ||
- chip->device_id == PCI_DEVICE_ID_YAMAHA_744 ||
- chip->device_id == PCI_DEVICE_ID_YAMAHA_754)
- chip->controller_microcode =
- &snd_ymfpci_controller_1e_microcode;
- else
- chip->controller_microcode =
- &snd_ymfpci_controller_microcode;
- return 0;
-}
-
-#else /* use fw_loader */
-
static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
{
int err, is_1e;
@@ -2091,8 +2032,6 @@ MODULE_FIRMWARE("yamaha/ds1_dsp.fw");
MODULE_FIRMWARE("yamaha/ds1_ctrl.fw");
MODULE_FIRMWARE("yamaha/ds1e_ctrl.fw");
-#endif
-
static void snd_ymfpci_download_image(struct snd_ymfpci *chip)
{
int i;
@@ -2273,10 +2212,8 @@ static int snd_ymfpci_free(struct snd_ymfpci *chip)
pci_write_config_word(chip->pci, 0x40, chip->old_legacy_ctrl);
pci_disable_device(chip->pci);
-#ifndef CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL
release_firmware(chip->dsp_microcode);
release_firmware(chip->controller_microcode);
-#endif
kfree(chip);
return 0;
}
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread
* [PATCH] smctr: use request_firmware()
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (29 preceding siblings ...)
2008-05-29 12:21 ` [PATCH N/28] ymfpci: treat firmware data as const David Woodhouse
@ 2008-05-29 13:47 ` David Woodhouse
2008-05-29 19:30 ` maximilian attems
2008-05-29 14:20 ` [PATCH] kaweth: " David Woodhouse
` (3 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-29 13:47 UTC (permalink / raw)
To: linux-kernel; +Cc: alan, akpm, Jay Schulist
Subject: [PATCH] smctr: use request_firmware()
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
Trying hard not to actually look too hard at it while I'm there...
drivers/net/tokenring/Kconfig | 8 +
drivers/net/tokenring/smctr.c | 54 ++-
drivers/net/tokenring/smctr.h | 2 -
drivers/net/tokenring/smctr_firmware.h | 978 --------------------------------
firmware/Makefile | 1 +
firmware/tr_smctr.bin.ihex | 477 ++++++++++++++++
6 files changed, 519 insertions(+), 1001 deletions(-)
delete mode 100644 drivers/net/tokenring/smctr_firmware.h
create mode 100644 firmware/tr_smctr.bin.ihex
diff --git a/drivers/net/tokenring/Kconfig b/drivers/net/tokenring/Kconfig
index e6b2e06..5aa5be1 100644
--- a/drivers/net/tokenring/Kconfig
+++ b/drivers/net/tokenring/Kconfig
@@ -182,4 +182,12 @@ config SMCTR
To compile this driver as a module, choose M here: the module will be
called smctr.
+config SMCTR_FIRMWARE
+ bool "SMC ISA/MCA adapter firmware"
+ depends on SMCTR
+ ---help---
+ Build firmware for SMCTR into the kernel instead of obtaining it
+ through udev. Say 'N'.
+
+
endif # TR
diff --git a/drivers/net/tokenring/smctr.c b/drivers/net/tokenring/smctr.c
index 5f1c507..d36b9fc 100644
--- a/drivers/net/tokenring/smctr.c
+++ b/drivers/net/tokenring/smctr.c
@@ -48,6 +48,7 @@
#include <linux/skbuff.h>
#include <linux/trdevice.h>
#include <linux/bitops.h>
+#include <linux/firmware.h>
#include <asm/system.h>
#include <asm/io.h>
@@ -59,7 +60,6 @@
#endif
#include "smctr.h" /* Our Stuff */
-#include "smctr_firmware.h" /* SMC adapter firmware */
static char version[] __initdata = KERN_INFO "smctr.c: v1.4 7/12/00 by jschlst@samba.org\n";
static const char cardname[] = "smctr";
@@ -103,7 +103,8 @@ static int smctr_clear_trc_reset(int ioaddr);
static int smctr_close(struct net_device *dev);
/* D */
-static int smctr_decode_firmware(struct net_device *dev);
+static int smctr_decode_firmware(struct net_device *dev,
+ const struct firmware *fw);
static int smctr_disable_16bit(struct net_device *dev);
static int smctr_disable_adapter_ctrl_store(struct net_device *dev);
static int smctr_disable_bic_int(struct net_device *dev);
@@ -748,7 +749,8 @@ static int smctr_close(struct net_device *dev)
return (0);
}
-static int smctr_decode_firmware(struct net_device *dev)
+static int smctr_decode_firmware(struct net_device *dev,
+ const struct firmware *fw)
{
struct net_local *tp = netdev_priv(dev);
short bit = 0x80, shift = 12;
@@ -762,10 +764,10 @@ static int smctr_decode_firmware(struct net_device *dev)
if(smctr_debug > 10)
printk(KERN_DEBUG "%s: smctr_decode_firmware\n", dev->name);
- weight = *(long *)(tp->ptr_ucode + WEIGHT_OFFSET);
- tsize = *(__u8 *)(tp->ptr_ucode + TREE_SIZE_OFFSET);
- tree = (DECODE_TREE_NODE *)(tp->ptr_ucode + TREE_OFFSET);
- ucode = (__u8 *)(tp->ptr_ucode + TREE_OFFSET
+ weight = *(long *)(fw->data + WEIGHT_OFFSET);
+ tsize = *(__u8 *)(fw->data + TREE_SIZE_OFFSET);
+ tree = (DECODE_TREE_NODE *)(fw->data + TREE_OFFSET);
+ ucode = (__u8 *)(fw->data + TREE_OFFSET
+ (tsize * sizeof(DECODE_TREE_NODE)));
mem = (__u16 *)(tp->ram_access);
@@ -2963,34 +2965,42 @@ static int smctr_link_tx_fcbs_to_bdbs(struct net_device *dev)
static int smctr_load_firmware(struct net_device *dev)
{
struct net_local *tp = netdev_priv(dev);
+ const struct firmware *fw;
__u16 i, checksum = 0;
int err = 0;
+ if (request_firmware(&fw, "tr_smctr.bin", &dev->dev))
+ return (UCODE_NOT_PRESENT);
+
if(smctr_debug > 10)
printk(KERN_DEBUG "%s: smctr_load_firmware\n", dev->name);
- tp->ptr_ucode = smctr_code;
tp->num_of_tx_buffs = 4;
tp->mode_bits |= UMAC;
tp->receive_mask = 0;
tp->max_packet_size = 4177;
/* Can only upload the firmware once per adapter reset. */
- if(tp->microcode_version != 0)
- return (UCODE_PRESENT);
+ if (tp->microcode_version != 0) {
+ err = (UCODE_PRESENT);
+ goto out;
+ }
/* Verify the firmware exists and is there in the right amount. */
- if (!tp->ptr_ucode
- || (*(tp->ptr_ucode + UCODE_VERSION_OFFSET) < UCODE_VERSION))
+ if (!fw->data
+ || (*(fw->data + UCODE_VERSION_OFFSET) < UCODE_VERSION))
{
- return (UCODE_NOT_PRESENT);
+ err = (UCODE_NOT_PRESENT);
+ goto out;
}
/* UCODE_SIZE is not included in Checksum. */
- for(i = 0; i < *((__u16 *)(tp->ptr_ucode + UCODE_SIZE_OFFSET)); i += 2)
- checksum += *((__u16 *)(tp->ptr_ucode + 2 + i));
- if(checksum)
- return (UCODE_NOT_PRESENT);
+ for(i = 0; i < *((__u16 *)(fw->data + UCODE_SIZE_OFFSET)); i += 2)
+ checksum += *((__u16 *)(fw->data + 2 + i));
+ if (checksum) {
+ err = (UCODE_NOT_PRESENT);
+ goto out;
+ }
/* At this point we have a valid firmware image, lets kick it on up. */
smctr_enable_adapter_ram(dev);
@@ -2998,7 +3008,7 @@ static int smctr_load_firmware(struct net_device *dev)
smctr_set_page(dev, (__u8 *)tp->ram_access);
if((smctr_checksum_firmware(dev))
- || (*(tp->ptr_ucode + UCODE_VERSION_OFFSET)
+ || (*(fw->data + UCODE_VERSION_OFFSET)
> tp->microcode_version))
{
smctr_enable_adapter_ctrl_store(dev);
@@ -3007,9 +3017,9 @@ static int smctr_load_firmware(struct net_device *dev)
for(i = 0; i < CS_RAM_SIZE; i += 2)
*((__u16 *)(tp->ram_access + i)) = 0;
- smctr_decode_firmware(dev);
+ smctr_decode_firmware(dev, fw);
- tp->microcode_version = *(tp->ptr_ucode + UCODE_VERSION_OFFSET); *((__u16 *)(tp->ram_access + CS_RAM_VERSION_OFFSET))
+ tp->microcode_version = *(fw->data + UCODE_VERSION_OFFSET); *((__u16 *)(tp->ram_access + CS_RAM_VERSION_OFFSET))
= (tp->microcode_version << 8);
*((__u16 *)(tp->ram_access + CS_RAM_CHECKSUM_OFFSET))
= ~(tp->microcode_version << 8) + 1;
@@ -3023,7 +3033,8 @@ static int smctr_load_firmware(struct net_device *dev)
err = UCODE_PRESENT;
smctr_disable_16bit(dev);
-
+ out:
+ release_firmware(fw);
return (err);
}
@@ -5651,6 +5662,7 @@ static int io[SMCTR_MAX_ADAPTERS];
static int irq[SMCTR_MAX_ADAPTERS];
MODULE_LICENSE("GPL");
+MODULE_FIRMWARE("tr_smctr.bin");
module_param_array(io, int, NULL, 0);
module_param_array(irq, int, NULL, 0);
diff --git a/drivers/net/tokenring/smctr.h b/drivers/net/tokenring/smctr.h
index 88dfa2e..52df7dd 100644
--- a/drivers/net/tokenring/smctr.h
+++ b/drivers/net/tokenring/smctr.h
@@ -1042,8 +1042,6 @@ typedef struct net_local {
__u16 functional_address[2];
__u16 bitwise_group_address[2];
- const __u8 *ptr_ucode;
-
__u8 cleanup;
struct sk_buff_head SendSkbQueue;
diff --git a/drivers/net/tokenring/smctr_firmware.h b/drivers/net/tokenring/smctr_firmware.h
deleted file mode 100644
index 292e50d..0000000
--- a/drivers/net/tokenring/smctr_firmware.h
+++ /dev/null
@@ -1,978 +0,0 @@
-/*
- * The firmware this driver downloads into the tokenring card is a
- * separate program and is not GPL'd source code, even though the Linux
- * side driver and the routine that loads this data into the card are.
- *
- * This firmware is licensed to you strictly for use in conjunction
- * with the use of SMC TokenRing adapters. There is no waranty
- * expressed or implied about its fitness for any purpose.
- */
-
-/* smctr_firmware.h: SMC TokenRing driver firmware dump for Linux.
- *
- * Notes:
- * - This is an 8K binary image. (MCT.BIN v6.3C1 03/01/95)
- *
- * Authors:
- * - Jay Schulist <jschlst@samba.org>
- */
-
-
-#if defined(CONFIG_SMCTR) || defined(CONFIG_SMCTR_MODULE)
-
-static const unsigned char smctr_code[] = {
- 0x0BC, 0x01D, 0x012, 0x03B, 0x063, 0x0B4, 0x0E9, 0x000,
- 0x000, 0x01F, 0x000, 0x001, 0x001, 0x000, 0x002, 0x005,
- 0x001, 0x000, 0x006, 0x003, 0x001, 0x000, 0x004, 0x009,
- 0x001, 0x000, 0x00A, 0x007, 0x001, 0x000, 0x008, 0x00B,
- 0x001, 0x000, 0x00C, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x001, 0x000, 0x010, 0x00D, 0x001, 0x000, 0x00E, 0x013,
- 0x001, 0x000, 0x014, 0x011, 0x001, 0x000, 0x012, 0x000,
- 0x000, 0x005, 0x000, 0x015, 0x001, 0x000, 0x016, 0x019,
- 0x001, 0x000, 0x01A, 0x017, 0x001, 0x000, 0x018, 0x000,
- 0x000, 0x00E, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000,
- 0x000, 0x004, 0x000, 0x01B, 0x001, 0x000, 0x01C, 0x000,
- 0x000, 0x007, 0x000, 0x000, 0x000, 0x00F, 0x000, 0x000,
- 0x000, 0x00B, 0x000, 0x01D, 0x001, 0x000, 0x01E, 0x000,
- 0x000, 0x008, 0x000, 0x000, 0x000, 0x002, 0x000, 0x000,
- 0x000, 0x00C, 0x000, 0x000, 0x000, 0x006, 0x000, 0x000,
- 0x000, 0x00D, 0x000, 0x000, 0x000, 0x003, 0x000, 0x000,
- 0x000, 0x00A, 0x000, 0x000, 0x000, 0x009, 0x000, 0x004,
- 0x078, 0x0C6, 0x0BC, 0x001, 0x094, 0x004, 0x093, 0x080,
- 0x0C8, 0x040, 0x062, 0x0E9, 0x0DA, 0x01C, 0x02C, 0x015,
- 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x058,
- 0x00B, 0x0E9, 0x0E5, 0x0D5, 0x095, 0x0C1, 0x09D, 0x077,
- 0x0CE, 0x0BB, 0x0A0, 0x06E, 0x01C, 0x005, 0x0F6, 0x077,
- 0x0C6, 0x002, 0x0FA, 0x096, 0x070, 0x0E8, 0x01D, 0x0C0,
- 0x017, 0x00E, 0x002, 0x0FA, 0x058, 0x07D, 0x0C0, 0x05F,
- 0x072, 0x0CE, 0x0EC, 0x0A4, 0x0C3, 0x084, 0x090, 0x07A,
- 0x030, 0x0CD, 0x08D, 0x079, 0x019, 0x0E7, 0x06C, 0x024,
- 0x027, 0x09C, 0x008, 0x039, 0x007, 0x038, 0x0A8, 0x04A,
- 0x04C, 0x0EA, 0x04D, 0x098, 0x09B, 0x024, 0x04C, 0x0C0,
- 0x026, 0x0D3, 0x0E7, 0x054, 0x05A, 0x04D, 0x0F2, 0x04C,
- 0x00C, 0x013, 0x023, 0x049, 0x090, 0x032, 0x06E, 0x0A4,
- 0x0DF, 0x093, 0x071, 0x013, 0x077, 0x026, 0x0E1, 0x026,
- 0x0F8, 0x026, 0x00C, 0x04C, 0x012, 0x026, 0x008, 0x009,
- 0x082, 0x082, 0x060, 0x0A9, 0x030, 0x079, 0x036, 0x0B0,
- 0x0B2, 0x0A8, 0x0A7, 0x072, 0x064, 0x08F, 0x09B, 0x033,
- 0x033, 0x0F9, 0x0B8, 0x039, 0x0D5, 0x011, 0x073, 0x0AA,
- 0x075, 0x026, 0x05D, 0x026, 0x051, 0x093, 0x02A, 0x049,
- 0x094, 0x0C9, 0x095, 0x089, 0x0BC, 0x04D, 0x0C8, 0x09B,
- 0x080, 0x09B, 0x0A0, 0x099, 0x006, 0x04C, 0x086, 0x026,
- 0x058, 0x09B, 0x0A4, 0x09B, 0x099, 0x037, 0x062, 0x06C,
- 0x067, 0x09B, 0x033, 0x030, 0x0BF, 0x036, 0x066, 0x061,
- 0x0BF, 0x036, 0x0EC, 0x0C5, 0x0BD, 0x066, 0x082, 0x05A,
- 0x050, 0x031, 0x0D5, 0x09D, 0x098, 0x018, 0x029, 0x03C,
- 0x098, 0x086, 0x04C, 0x017, 0x026, 0x03E, 0x02C, 0x0B8,
- 0x069, 0x03B, 0x049, 0x02E, 0x0B4, 0x008, 0x043, 0x01A,
- 0x0A4, 0x0F9, 0x0B3, 0x051, 0x0F1, 0x010, 0x0F3, 0x043,
- 0x0CD, 0x008, 0x06F, 0x063, 0x079, 0x0B3, 0x033, 0x00E,
- 0x013, 0x098, 0x049, 0x098, 0x004, 0x0DA, 0x07C, 0x0E0,
- 0x052, 0x079, 0x031, 0x00C, 0x098, 0x02E, 0x04D, 0x0AC,
- 0x02C, 0x084, 0x014, 0x0EE, 0x04C, 0x0FE, 0x067, 0x05E,
- 0x0E4, 0x09A, 0x075, 0x029, 0x0D7, 0x0A9, 0x035, 0x03A,
- 0x094, 0x05B, 0x0D5, 0x09B, 0x058, 0x0B4, 0x0AF, 0x075,
- 0x066, 0x0AF, 0x014, 0x0A9, 0x0EF, 0x040, 0x095, 0x025,
- 0x008, 0x0B9, 0x0AD, 0x042, 0x0FC, 0x0D8, 0x0D9, 0x08C,
- 0x033, 0x00E, 0x013, 0x098, 0x066, 0x01E, 0x045, 0x0AC,
- 0x0B0, 0x00C, 0x042, 0x0D3, 0x0CC, 0x0A6, 0x012, 0x062,
- 0x0DE, 0x0B4, 0x0B1, 0x080, 0x049, 0x07D, 0x0A2, 0x0DE,
- 0x0B4, 0x018, 0x0C0, 0x024, 0x084, 0x0E6, 0x054, 0x0F5,
- 0x083, 0x046, 0x001, 0x068, 0x01A, 0x063, 0x00C, 0x0C6,
- 0x012, 0x064, 0x0FA, 0x04C, 0x035, 0x01C, 0x02C, 0x00E,
- 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA,
- 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AD, 0x0D7, 0x002,
- 0x070, 0x0E0, 0x04C, 0x0F3, 0x0A1, 0x0C1, 0x0D5, 0x0C0,
- 0x03C, 0x0B9, 0x069, 0x039, 0x060, 0x04E, 0x058, 0x077,
- 0x002, 0x067, 0x093, 0x03C, 0x099, 0x0E4, 0x0CF, 0x038,
- 0x01C, 0x097, 0x02E, 0x040, 0x01B, 0x090, 0x031, 0x046,
- 0x0A3, 0x05E, 0x00E, 0x088, 0x034, 0x06A, 0x035, 0x0E0,
- 0x0E8, 0x0AA, 0x035, 0x01A, 0x0A9, 0x0F5, 0x015, 0x046,
- 0x0A3, 0x0EA, 0x07D, 0x04A, 0x0A3, 0x051, 0x0AA, 0x09F,
- 0x070, 0x054, 0x0A6, 0x057, 0x02E, 0x0B4, 0x0CD, 0x0C8,
- 0x0A3, 0x00C, 0x0C1, 0x0DA, 0x0C6, 0x0E1, 0x0CB, 0x07A,
- 0x0D4, 0x01C, 0x068, 0x0FF, 0x0CF, 0x055, 0x0A8, 0x0C0,
- 0x02D, 0x085, 0x011, 0x017, 0x044, 0x02A, 0x030, 0x00B,
- 0x04A, 0x088, 0x0C2, 0x04D, 0x0B5, 0x020, 0x0D5, 0x026,
- 0x001, 0x069, 0x051, 0x069, 0x052, 0x019, 0x052, 0x060,
- 0x016, 0x095, 0x016, 0x082, 0x096, 0x054, 0x098, 0x005,
- 0x0A5, 0x045, 0x0F3, 0x0DD, 0x06A, 0x0F9, 0x028, 0x018,
- 0x0EF, 0x000, 0x030, 0x030, 0x051, 0x04E, 0x044, 0x05D,
- 0x012, 0x0D1, 0x043, 0x0E6, 0x012, 0x06F, 0x09E, 0x0BA,
- 0x0CC, 0x0DF, 0x025, 0x003, 0x01D, 0x0E0, 0x006, 0x006,
- 0x00A, 0x030, 0x0CC, 0x0A9, 0x0EB, 0x02D, 0x000, 0x086,
- 0x0A6, 0x012, 0x065, 0x04F, 0x056, 0x0D6, 0x065, 0x049,
- 0x05F, 0x03D, 0x0E8, 0x037, 0x0C9, 0x040, 0x0C7, 0x078,
- 0x001, 0x081, 0x082, 0x08C, 0x033, 0x018, 0x049, 0x080,
- 0x0AE, 0x040, 0x0C5, 0x018, 0x005, 0x09C, 0x06D, 0x018,
- 0x066, 0x00E, 0x0F3, 0x0A0, 0x0C6, 0x012, 0x062, 0x0DE,
- 0x0F5, 0x004, 0x0B4, 0x0AC, 0x06B, 0x0C6, 0x019, 0x091,
- 0x073, 0x005, 0x048, 0x02E, 0x072, 0x094, 0x080, 0x073,
- 0x0A1, 0x0C8, 0x047, 0x036, 0x066, 0x064, 0x02F, 0x036,
- 0x066, 0x064, 0x007, 0x099, 0x002, 0x091, 0x08E, 0x072,
- 0x0D1, 0x00F, 0x09D, 0x006, 0x031, 0x073, 0x0A0, 0x0C3,
- 0x051, 0x06A, 0x01A, 0x020, 0x0BF, 0x03A, 0x00C, 0x02C,
- 0x073, 0x087, 0x043, 0x05E, 0x060, 0x002, 0x023, 0x0FC,
- 0x0E0, 0x0D6, 0x035, 0x0EF, 0x09E, 0x0F5, 0x0EF, 0x092,
- 0x081, 0x08E, 0x0F0, 0x003, 0x003, 0x005, 0x018, 0x066,
- 0x045, 0x0CC, 0x00B, 0x048, 0x02E, 0x070, 0x00A, 0x040,
- 0x039, 0x0D0, 0x0E4, 0x023, 0x09B, 0x033, 0x032, 0x017,
- 0x09B, 0x033, 0x032, 0x003, 0x0CC, 0x085, 0x048, 0x0C7,
- 0x038, 0x014, 0x0A5, 0x0CE, 0x029, 0x07E, 0x0D2, 0x080,
- 0x0A1, 0x0A8, 0x0B4, 0x048, 0x088, 0x02F, 0x0CE, 0x083,
- 0x00B, 0x01C, 0x0E1, 0x0D0, 0x0D7, 0x098, 0x004, 0x088,
- 0x087, 0x0CE, 0x096, 0x031, 0x073, 0x0A5, 0x08F, 0x0F3,
- 0x083, 0x058, 0x0D7, 0x0BE, 0x07B, 0x082, 0x0AF, 0x092,
- 0x081, 0x08E, 0x0F0, 0x003, 0x003, 0x005, 0x018, 0x066,
- 0x045, 0x0CC, 0x015, 0x020, 0x0B9, 0x0C8, 0x029, 0x000,
- 0x0E7, 0x043, 0x090, 0x08E, 0x06C, 0x0CC, 0x0C8, 0x05E,
- 0x06C, 0x0CC, 0x0C8, 0x00F, 0x032, 0x005, 0x023, 0x01C,
- 0x0E4, 0x050, 0x0D4, 0x05A, 0x017, 0x088, 0x02F, 0x0CE,
- 0x083, 0x010, 0x0F9, 0x0D0, 0x023, 0x017, 0x03A, 0x004,
- 0x035, 0x0E6, 0x000, 0x022, 0x016, 0x039, 0x0C3, 0x0A3,
- 0x0FC, 0x0E0, 0x0D6, 0x035, 0x0E0, 0x0BF, 0x0F4, 0x018,
- 0x0F2, 0x02D, 0x04D, 0x043, 0x051, 0x06E, 0x05A, 0x022,
- 0x01F, 0x030, 0x0D4, 0x017, 0x0E7, 0x041, 0x091, 0x073,
- 0x005, 0x048, 0x02E, 0x077, 0x069, 0x000, 0x0E7, 0x043,
- 0x090, 0x08E, 0x06C, 0x0CC, 0x0C8, 0x05E, 0x06C, 0x0CC,
- 0x0C8, 0x00F, 0x032, 0x005, 0x023, 0x01C, 0x0EF, 0x04C,
- 0x04E, 0x006, 0x004, 0x0C9, 0x09E, 0x00B, 0x0FF, 0x041,
- 0x08F, 0x022, 0x0D4, 0x0D4, 0x035, 0x016, 0x0E5, 0x0A2,
- 0x021, 0x0F3, 0x05A, 0x082, 0x0FC, 0x0E8, 0x032, 0x02E,
- 0x060, 0x0A9, 0x005, 0x0CE, 0x013, 0x048, 0x007, 0x03A,
- 0x01C, 0x084, 0x073, 0x066, 0x066, 0x042, 0x0F3, 0x066,
- 0x066, 0x040, 0x079, 0x090, 0x029, 0x018, 0x0E7, 0x00A,
- 0x098, 0x09C, 0x00A, 0x09E, 0x0B5, 0x012, 0x05C, 0x07C,
- 0x0C3, 0x031, 0x08B, 0x098, 0x02A, 0x07C, 0x0D3, 0x0ED,
- 0x038, 0x0E9, 0x0D3, 0x04E, 0x074, 0x0ED, 0x049, 0x09E,
- 0x00B, 0x0FF, 0x041, 0x08F, 0x022, 0x0D4, 0x0D4, 0x035,
- 0x016, 0x0E5, 0x0A2, 0x02D, 0x0EB, 0x045, 0x033, 0x08F,
- 0x0FC, 0x0F7, 0x0A0, 0x05F, 0x025, 0x003, 0x01D, 0x0E4,
- 0x00E, 0x006, 0x00A, 0x030, 0x0CC, 0x00C, 0x0F3, 0x0EB,
- 0x040, 0x0DE, 0x061, 0x0A8, 0x070, 0x092, 0x00A, 0x000,
- 0x0E1, 0x024, 0x01E, 0x000, 0x0E1, 0x024, 0x01E, 0x000,
- 0x0E1, 0x024, 0x01E, 0x000, 0x0E1, 0x024, 0x01E, 0x000,
- 0x0E1, 0x024, 0x01E, 0x001, 0x00F, 0x098, 0x02A, 0x00B,
- 0x0F3, 0x0A0, 0x0C8, 0x0B9, 0x0A2, 0x0A4, 0x017, 0x03A,
- 0x069, 0x000, 0x0E7, 0x043, 0x090, 0x08E, 0x075, 0x048,
- 0x05E, 0x070, 0x069, 0x001, 0x0E6, 0x000, 0x052, 0x031,
- 0x0CC, 0x018, 0x014, 0x0A5, 0x0CC, 0x009, 0x082, 0x094,
- 0x073, 0x00C, 0x0A0, 0x091, 0x0F5, 0x025, 0x0CC, 0x007,
- 0x006, 0x084, 0x084, 0x09F, 0x030, 0x0A2, 0x0A4, 0x07D,
- 0x050, 0x075, 0x0A6, 0x065, 0x001, 0x04A, 0x08E, 0x0B4,
- 0x0CC, 0x0C4, 0x035, 0x054, 0x075, 0x066, 0x0A4, 0x097,
- 0x07A, 0x089, 0x050, 0x053, 0x013, 0x080, 0x019, 0x0E3,
- 0x049, 0x05C, 0x06D, 0x0CE, 0x0A9, 0x040, 0x035, 0x006,
- 0x078, 0x0D2, 0x057, 0x006, 0x0F1, 0x0B3, 0x02A, 0x08D,
- 0x097, 0x023, 0x062, 0x092, 0x05D, 0x069, 0x099, 0x01C,
- 0x06A, 0x036, 0x0E6, 0x0CD, 0x046, 0x012, 0x06F, 0x09E,
- 0x0E1, 0x0AB, 0x0E4, 0x0A3, 0x00C, 0x0C0, 0x0DE, 0x0AC,
- 0x0D4, 0x00D, 0x028, 0x01B, 0x0D0, 0x012, 0x0A5, 0x000,
- 0x0F8, 0x04B, 0x0AD, 0x033, 0x028, 0x006, 0x0A0, 0x0DE,
- 0x014, 0x097, 0x03A, 0x089, 0x05D, 0x0C0, 0x00D, 0x0E3,
- 0x006, 0x090, 0x092, 0x05D, 0x069, 0x098, 0x066, 0x0B9,
- 0x019, 0x095, 0x0E4, 0x0A8, 0x0CF, 0x09D, 0x033, 0x018,
- 0x049, 0x0BE, 0x07B, 0x086, 0x0AF, 0x092, 0x08C, 0x033,
- 0x024, 0x014, 0x00C, 0x0F4, 0x083, 0x024, 0x021, 0x0C2,
- 0x070, 0x0BF, 0x0F4, 0x018, 0x0F2, 0x02D, 0x04D, 0x043,
- 0x051, 0x06E, 0x05A, 0x022, 0x01F, 0x032, 0x0A8, 0x02F,
- 0x0CE, 0x083, 0x022, 0x0E6, 0x005, 0x0A4, 0x017, 0x03A,
- 0x069, 0x000, 0x0E7, 0x043, 0x090, 0x08E, 0x075, 0x048,
- 0x05E, 0x070, 0x069, 0x001, 0x0E6, 0x042, 0x0A4, 0x063,
- 0x098, 0x002, 0x029, 0x04B, 0x09A, 0x029, 0x078, 0x0E9,
- 0x040, 0x053, 0x013, 0x081, 0x081, 0x032, 0x067, 0x082,
- 0x0FF, 0x0D0, 0x063, 0x0C8, 0x0B5, 0x035, 0x00D, 0x045,
- 0x0AE, 0x050, 0x008, 0x07C, 0x0E0, 0x0D0, 0x05F, 0x09D,
- 0x006, 0x045, 0x0CC, 0x001, 0x0A4, 0x017, 0x03A, 0x069,
- 0x000, 0x0E7, 0x043, 0x090, 0x08E, 0x075, 0x048, 0x05E,
- 0x070, 0x069, 0x001, 0x0E6, 0x059, 0x0A4, 0x063, 0x098,
- 0x01C, 0x052, 0x097, 0x03B, 0x030, 0x052, 0x08E, 0x07D,
- 0x02A, 0x009, 0x01F, 0x051, 0x0EB, 0x0A4, 0x0A4, 0x00A,
- 0x0B9, 0x094, 0x087, 0x0AE, 0x0C5, 0x031, 0x038, 0x002,
- 0x0FF, 0x0D0, 0x063, 0x0C8, 0x0B5, 0x035, 0x00D, 0x045,
- 0x0AE, 0x050, 0x008, 0x07C, 0x0EA, 0x020, 0x0BF, 0x03A,
- 0x00C, 0x08B, 0x09A, 0x016, 0x090, 0x05C, 0x0E9, 0x0A4,
- 0x003, 0x09D, 0x00E, 0x042, 0x039, 0x0D5, 0x021, 0x079,
- 0x095, 0x048, 0x00F, 0x030, 0x00A, 0x091, 0x08E, 0x060,
- 0x0EB, 0x029, 0x073, 0x000, 0x009, 0x054, 0x004, 0x0CA,
- 0x082, 0x065, 0x052, 0x065, 0x0E4, 0x0CA, 0x022, 0x065,
- 0x072, 0x065, 0x009, 0x032, 0x0E0, 0x099, 0x072, 0x04C,
- 0x0C4, 0x0E0, 0x00B, 0x0FF, 0x041, 0x08F, 0x022, 0x0D4,
- 0x0D4, 0x035, 0x016, 0x0B9, 0x040, 0x021, 0x0F3, 0x08A,
- 0x082, 0x0FC, 0x0E8, 0x032, 0x02E, 0x060, 0x0A9, 0x005,
- 0x0CE, 0x09A, 0x040, 0x039, 0x0D0, 0x0E4, 0x023, 0x09D,
- 0x052, 0x017, 0x099, 0x054, 0x061, 0x099, 0x001, 0x0E6,
- 0x040, 0x0A4, 0x063, 0x098, 0x004, 0x0B1, 0x084, 0x098,
- 0x018, 0x0EF, 0x02D, 0x003, 0x005, 0x031, 0x038, 0x002,
- 0x0FF, 0x0D0, 0x063, 0x0C8, 0x0B5, 0x035, 0x00D, 0x045,
- 0x0B9, 0x068, 0x088, 0x07C, 0x0E0, 0x050, 0x05F, 0x09D,
- 0x006, 0x045, 0x0CC, 0x081, 0x048, 0x02E, 0x071, 0x034,
- 0x08F, 0x048, 0x001, 0x048, 0x015, 0x021, 0x005, 0x021,
- 0x0E9, 0x00A, 0x052, 0x003, 0x0CE, 0x05A, 0x046, 0x039,
- 0x0CF, 0x047, 0x08E, 0x060, 0x0AB, 0x01A, 0x0F3, 0x053,
- 0x043, 0x0EB, 0x035, 0x024, 0x0B8, 0x01B, 0x030, 0x007,
- 0x009, 0x08A, 0x074, 0x02F, 0x07E, 0x041, 0x074, 0x01E,
- 0x01D, 0x00D, 0x087, 0x046, 0x049, 0x0D5, 0x095, 0x0D1,
- 0x0D5, 0x0D5, 0x0BB, 0x0A9, 0x04E, 0x082, 0x09D, 0x005,
- 0x03A, 0x00A, 0x074, 0x014, 0x0E8, 0x029, 0x0D0, 0x042,
- 0x074, 0x05B, 0x0CE, 0x050, 0x0C4, 0x007, 0x045, 0x0BC,
- 0x0E2, 0x00C, 0x040, 0x074, 0x05B, 0x0CE, 0x083, 0x004,
- 0x0F9, 0x095, 0x04D, 0x013, 0x063, 0x05E, 0x06F, 0x031,
- 0x03B, 0x0A0, 0x08B, 0x0A2, 0x0C5, 0x039, 0x08D, 0x078,
- 0x03A, 0x022, 0x0A0, 0x000, 0x06B, 0x0C1, 0x0D1, 0x054,
- 0x060, 0x016, 0x0D9, 0x091, 0x0A2, 0x0E7, 0x043, 0x08C,
- 0x024, 0x0DC, 0x01C, 0x0E0, 0x051, 0x017, 0x039, 0x06B,
- 0x03B, 0x0CC, 0x04B, 0x042, 0x02E, 0x06B, 0x050, 0x0BF,
- 0x036, 0x036, 0x065, 0x04F, 0x07A, 0x018, 0x055, 0x025,
- 0x078, 0x098, 0x023, 0x0E7, 0x050, 0x03E, 0x0F3, 0x081,
- 0x04C, 0x002, 0x06D, 0x03E, 0x071, 0x053, 0x0AF, 0x078,
- 0x0A9, 0x0D4, 0x0A6, 0x029, 0x0B1, 0x0BC, 0x0D9, 0x099,
- 0x0B2, 0x08E, 0x062, 0x08F, 0x022, 0x02E, 0x075, 0x016,
- 0x0B0, 0x0B2, 0x0AB, 0x023, 0x028, 0x016, 0x054, 0x052,
- 0x031, 0x0BC, 0x0D9, 0x099, 0x0B2, 0x08E, 0x066, 0x019,
- 0x002, 0x02E, 0x075, 0x016, 0x050, 0x02C, 0x0A9, 0x0C8,
- 0x0C6, 0x0F5, 0x020, 0x0D3, 0x0E4, 0x07F, 0x04F, 0x09C,
- 0x00A, 0x0D6, 0x016, 0x07F, 0x090, 0x0EE, 0x04C, 0x0EB,
- 0x0CF, 0x0E2, 0x088, 0x0BA, 0x02F, 0x042, 0x086, 0x0AE,
- 0x0BD, 0x0E5, 0x0A7, 0x052, 0x09F, 0x093, 0x063, 0x079,
- 0x0EB, 0x033, 0x008, 0x0F9, 0x094, 0x052, 0x047, 0x0CD,
- 0x099, 0x025, 0x06F, 0x03A, 0x00C, 0x013, 0x0E6, 0x055,
- 0x034, 0x04C, 0x05A, 0x04D, 0x0B5, 0x023, 0x095, 0x0A5,
- 0x048, 0x011, 0x05A, 0x00A, 0x043, 0x095, 0x0AC, 0x02C,
- 0x0BA, 0x024, 0x005, 0x049, 0x0B1, 0x0BC, 0x0CA, 0x0A7,
- 0x072, 0x06C, 0x06B, 0x0C5, 0x0BD, 0x0E8, 0x031, 0x069,
- 0x052, 0x05D, 0x006, 0x012, 0x065, 0x03E, 0x0B1, 0x050,
- 0x04C, 0x07D, 0x04F, 0x0AC, 0x00A, 0x030, 0x00B, 0x036,
- 0x064, 0x011, 0x073, 0x08A, 0x083, 0x08E, 0x075, 0x012,
- 0x09F, 0x07B, 0x0D2, 0x099, 0x058, 0x0EE, 0x082, 0x02E,
- 0x077, 0x0A0, 0x0E3, 0x09D, 0x05D, 0x04F, 0x0BC, 0x02A,
- 0x053, 0x029, 0x053, 0x0DE, 0x093, 0x024, 0x0BA, 0x0B3,
- 0x036, 0x0AA, 0x04A, 0x0C6, 0x079, 0x0D4, 0x0B9, 0x0DE,
- 0x062, 0x05A, 0x011, 0x073, 0x050, 0x050, 0x0BF, 0x037,
- 0x036, 0x06F, 0x013, 0x023, 0x0BA, 0x00C, 0x024, 0x0CE,
- 0x0BD, 0x0E2, 0x0A7, 0x052, 0x0B2, 0x08E, 0x06B, 0x060,
- 0x062, 0x02E, 0x075, 0x013, 0x030, 0x0AC, 0x0A0, 0x059,
- 0x0CA, 0x064, 0x063, 0x079, 0x0B3, 0x033, 0x065, 0x01C,
- 0x0CC, 0x032, 0x004, 0x05C, 0x0EA, 0x02C, 0x0A0, 0x059,
- 0x0DF, 0x023, 0x01B, 0x0D4, 0x083, 0x052, 0x047, 0x0DD,
- 0x079, 0x096, 0x0D4, 0x09E, 0x0B3, 0x052, 0x04B, 0x0A2,
- 0x05A, 0x01A, 0x08D, 0x05D, 0x07B, 0x082, 0x0A7, 0x052,
- 0x0B2, 0x08E, 0x066, 0x019, 0x002, 0x02E, 0x075, 0x016,
- 0x050, 0x02C, 0x08C, 0x032, 0x01D, 0x07B, 0x08E, 0x0A7,
- 0x052, 0x0B1, 0x0BC, 0x0D9, 0x099, 0x098, 0x004, 0x0DA,
- 0x07C, 0x0E2, 0x0AC, 0x0FE, 0x066, 0x019, 0x002, 0x02E,
- 0x065, 0x050, 0x0BF, 0x033, 0x066, 0x064, 0x0FE, 0x074,
- 0x018, 0x086, 0x04C, 0x017, 0x026, 0x0D6, 0x016, 0x052,
- 0x039, 0x018, 0x0DE, 0x07A, 0x0CC, 0x0C2, 0x03E, 0x065,
- 0x014, 0x091, 0x0F3, 0x066, 0x049, 0x008, 0x06E, 0x083,
- 0x009, 0x033, 0x0AF, 0x031, 0x0ED, 0x00D, 0x09D, 0x006,
- 0x012, 0x062, 0x02A, 0x031, 0x08D, 0x06D, 0x0E7, 0x041,
- 0x082, 0x07C, 0x0CA, 0x0A6, 0x089, 0x087, 0x009, 0x02E,
- 0x029, 0x0B1, 0x0AF, 0x010, 0x039, 0x0D6, 0x064, 0x097,
- 0x030, 0x01D, 0x042, 0x075, 0x093, 0x044, 0x002, 0x08C,
- 0x024, 0x0D2, 0x07A, 0x0B3, 0x050, 0x0F6, 0x089, 0x005,
- 0x043, 0x05E, 0x061, 0x098, 0x0C0, 0x02C, 0x092, 0x025,
- 0x03C, 0x08B, 0x024, 0x089, 0x049, 0x005, 0x049, 0x0E7,
- 0x00C, 0x0B9, 0x084, 0x098, 0x0B7, 0x0AD, 0x033, 0x044,
- 0x0AE, 0x05A, 0x051, 0x086, 0x060, 0x09F, 0x038, 0x0A9,
- 0x0A2, 0x06C, 0x06B, 0x0C4, 0x08E, 0x0F4, 0x05E, 0x049,
- 0x046, 0x012, 0x062, 0x0DE, 0x0B4, 0x0CD, 0x021, 0x05C,
- 0x0B4, 0x0A3, 0x00C, 0x0C1, 0x03E, 0x072, 0x029, 0x0A2,
- 0x06C, 0x06B, 0x0C6, 0x012, 0x062, 0x047, 0x0F0, 0x0E8,
- 0x0C3, 0x032, 0x004, 0x035, 0x040, 0x092, 0x0A4, 0x082,
- 0x088, 0x010, 0x092, 0x07C, 0x0CB, 0x0D4, 0x02F, 0x0A4,
- 0x002, 0x011, 0x084, 0x098, 0x0B7, 0x0AD, 0x033, 0x044,
- 0x0AE, 0x05A, 0x051, 0x086, 0x060, 0x09F, 0x038, 0x0A9,
- 0x0A2, 0x06C, 0x06B, 0x0C4, 0x08E, 0x0F4, 0x05E, 0x049,
- 0x044, 0x008, 0x049, 0x03E, 0x065, 0x0EA, 0x017, 0x0D2,
- 0x001, 0x008, 0x0C2, 0x04C, 0x05B, 0x0D6, 0x099, 0x0A4,
- 0x02B, 0x096, 0x094, 0x061, 0x098, 0x027, 0x0CE, 0x045,
- 0x034, 0x04D, 0x08D, 0x078, 0x081, 0x009, 0x027, 0x0CC,
- 0x0BD, 0x012, 0x028, 0x06C, 0x058, 0x0AF, 0x0B6, 0x0F3,
- 0x0A0, 0x0C1, 0x03E, 0x065, 0x053, 0x044, 0x0D8, 0x0D7,
- 0x092, 0x08E, 0x07D, 0x04B, 0x0C2, 0x0FA, 0x061, 0x026,
- 0x006, 0x03A, 0x0B3, 0x06B, 0x003, 0x005, 0x049, 0x0E7,
- 0x00C, 0x0B9, 0x06F, 0x05A, 0x066, 0x095, 0x05C, 0x0B4,
- 0x0A3, 0x00C, 0x0C1, 0x03E, 0x070, 0x029, 0x0A2, 0x06E,
- 0x0A4, 0x0DF, 0x093, 0x071, 0x013, 0x077, 0x026, 0x0E1,
- 0x026, 0x0F8, 0x026, 0x0C6, 0x0BC, 0x094, 0x073, 0x0F9,
- 0x02F, 0x00B, 0x0E9, 0x084, 0x098, 0x018, 0x0EA, 0x0CC,
- 0x0EC, 0x00C, 0x015, 0x027, 0x09C, 0x032, 0x0FF, 0x03D,
- 0x056, 0x0AF, 0x092, 0x08B, 0x07A, 0x0D3, 0x035, 0x0D5,
- 0x0CB, 0x04A, 0x030, 0x0CC, 0x013, 0x0E7, 0x002, 0x09A,
- 0x026, 0x0C6, 0x0BC, 0x094, 0x073, 0x041, 0x097, 0x091,
- 0x0F4, 0x083, 0x0CE, 0x004, 0x020, 0x062, 0x08B, 0x005,
- 0x016, 0x049, 0x08C, 0x024, 0x0C0, 0x0C7, 0x056, 0x090,
- 0x0C0, 0x0C1, 0x052, 0x079, 0x0C3, 0x02E, 0x05B, 0x0D5,
- 0x0A6, 0x072, 0x0D2, 0x094, 0x0FA, 0x0AD, 0x058, 0x0C8,
- 0x0FA, 0x09F, 0x054, 0x0B3, 0x032, 0x04B, 0x0B9, 0x054,
- 0x0A6, 0x051, 0x086, 0x06B, 0x079, 0x0D0, 0x060, 0x09F,
- 0x032, 0x005, 0x034, 0x04D, 0x08D, 0x07A, 0x04D, 0x01E,
- 0x07A, 0x0B3, 0x051, 0x000, 0x0A9, 0x03D, 0x059, 0x0A8,
- 0x07B, 0x044, 0x082, 0x0A1, 0x0AF, 0x04A, 0x08D, 0x052,
- 0x0A9, 0x052, 0x041, 0x049, 0x04F, 0x03A, 0x02E, 0x040,
- 0x0A4, 0x099, 0x050, 0x0BE, 0x090, 0x008, 0x052, 0x079,
- 0x0C3, 0x02E, 0x061, 0x026, 0x02D, 0x0EB, 0x04C, 0x0D0,
- 0x015, 0x0CB, 0x04A, 0x030, 0x0CC, 0x013, 0x0E7, 0x002,
- 0x09A, 0x026, 0x0C6, 0x0BC, 0x048, 0x0FE, 0x01D, 0x025,
- 0x046, 0x0A9, 0x054, 0x0A9, 0x020, 0x0A4, 0x0A7, 0x09D,
- 0x017, 0x020, 0x052, 0x04C, 0x0A8, 0x05F, 0x048, 0x004,
- 0x023, 0x009, 0x031, 0x06F, 0x05A, 0x066, 0x080, 0x0AE,
- 0x05A, 0x051, 0x086, 0x060, 0x09F, 0x038, 0x014, 0x0D1,
- 0x036, 0x035, 0x0E4, 0x0A7, 0x09D, 0x017, 0x020, 0x052,
- 0x04C, 0x0A2, 0x045, 0x00D, 0x08B, 0x015, 0x0F4, 0x091,
- 0x0DE, 0x08B, 0x0C9, 0x028, 0x0C2, 0x04C, 0x05B, 0x0D6,
- 0x099, 0x0A9, 0x05C, 0x0B4, 0x0A3, 0x00C, 0x0D6, 0x0F3,
- 0x0A0, 0x0C1, 0x03E, 0x064, 0x00A, 0x068, 0x09B, 0x01A,
- 0x0F1, 0x06D, 0x04C, 0x0AA, 0x092, 0x0E0, 0x036, 0x094,
- 0x070, 0x09B, 0x029, 0x078, 0x013, 0x0AE, 0x0B3, 0x0AA,
- 0x085, 0x0D4, 0x043, 0x075, 0x009, 0x03A, 0x0C9, 0x0EB,
- 0x035, 0x024, 0x0B8, 0x01B, 0x032, 0x08E, 0x013, 0x048,
- 0x07E, 0x04E, 0x0FD, 0x040, 0x0FD, 0x040, 0x0FD, 0x040,
- 0x0FD, 0x040, 0x0FD, 0x040, 0x0FC, 0x013, 0x0F4, 0x021,
- 0x0F9, 0x017, 0x045, 0x08A, 0x030, 0x00B, 0x033, 0x05F,
- 0x083, 0x0A2, 0x02A, 0x030, 0x00B, 0x033, 0x05F, 0x083,
- 0x0A2, 0x0A8, 0x0C0, 0x02D, 0x0B3, 0x020, 0x070, 0x092,
- 0x013, 0x09A, 0x0DE, 0x074, 0x018, 0x027, 0x0CC, 0x0AA,
- 0x068, 0x09B, 0x01A, 0x0F7, 0x007, 0x045, 0x051, 0x080,
- 0x05B, 0x066, 0x047, 0x007, 0x038, 0x0A8, 0x023, 0x0E7,
- 0x051, 0x011, 0x03F, 0x0E0, 0x0E8, 0x085, 0x046, 0x001,
- 0x06D, 0x099, 0x006, 0x012, 0x065, 0x04F, 0x07A, 0x020,
- 0x024, 0x0BA, 0x0B3, 0x032, 0x015, 0x025, 0x07B, 0x0AD,
- 0x033, 0x078, 0x0AE, 0x00E, 0x073, 0x0D0, 0x047, 0x0CE,
- 0x0A7, 0x030, 0x0CC, 0x044, 0x0FF, 0x083, 0x0A2, 0x0A8,
- 0x0C0, 0x02C, 0x0D9, 0x091, 0x0C1, 0x0D1, 0x015, 0x018,
- 0x005, 0x09B, 0x032, 0x008, 0x0BA, 0x02C, 0x051, 0x080,
- 0x059, 0x0B3, 0x020, 0x070, 0x092, 0x0E2, 0x098, 0x089,
- 0x0FD, 0x0BC, 0x0EE, 0x018, 0x090, 0x0FC, 0x08B, 0x0A2,
- 0x0C5, 0x02B, 0x00D, 0x078, 0x03A, 0x022, 0x0A5, 0x061,
- 0x0AF, 0x007, 0x045, 0x051, 0x080, 0x05B, 0x066, 0x044,
- 0x09E, 0x0B3, 0x052, 0x04B, 0x083, 0x0AD, 0x0C7, 0x009,
- 0x0BE, 0x01F, 0x09F, 0x074, 0x065, 0x05D, 0x00A, 0x017,
- 0x07C, 0x0AB, 0x0A0, 0x0C2, 0x04C, 0x038, 0x049, 0x012,
- 0x02E, 0x038, 0x049, 0x007, 0x0A3, 0x00C, 0x0C1, 0x03E,
- 0x065, 0x053, 0x044, 0x0D8, 0x0D7, 0x0AD, 0x0E7, 0x000,
- 0x032, 0x04B, 0x09B, 0x033, 0x034, 0x04A, 0x003, 0x000,
- 0x09D, 0x025, 0x0CE, 0x083, 0x024, 0x0B8, 0x019, 0x099,
- 0x08C, 0x002, 0x012, 0x04B, 0x0A1, 0x099, 0x0D8, 0x0C0,
- 0x027, 0x049, 0x073, 0x0CF, 0x0F9, 0x03C, 0x0F4, 0x07C,
- 0x0E7, 0x098, 0x004, 0x0E9, 0x02E, 0x07F, 0x039, 0x0E3,
- 0x04F, 0x046, 0x053, 0x0C0, 0x060, 0x013, 0x0A4, 0x0B9,
- 0x0E5, 0x03C, 0x003, 0x0DE, 0x08F, 0x09C, 0x0F3, 0x000,
- 0x09C, 0x06F, 0x0CF, 0x03E, 0x085, 0x0F9, 0x0A3, 0x036,
- 0x002, 0x01E, 0x060, 0x038, 0x092, 0x03E, 0x063, 0x01A,
- 0x010, 0x09F, 0x0CF, 0x018, 0x010, 0x092, 0x0BC, 0x0D0,
- 0x0A4, 0x00C, 0x0DC, 0x0C0, 0x00F, 0x09C, 0x097, 0x034,
- 0x062, 0x0B6, 0x0E7, 0x0F3, 0x0F3, 0x0A5, 0x0CF, 0x018,
- 0x042, 0x034, 0x01C, 0x0C2, 0x0CA, 0x0FA, 0x08E, 0x068,
- 0x052, 0x006, 0x0AF, 0x03C, 0x0A3, 0x00D, 0x0BF, 0x09E,
- 0x050, 0x0E1, 0x0D1, 0x073, 0x0CA, 0x0E0, 0x03A, 0x0FC,
- 0x0C1, 0x009, 0x01A, 0x01E, 0x06A, 0x05C, 0x05B, 0x08E,
- 0x063, 0x04E, 0x077, 0x073, 0x0CC, 0x061, 0x067, 0x0DD,
- 0x0E6, 0x06C, 0x048, 0x0D1, 0x0F3, 0x01B, 0x024, 0x069,
- 0x051, 0x008, 0x0D4, 0x042, 0x01B, 0x0F4, 0x067, 0x0D1,
- 0x080, 0x04E, 0x02F, 0x0D0, 0x08C, 0x0D8, 0x030, 0x009,
- 0x0C2, 0x01E, 0x080, 0x01C, 0x046, 0x001, 0x03A, 0x047,
- 0x0D0, 0x031, 0x0A1, 0x006, 0x001, 0x03A, 0x07F, 0x046,
- 0x030, 0x021, 0x018, 0x004, 0x0E9, 0x05E, 0x084, 0x029,
- 0x000, 0x0C0, 0x027, 0x0CD, 0x0D0, 0x000, 0x07C, 0x098,
- 0x004, 0x0F9, 0x02E, 0x084, 0x062, 0x08C, 0x002, 0x07D,
- 0x0BA, 0x03E, 0x07E, 0x04C, 0x002, 0x07D, 0x02E, 0x08C,
- 0x061, 0x008, 0x030, 0x009, 0x0F4, 0x01D, 0x001, 0x065,
- 0x073, 0x000, 0x09F, 0x051, 0x0D0, 0x085, 0x020, 0x018,
- 0x004, 0x0FA, 0x0BD, 0x019, 0x046, 0x018, 0x0C0, 0x027,
- 0x0DF, 0x0D1, 0x094, 0x038, 0x04C, 0x002, 0x07D, 0x017,
- 0x046, 0x057, 0x001, 0x030, 0x009, 0x0F5, 0x0FA, 0x001,
- 0x009, 0x006, 0x001, 0x03E, 0x087, 0x0A1, 0x04B, 0x088,
- 0x0C0, 0x027, 0x0DC, 0x074, 0x00D, 0x039, 0x0D3, 0x000,
- 0x09F, 0x073, 0x0D0, 0x030, 0x0B3, 0x098, 0x004, 0x0FB,
- 0x0BD, 0x006, 0x0C4, 0x083, 0x000, 0x09F, 0x047, 0x0D0,
- 0x036, 0x048, 0x0CC, 0x002, 0x071, 0x0BF, 0x03F, 0x09A,
- 0x017, 0x0E6, 0x03F, 0x008, 0x021, 0x0E6, 0x092, 0x0A4,
- 0x08F, 0x09A, 0x010, 0x031, 0x0A7, 0x0F3, 0x010, 0x0B1,
- 0x084, 0x0AF, 0x03A, 0x0AC, 0x0DC, 0x0F7, 0x073, 0x0F2,
- 0x05C, 0x0C6, 0x02A, 0x0DB, 0x09E, 0x07E, 0x07E, 0x097,
- 0x031, 0x008, 0x063, 0x0D0, 0x073, 0x07B, 0x043, 0x0A8,
- 0x0E6, 0x03D, 0x034, 0x0EA, 0x0F3, 0x0E3, 0x015, 0x0BF,
- 0x09F, 0x018, 0x05F, 0x045, 0x0CF, 0x0E8, 0x09F, 0x05F,
- 0x09A, 0x05B, 0x003, 0x0D0, 0x0F3, 0x0D3, 0x0CE, 0x037,
- 0x01C, 0x0D0, 0x00F, 0x0BB, 0x09E, 0x068, 0x078, 0x03B,
- 0x0BC, 0x0CA, 0x031, 0x0E8, 0x0F9, 0x0A2, 0x002, 0x012,
- 0x0A2, 0x073, 0x051, 0x008, 0x06F, 0x0D1, 0x0F3, 0x046,
- 0x001, 0x038, 0x0BF, 0x040, 0x0FC, 0x023, 0x000, 0x09C,
- 0x021, 0x0E8, 0x049, 0x051, 0x080, 0x04E, 0x091, 0x0F4,
- 0x021, 0x003, 0x019, 0x080, 0x04E, 0x09F, 0x0D0, 0x021,
- 0x063, 0x006, 0x001, 0x03A, 0x056, 0x08C, 0x002, 0x074,
- 0x0FE, 0x075, 0x049, 0x05E, 0x063, 0x0D3, 0x04A, 0x054,
- 0x042, 0x035, 0x013, 0x0A7, 0x0D1, 0x080, 0x04E, 0x095,
- 0x0E8, 0x01E, 0x09A, 0x04C, 0x002, 0x07C, 0x0DD, 0x01B,
- 0x0B9, 0x0E6, 0x001, 0x03E, 0x04B, 0x0A0, 0x062, 0x0A3,
- 0x000, 0x09F, 0x06E, 0x08C, 0x0FC, 0x0F3, 0x000, 0x09F,
- 0x04B, 0x0A0, 0x042, 0x018, 0x0CC, 0x002, 0x07D, 0x007,
- 0x043, 0x0DA, 0x013, 0x000, 0x09F, 0x051, 0x0D0, 0x03D,
- 0x034, 0x098, 0x004, 0x0FA, 0x0BD, 0x01C, 0x062, 0x08C,
- 0x002, 0x07D, 0x0FD, 0x01C, 0x061, 0x073, 0x000, 0x09F,
- 0x045, 0x0D1, 0x0F4, 0x04E, 0x060, 0x013, 0x0EB, 0x0F4,
- 0x025, 0x0B0, 0x033, 0x000, 0x09F, 0x043, 0x0D1, 0x0A7,
- 0x09C, 0x018, 0x004, 0x0FB, 0x08E, 0x084, 0x003, 0x0E9,
- 0x080, 0x04F, 0x0B9, 0x0E8, 0x043, 0x0C1, 0x030, 0x009,
- 0x0F7, 0x07A, 0x00A, 0x031, 0x098, 0x004, 0x0FA, 0x03E,
- 0x084, 0x040, 0x041, 0x080, 0x04E, 0x082, 0x0E7, 0x041,
- 0x087, 0x009, 0x023, 0x004, 0x023, 0x000, 0x09D, 0x005,
- 0x0CE, 0x096, 0x01C, 0x024, 0x08C, 0x010, 0x08C, 0x002,
- 0x074, 0x017, 0x03A, 0x004, 0x038, 0x049, 0x018, 0x021,
- 0x018, 0x004, 0x0E8, 0x02E, 0x074, 0x050, 0x0E1, 0x024,
- 0x060, 0x084, 0x060, 0x013, 0x0A0, 0x0B9, 0x0D4, 0x011,
- 0x0C2, 0x048, 0x0C1, 0x008, 0x0C0, 0x027, 0x041, 0x073,
- 0x0A8, 0x023, 0x084, 0x091, 0x082, 0x011, 0x080, 0x04E,
- 0x082, 0x0E7, 0x052, 0x08E, 0x012, 0x046, 0x008, 0x046,
- 0x001, 0x03A, 0x00B, 0x09D, 0x040, 0x01C, 0x024, 0x08C,
- 0x010, 0x08C, 0x002, 0x074, 0x017, 0x03A, 0x009, 0x00E,
- 0x012, 0x046, 0x008, 0x046, 0x001, 0x03A, 0x00B, 0x098,
- 0x06A, 0x01C, 0x024, 0x0B0, 0x0E1, 0x018, 0x004, 0x0E8,
- 0x02E, 0x06B, 0x050, 0x0E1, 0x025, 0x087, 0x008, 0x0C0,
- 0x027, 0x041, 0x073, 0x005, 0x043, 0x084, 0x096, 0x01C,
- 0x023, 0x000, 0x09D, 0x005, 0x0CC, 0x0AA, 0x01C, 0x024,
- 0x0B0, 0x0E1, 0x018, 0x004, 0x0E8, 0x02E, 0x070, 0x068,
- 0x070, 0x092, 0x0C3, 0x084, 0x060, 0x013, 0x0E5, 0x044,
- 0x0F9, 0x040, 0x09D, 0x005, 0x0CE, 0x05A, 0x01C, 0x024,
- 0x0B0, 0x0E1, 0x018, 0x004, 0x0F9, 0x0D1, 0x03E, 0x070,
- 0x027, 0x0CF, 0x013, 0x0E5, 0x044, 0x02C, 0x0A0, 0x042,
- 0x0CB, 0x089, 0x0F2, 0x021, 0x03A, 0x00B, 0x09C, 0x00A,
- 0x01C, 0x024, 0x0B0, 0x0E1, 0x018, 0x004, 0x0F9, 0x0D1,
- 0x00B, 0x038, 0x010, 0x0B3, 0x0C4, 0x021, 0x039, 0x036,
- 0x05C, 0x042, 0x0C8, 0x084, 0x02B, 0x079, 0x0D0, 0x061,
- 0x0C2, 0x074, 0x015, 0x024, 0x0BA, 0x0D3, 0x031, 0x0E5,
- 0x059, 0x008, 0x029, 0x008, 0x0E0, 0x066, 0x063, 0x042,
- 0x095, 0x012, 0x081, 0x000, 0x029, 0x00B, 0x0C1, 0x051,
- 0x024, 0x0B8, 0x019, 0x099, 0x090, 0x022, 0x090, 0x0B4,
- 0x018, 0x0A0, 0x091, 0x041, 0x001, 0x041, 0x041, 0x041,
- 0x052, 0x083, 0x0CA, 0x040, 0x028, 0x068, 0x029, 0x008,
- 0x0BA, 0x016, 0x010, 0x09C, 0x099, 0x00B, 0x056, 0x094,
- 0x090, 0x052, 0x015, 0x074, 0x0C0, 0x027, 0x01A, 0x02A,
- 0x0D2, 0x090, 0x025, 0x0D3, 0x000, 0x09D, 0x028, 0x0AB,
- 0x04A, 0x042, 0x017, 0x04C, 0x002, 0x070, 0x0D4, 0x084,
- 0x02E, 0x098, 0x004, 0x0E1, 0x02A, 0x042, 0x017, 0x04C,
- 0x002, 0x070, 0x082, 0x090, 0x04B, 0x0A6, 0x001, 0x038,
- 0x051, 0x048, 0x042, 0x0E9, 0x080, 0x04E, 0x015, 0x0A4,
- 0x021, 0x074, 0x0C0, 0x027, 0x00F, 0x0A4, 0x012, 0x0E9,
- 0x080, 0x04E, 0x082, 0x0AC, 0x080, 0x0AC, 0x0A0, 0x0AC,
- 0x0A9, 0x059, 0x0E5, 0x064, 0x045, 0x065, 0x0CA, 0x0C8,
- 0x04A, 0x0CE, 0x00A, 0x0CE, 0x04A, 0x0CE, 0x095, 0x091,
- 0x095, 0x094, 0x095, 0x093, 0x029, 0x025, 0x0C0, 0x0CC,
- 0x0CC, 0x088, 0x0A4, 0x097, 0x056, 0x036, 0x064, 0x072,
- 0x090, 0x054, 0x08A, 0x09C, 0x045, 0x008, 0x0B9, 0x0B7,
- 0x066, 0x012, 0x093, 0x009, 0x0C9, 0x0B2, 0x074, 0x08E,
- 0x0BA, 0x060, 0x013, 0x0E5, 0x034, 0x08E, 0x0BA, 0x060,
- 0x013, 0x0E4, 0x074, 0x08E, 0x0BA, 0x060, 0x013, 0x0E5,
- 0x069, 0x01D, 0x074, 0x0C0, 0x027, 0x0CA, 0x029, 0x01D,
- 0x074, 0x0C0, 0x027, 0x0CE, 0x0D2, 0x025, 0x0D3, 0x000,
- 0x09F, 0x038, 0x0A4, 0x04B, 0x0A6, 0x001, 0x03E, 0x05E,
- 0x091, 0x02E, 0x098, 0x004, 0x0F9, 0x015, 0x022, 0x05D,
- 0x030, 0x009, 0x0F3, 0x0E9, 0x012, 0x0E9, 0x080, 0x04F,
- 0x090, 0x052, 0x025, 0x0D3, 0x000, 0x09D, 0x0C5, 0x048,
- 0x025, 0x0D3, 0x000, 0x09C, 0x045, 0x0CE, 0x0CD, 0x009,
- 0x0C9, 0x0B2, 0x01A, 0x044, 0x0BA, 0x060, 0x013, 0x0E7,
- 0x034, 0x089, 0x074, 0x0C0, 0x027, 0x01C, 0x027, 0x0B7,
- 0x09C, 0x080, 0x0C2, 0x0D7, 0x076, 0x059, 0x09B, 0x093,
- 0x00C, 0x064, 0x0C3, 0x01D, 0x01B, 0x0F4, 0x045, 0x04B,
- 0x0C7, 0x0C6, 0x03A, 0x037, 0x0E8, 0x081, 0x04B, 0x0C7,
- 0x0C6, 0x03A, 0x037, 0x0E8, 0x091, 0x04B, 0x0C7, 0x0C6,
- 0x032, 0x061, 0x08E, 0x0B3, 0x0BC, 0x0C3, 0x04A, 0x022,
- 0x0E6, 0x0B5, 0x024, 0x097, 0x071, 0x0C9, 0x087, 0x0B4,
- 0x031, 0x0AE, 0x073, 0x0A2, 0x0CF, 0x039, 0x0D2, 0x05D,
- 0x004, 0x044, 0x042, 0x0C0, 0x0D6, 0x0DE, 0x071, 0x006,
- 0x016, 0x0BB, 0x0DB, 0x0CE, 0x083, 0x00C, 0x064, 0x0C3,
- 0x01D, 0x031, 0x013, 0x004, 0x0F9, 0x095, 0x04D, 0x013,
- 0x032, 0x093, 0x063, 0x05E, 0x066, 0x014, 0x0CC, 0x029,
- 0x02A, 0x053, 0x030, 0x0A6, 0x061, 0x04C, 0x0C2, 0x099,
- 0x085, 0x03A, 0x072, 0x0CC, 0x0C2, 0x099, 0x085, 0x006,
- 0x01B, 0x0B3, 0x00A, 0x066, 0x014, 0x014, 0x024, 0x099,
- 0x085, 0x033, 0x00A, 0x008, 0x0B1, 0x086, 0x061, 0x04C,
- 0x0C2, 0x084, 0x021, 0x068, 0x073, 0x03B, 0x030, 0x0A6,
- 0x061, 0x041, 0x04E, 0x0A5, 0x098, 0x053, 0x030, 0x0AC,
- 0x059, 0x076, 0x061, 0x04C, 0x0C2, 0x0B0, 0x08D, 0x0D6,
- 0x061, 0x04C, 0x0C2, 0x0B0, 0x02C, 0x0F6, 0x061, 0x04C,
- 0x0C2, 0x0B1, 0x08C, 0x0A5, 0x098, 0x053, 0x030, 0x0AC,
- 0x00F, 0x024, 0x0CC, 0x029, 0x098, 0x056, 0x00F, 0x028,
- 0x066, 0x015, 0x092, 0x01A, 0x019, 0x085, 0x033, 0x00A,
- 0x0CA, 0x085, 0x00C, 0x0C2, 0x099, 0x085, 0x065, 0x0C3,
- 0x0D9, 0x085, 0x033, 0x00A, 0x0CE, 0x070, 0x086, 0x061,
- 0x04C, 0x0C2, 0x0B3, 0x097, 0x071, 0x00C, 0x099, 0x03B,
- 0x0CC, 0x083, 0x058, 0x00B, 0x0EA, 0x077, 0x09D, 0x006,
- 0x04A, 0x0BE, 0x004, 0x074, 0x060, 0x0E0, 0x0D1, 0x04E,
- 0x038, 0x04C, 0x03E, 0x0EE, 0x03E, 0x0EE, 0x03E, 0x0EE,
- 0x03E, 0x0EE, 0x030, 0x0BB, 0x0CA, 0x0E1, 0x01F, 0x077,
- 0x01F, 0x077, 0x01F, 0x077, 0x01F, 0x077, 0x027, 0x070,
- 0x08F, 0x0BB, 0x080, 0x00E, 0x011, 0x0F7, 0x071, 0x0F7,
- 0x07C, 0x06F, 0x03C, 0x0B3, 0x036, 0x002, 0x0FB, 0x08D,
- 0x0E6, 0x055, 0x070, 0x07F, 0x02D, 0x024, 0x069, 0x055,
- 0x04F, 0x058, 0x0A9, 0x023, 0x01F, 0x054, 0x0F7, 0x08A,
- 0x095, 0x025, 0x02B, 0x075, 0x00C, 0x0CC, 0x0AC, 0x056,
- 0x051, 0x0CC, 0x051, 0x0E4, 0x045, 0x0CE, 0x0A2, 0x012,
- 0x039, 0x0C0, 0x0A0, 0x0AF, 0x056, 0x06A, 0x049, 0x07F,
- 0x002, 0x08C, 0x009, 0x0F8, 0x00B, 0x0EB, 0x0AF, 0x056,
- 0x076, 0x067, 0x052, 0x0B2, 0x08E, 0x069, 0x0A7, 0x011,
- 0x073, 0x0A8, 0x0B1, 0x0BC, 0x0CA, 0x0A0, 0x0A9, 0x036,
- 0x050, 0x02C, 0x098, 0x0E7, 0x00A, 0x0F5, 0x066, 0x0A4,
- 0x097, 0x0E2, 0x05A, 0x030, 0x027, 0x0BA, 0x0F7, 0x083,
- 0x04E, 0x0A5, 0x033, 0x00A, 0x066, 0x015, 0x08D, 0x0E6,
- 0x055, 0x039, 0x0D2, 0x0A7, 0x0AC, 0x054, 0x060, 0x016,
- 0x070, 0x01B, 0x072, 0x08E, 0x062, 0x08F, 0x022, 0x02E,
- 0x075, 0x016, 0x002, 0x0FB, 0x08D, 0x0E6, 0x00A, 0x095,
- 0x03D, 0x062, 0x0A3, 0x000, 0x0B7, 0x001, 0x0B5, 0x053,
- 0x0DE, 0x02A, 0x054, 0x094, 0x0AD, 0x0D4, 0x033, 0x032,
- 0x0B1, 0x059, 0x047, 0x031, 0x047, 0x091, 0x017, 0x03A,
- 0x088, 0x048, 0x0E7, 0x002, 0x0B0, 0x017, 0x0DC, 0x067,
- 0x09D, 0x04B, 0x08D, 0x0E7, 0x052, 0x0AA, 0x07B, 0x0D4,
- 0x0AA, 0x092, 0x0BD, 0x0D6, 0x099, 0x0BC, 0x056, 0x002,
- 0x0FB, 0x08C, 0x0F3, 0x066, 0x066, 0x0C6, 0x0F3, 0x066,
- 0x066, 0x062, 0x099, 0x02A, 0x0F8, 0x018, 0x068, 0x070,
- 0x0B0, 0x08A, 0x00D, 0x055, 0x055, 0x055, 0x055, 0x052,
- 0x032, 0x0E1, 0x040, 0x05C, 0x038, 0x00B, 0x0EA, 0x09B,
- 0x087, 0x001, 0x07D, 0x0C0, 0x05F, 0x070, 0x017, 0x0DC,
- 0x005, 0x0F5, 0x0DC, 0x09B, 0x001, 0x07D, 0x061, 0x04D,
- 0x080, 0x0BE, 0x0A7, 0x079, 0x082, 0x0A2, 0x01F, 0x050,
- 0x015, 0x02A, 0x08F, 0x08B, 0x01C, 0x0E5, 0x0A5, 0x013,
- 0x084, 0x058, 0x0E7, 0x002, 0x091, 0x054, 0x005, 0x002,
- 0x04B, 0x0BD, 0x022, 0x01A, 0x094, 0x07F, 0x09C, 0x01A,
- 0x0C0, 0x05F, 0x042, 0x01A, 0x021, 0x0D1, 0x080, 0x059,
- 0x0C0, 0x06D, 0x01C, 0x02C, 0x00A, 0x083, 0x055, 0x055,
- 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055,
- 0x055, 0x054, 0x01C, 0x0B8, 0x05C, 0x06E, 0x017, 0x09C,
- 0x02F, 0x038, 0x05E, 0x070, 0x0E7, 0x0B8, 0x05E, 0x070,
- 0x0BC, 0x0E1, 0x079, 0x0C2, 0x0F3, 0x085, 0x0E7, 0x00B,
- 0x0CE, 0x017, 0x09C, 0x029, 0x09C, 0x029, 0x09C, 0x029,
- 0x09C, 0x023, 0x00F, 0x058, 0x014, 0x0EE, 0x035, 0x077,
- 0x026, 0x021, 0x093, 0x005, 0x0C9, 0x0B0, 0x017, 0x0D2,
- 0x01D, 0x018, 0x08A, 0x021, 0x093, 0x005, 0x0C9, 0x0B0,
- 0x017, 0x0D1, 0x087, 0x0AC, 0x00A, 0x074, 0x00F, 0x0AE,
- 0x0F5, 0x05A, 0x082, 0x0A3, 0x0E4, 0x03A, 0x031, 0x014,
- 0x0BB, 0x0D7, 0x059, 0x099, 0x074, 0x0A2, 0x019, 0x030,
- 0x05C, 0x09B, 0x001, 0x07D, 0x018, 0x07A, 0x0C0, 0x0A7,
- 0x040, 0x0F8, 0x043, 0x0D4, 0x063, 0x089, 0x025, 0x0D0,
- 0x010, 0x0D6, 0x01C, 0x06A, 0x010, 0x0F5, 0x055, 0x089,
- 0x025, 0x0D1, 0x051, 0x066, 0x01F, 0x051, 0x0F5, 0x091,
- 0x049, 0x02E, 0x089, 0x015, 0x098, 0x06A, 0x0A3, 0x0E0,
- 0x08A, 0x094, 0x065, 0x064, 0x00E, 0x013, 0x017, 0x038,
- 0x0A8, 0x086, 0x04C, 0x017, 0x026, 0x0C0, 0x05F, 0x046,
- 0x01E, 0x0B0, 0x028, 0x063, 0x01F, 0x008, 0x07A, 0x08C,
- 0x071, 0x024, 0x0BA, 0x002, 0x01A, 0x0D0, 0x00D, 0x042,
- 0x01E, 0x0AA, 0x0B1, 0x024, 0x0BA, 0x02A, 0x02D, 0x031,
- 0x0F5, 0x01F, 0x058, 0x074, 0x092, 0x0E8, 0x087, 0x05A,
- 0x063, 0x052, 0x0DE, 0x0F4, 0x051, 0x069, 0x04A, 0x03E,
- 0x009, 0x069, 0x046, 0x050, 0x0F0, 0x0E1, 0x031, 0x073,
- 0x005, 0x045, 0x0BD, 0x059, 0x08D, 0x08B, 0x04A, 0x07C,
- 0x0D3, 0x0ED, 0x038, 0x0E9, 0x0D3, 0x04E, 0x074, 0x0ED,
- 0x044, 0x032, 0x060, 0x0B9, 0x036, 0x002, 0x0FA, 0x05B,
- 0x0DE, 0x08A, 0x02D, 0x029, 0x0D0, 0x0E1, 0x021, 0x0F5,
- 0x0A3, 0x092, 0x021, 0x0F2, 0x019, 0x030, 0x05C, 0x09B,
- 0x001, 0x07D, 0x021, 0x0F5, 0x0A0, 0x0C6, 0x001, 0x067,
- 0x001, 0x0B4, 0x045, 0x0CE, 0x0A5, 0x012, 0x039, 0x0D4,
- 0x01C, 0x005, 0x0F4, 0x040, 0x0A1, 0x0C2, 0x0C3, 0x050,
- 0x06A, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA,
- 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x081, 0x0AF,
- 0x086, 0x09F, 0x019, 0x01B, 0x0E7, 0x081, 0x0F3, 0x065,
- 0x0F2, 0x080, 0x0BE, 0x070, 0x017, 0x0DF, 0x0DF, 0x038,
- 0x00B, 0x0EB, 0x00D, 0x0C3, 0x080, 0x0BE, 0x0A7, 0x00F,
- 0x095, 0x04F, 0x05A, 0x094, 0x0C0, 0x02C, 0x0D8, 0x0B1,
- 0x0A7, 0x0CE, 0x05A, 0x011, 0x073, 0x0A8, 0x03A, 0x0C2,
- 0x0CC, 0x0B6, 0x030, 0x017, 0x0DC, 0x06F, 0x035, 0x0A9,
- 0x080, 0x04D, 0x0A7, 0x0CE, 0x02A, 0x018, 0x079, 0x0C5,
- 0x049, 0x0DE, 0x061, 0x0A8, 0x022, 0x0E7, 0x050, 0x033,
- 0x0F9, 0x098, 0x064, 0x008, 0x0B9, 0x095, 0x042, 0x0FC,
- 0x0CC, 0x0D9, 0x095, 0x03D, 0x062, 0x0A2, 0x048, 0x0D4,
- 0x048, 0x0E7, 0x002, 0x088, 0x0B9, 0x0C1, 0x0A0, 0x0E3,
- 0x09D, 0x04E, 0x062, 0x0E6, 0x0CC, 0x0C6, 0x06B, 0x0CE,
- 0x083, 0x010, 0x0C9, 0x082, 0x0E4, 0x0DA, 0x0C2, 0x0C8,
- 0x01E, 0x0C3, 0x0B9, 0x036, 0x002, 0x0FA, 0x0A9, 0x0EB,
- 0x04E, 0x030, 0x030, 0x0FA, 0x00D, 0x0F0, 0x0A9, 0x0EB,
- 0x040, 0x0B9, 0x00F, 0x0AA, 0x07A, 0x0D2, 0x0C2, 0x0C8,
- 0x0FA, 0x0A7, 0x0AD, 0x041, 0x00A, 0x047, 0x0D5, 0x03D,
- 0x068, 0x0AC, 0x0F1, 0x0F5, 0x04F, 0x05A, 0x097, 0x054,
- 0x07D, 0x04F, 0x0A8, 0x0AA, 0x055, 0x01F, 0x011, 0x073,
- 0x05A, 0x0B0, 0x017, 0x0DE, 0x05D, 0x059, 0x0A9, 0x025,
- 0x0D0, 0x055, 0x02A, 0x046, 0x0BC, 0x0B8, 0x022, 0x0AE,
- 0x045, 0x029, 0x03E, 0x014, 0x0FA, 0x0E1, 0x099, 0x094,
- 0x0CA, 0x04A, 0x0BE, 0x03D, 0x0D6, 0x099, 0x092, 0x05D,
- 0x015, 0x017, 0x0C8, 0x0D7, 0x0DC, 0x015, 0x017, 0x08A,
- 0x040, 0x01F, 0x00A, 0x09E, 0x0AC, 0x0C9, 0x065, 0x049,
- 0x05C, 0x01D, 0x010, 0x068, 0x04A, 0x03E, 0x05B, 0x0DE,
- 0x083, 0x016, 0x095, 0x080, 0x0BE, 0x091, 0x074, 0x058,
- 0x0A4, 0x000, 0x07C, 0x038, 0x0E7, 0x056, 0x030, 0x017,
- 0x0DF, 0x075, 0x0A6, 0x064, 0x097, 0x045, 0x020, 0x09D,
- 0x003, 0x05F, 0x070, 0x054, 0x05E, 0x029, 0x01D, 0x0F0,
- 0x0A9, 0x0EA, 0x0CC, 0x086, 0x054, 0x095, 0x0C1, 0x0D1,
- 0x006, 0x083, 0x00F, 0x0AA, 0x07B, 0x0D0, 0x065, 0x049,
- 0x045, 0x0BD, 0x0E9, 0x062, 0x0D2, 0x091, 0x0DF, 0x004,
- 0x05D, 0x016, 0x029, 0x01C, 0x07D, 0x04F, 0x0AC, 0x01A,
- 0x047, 0x01A, 0x0A9, 0x0F5, 0x067, 0x066, 0x053, 0x028,
- 0x0B7, 0x0BD, 0x02C, 0x05A, 0x052, 0x03B, 0x0E3, 0x0DD,
- 0x059, 0x0A9, 0x025, 0x0D1, 0x0A8, 0x0AC, 0x008, 0x06B,
- 0x0EE, 0x008, 0x0AB, 0x0C5, 0x020, 0x02F, 0x085, 0x04F,
- 0x056, 0x066, 0x075, 0x049, 0x05C, 0x01C, 0x018, 0x01D,
- 0x081, 0x0C2, 0x064, 0x005, 0x0F0, 0x080, 0x0BE, 0x035,
- 0x05C, 0x0D0, 0x017, 0x0C2, 0x055, 0x0F0, 0x095, 0x07C,
- 0x025, 0x05F, 0x008, 0x00B, 0x0E1, 0x001, 0x07C, 0x07B,
- 0x0AB, 0x035, 0x024, 0x0BA, 0x010, 0x055, 0x093, 0x01A,
- 0x0FB, 0x082, 0x02A, 0x0F1, 0x048, 0x0D7, 0x0C2, 0x0A7,
- 0x0AB, 0x031, 0x0B2, 0x0A4, 0x0AC, 0x063, 0x09D, 0x04A,
- 0x08D, 0x07C, 0x07B, 0x0AB, 0x035, 0x024, 0x0BA, 0x010,
- 0x054, 0x030, 0x08D, 0x07D, 0x0C1, 0x015, 0x078, 0x0AC,
- 0x06F, 0x05A, 0x094, 0x060, 0x01A, 0x0E3, 0x079, 0x0D4,
- 0x0AA, 0x04F, 0x085, 0x04F, 0x056, 0x066, 0x0D5, 0x049,
- 0x058, 0x0C7, 0x03A, 0x095, 0x049, 0x0F0, 0x045, 0x0D1,
- 0x062, 0x094, 0x086, 0x0BC, 0x01D, 0x013, 0x0D2, 0x090,
- 0x0FF, 0x0CF, 0x07A, 0x083, 0x0F2, 0x050, 0x031, 0x0DE,
- 0x000, 0x060, 0x060, 0x0A1, 0x017, 0x035, 0x0A8, 0x05F,
- 0x09B, 0x01B, 0x037, 0x007, 0x044, 0x01A, 0x030, 0x00B,
- 0x038, 0x00D, 0x0BC, 0x01C, 0x0E0, 0x0D0, 0x047, 0x0CE,
- 0x0A0, 0x0AA, 0x07A, 0x0A1, 0x098, 0x06A, 0x092, 0x095,
- 0x03D, 0x068, 0x031, 0x080, 0x05B, 0x080, 0x0DA, 0x0A9,
- 0x0EF, 0x041, 0x095, 0x025, 0x016, 0x0F7, 0x0A5, 0x08B,
- 0x04A, 0x0C6, 0x079, 0x0B3, 0x033, 0x060, 0x02F, 0x0AA,
- 0x09E, 0x0B1, 0x051, 0x080, 0x059, 0x09E, 0x0CA, 0x0A7,
- 0x0AC, 0x00A, 0x030, 0x00B, 0x067, 0x0B2, 0x0AD, 0x0D5,
- 0x0DA, 0x092, 0x05D, 0x017, 0x0A3, 0x000, 0x0B3, 0x02D,
- 0x095, 0x06E, 0x008, 0x0A9, 0x058, 0x0A1, 0x017, 0x03A,
- 0x08B, 0x001, 0x07D, 0x054, 0x0F7, 0x08E, 0x095, 0x025,
- 0x008, 0x01C, 0x0E0, 0x056, 0x002, 0x0FB, 0x0C1, 0x0D1,
- 0x015, 0x018, 0x005, 0x092, 0x06B, 0x03C, 0x01D, 0x012,
- 0x028, 0x0C0, 0x02C, 0x0A5, 0x06C, 0x011, 0x070, 0x017,
- 0x0B2, 0x038, 0x04D, 0x080, 0x0BE, 0x0E0, 0x02F, 0x0B4,
- 0x0EC, 0x04A, 0x0ED, 0x0B3, 0x09E, 0x002, 0x0FB, 0x080,
- 0x0BE, 0x0E0, 0x02F, 0x0B1, 0x039, 0x093, 0x03E, 0x06D,
- 0x0E7, 0x010, 0x060, 0x09F, 0x032, 0x0A9, 0x0A2, 0x06C,
- 0x005, 0x0F4, 0x040, 0x0E6, 0x00A, 0x095, 0x03D, 0x06A,
- 0x023, 0x000, 0x0B3, 0x080, 0x0DA, 0x0A7, 0x0D6, 0x02A,
- 0x003, 0x00D, 0x070, 0x017, 0x0D2, 0x02E, 0x076, 0x029,
- 0x04F, 0x0BC, 0x054, 0x0A6, 0x051, 0x06F, 0x07A, 0x058,
- 0x0B4, 0x0AC, 0x005, 0x0F4, 0x08B, 0x0A2, 0x0F4, 0x00E,
- 0x035, 0x00D, 0x049, 0x02E, 0x0B4, 0x0CC, 0x018, 0x0A5,
- 0x0C8, 0x0F8, 0x04A, 0x097, 0x023, 0x0E1, 0x005, 0x02E,
- 0x047, 0x0C2, 0x08A, 0x05C, 0x08F, 0x085, 0x069, 0x072,
- 0x03E, 0x01F, 0x04A, 0x0C3, 0x055, 0x01F, 0x056, 0x043,
- 0x032, 0x08C, 0x0A3, 0x05E, 0x060, 0x0A8, 0x045, 0x0CE,
- 0x00D, 0x060, 0x02F, 0x0A3, 0x084, 0x09D, 0x0D8, 0x0F0,
- 0x017, 0x0D2, 0x02E, 0x00E, 0x01B, 0x023, 0x084, 0x0D8,
- 0x00B, 0x0EB, 0x089, 0x0F3, 0x080, 0x0BE, 0x0E0, 0x02F,
- 0x0BB, 0x039, 0x085, 0x0DF, 0x022, 0x003, 0x0E7, 0x001,
- 0x07D, 0x0C0, 0x05F, 0x070, 0x017, 0x0D1, 0x017, 0x038,
- 0x014, 0x05B, 0x0D6, 0x0A2, 0x074, 0x00D, 0x04B, 0x07A,
- 0x0B3, 0x031, 0x096, 0x094, 0x06B, 0x0CC, 0x035, 0x023,
- 0x0D7, 0x049, 0x048, 0x015, 0x073, 0x029, 0x00F, 0x05D,
- 0x08A, 0x0C0, 0x05F, 0x04D, 0x079, 0x084, 0x035, 0x080,
- 0x0BE, 0x088, 0x01C, 0x0C3, 0x052, 0x09F, 0x059, 0x068,
- 0x0C0, 0x02C, 0x0E0, 0x036, 0x0AA, 0x07B, 0x0CD, 0x04A,
- 0x092, 0x0BE, 0x0F3, 0x081, 0x04A, 0x07D, 0x05B, 0x059,
- 0x094, 0x0CA, 0x01C, 0x024, 0x0EE, 0x0C7, 0x080, 0x0BE,
- 0x088, 0x01C, 0x0C3, 0x052, 0x09F, 0x059, 0x068, 0x0C0,
- 0x02C, 0x0E0, 0x036, 0x0AA, 0x07B, 0x0CD, 0x04A, 0x092,
- 0x0BE, 0x0F3, 0x081, 0x043, 0x084, 0x09C, 0x07B, 0x038,
- 0x00B, 0x0EB, 0x0AF, 0x070, 0x0D4, 0x0EA, 0x053, 0x000,
- 0x09B, 0x04F, 0x09C, 0x054, 0x030, 0x0F3, 0x08A, 0x094,
- 0x0FA, 0x0B6, 0x0B3, 0x029, 0x094, 0x022, 0x0E6, 0x01A,
- 0x085, 0x0F9, 0x0B0, 0x059, 0x093, 0x0F9, 0x0D2, 0x0C4,
- 0x032, 0x060, 0x0B9, 0x036, 0x0B0, 0x0B3, 0x090, 0x0D9,
- 0x077, 0x026, 0x01C, 0x027, 0x022, 0x0E8, 0x096, 0x0B4,
- 0x023, 0x0EA, 0x09E, 0x0B5, 0x011, 0x080, 0x059, 0x065,
- 0x086, 0x020, 0x073, 0x096, 0x08D, 0x079, 0x0AD, 0x058,
- 0x00B, 0x0E9, 0x017, 0x044, 0x08A, 0x04A, 0x007, 0x0D7,
- 0x07A, 0x082, 0x0A1, 0x090, 0x0FA, 0x0EF, 0x001, 0x054,
- 0x0BA, 0x050, 0x0D4, 0x059, 0x01E, 0x02C, 0x0E9, 0x0F3,
- 0x08A, 0x099, 0x085, 0x06B, 0x00B, 0x023, 0x015, 0x097,
- 0x072, 0x061, 0x017, 0x030, 0x0D4, 0x02C, 0x073, 0x087,
- 0x048, 0x0AA, 0x002, 0x081, 0x025, 0x0DE, 0x091, 0x00D,
- 0x04A, 0x0C0, 0x05F, 0x07E, 0x0D2, 0x080, 0x0A5, 0x03E,
- 0x0B2, 0x0D0, 0x0C8, 0x06B, 0x080, 0x0BE, 0x088, 0x01C,
- 0x0EA, 0x009, 0x017, 0x044, 0x01A, 0x037, 0x01A, 0x091,
- 0x074, 0x058, 0x0A3, 0x071, 0x0AF, 0x007, 0x044, 0x054,
- 0x06E, 0x035, 0x0E0, 0x0E8, 0x0AA, 0x064, 0x00F, 0x090,
- 0x0FA, 0x0D0, 0x063, 0x000, 0x0B3, 0x080, 0x0DA, 0x02C,
- 0x073, 0x087, 0x048, 0x0AA, 0x002, 0x081, 0x025, 0x0DE,
- 0x091, 0x00D, 0x04A, 0x0C0, 0x05F, 0x048, 0x0BA, 0x027,
- 0x0A3, 0x000, 0x0B7, 0x001, 0x0B7, 0x04F, 0x09C, 0x0B4,
- 0x06B, 0x0CC, 0x035, 0x016, 0x0F5, 0x066, 0x063, 0x02D,
- 0x029, 0x01E, 0x0BA, 0x04A, 0x040, 0x0AB, 0x099, 0x048,
- 0x07A, 0x0EC, 0x050, 0x08B, 0x09C, 0x008, 0x022, 0x0FC,
- 0x0F9, 0x0B2, 0x055, 0x03D, 0x062, 0x0A9, 0x023, 0x051,
- 0x023, 0x09C, 0x00A, 0x03C, 0x073, 0x00D, 0x044, 0x05C,
- 0x0E1, 0x050, 0x071, 0x0CE, 0x0A1, 0x01F, 0x0E7, 0x015,
- 0x06B, 0x00B, 0x025, 0x0ED, 0x00B, 0x093, 0x060, 0x02F,
- 0x0AA, 0x09E, 0x0AC, 0x036, 0x065, 0x049, 0x05F, 0x07A,
- 0x020, 0x050, 0x008, 0x07F, 0x0EF, 0x039, 0x014, 0x049,
- 0x001, 0x011, 0x081, 0x004, 0x060, 0x040, 0x0CC, 0x059,
- 0x0C0, 0x0AD, 0x023, 0x0EB, 0x041, 0x0B0, 0x081, 0x0F2,
- 0x03A, 0x041, 0x0AA, 0x050, 0x043, 0x0E4, 0x0D4, 0x086,
- 0x054, 0x0A0, 0x087, 0x0C1, 0x052, 0x0CA, 0x093, 0x001,
- 0x032, 0x054, 0x09D, 0x024, 0x002, 0x000, 0x000, 0x052,
- 0x0AF, 0x016, 0x046, 0x0A7, 0x091, 0x067, 0x008, 0x0B4,
- 0x004, 0x051, 0x0F1, 0x065, 0x019, 0x0B4, 0x06E, 0x02D,
- 0x0C0, 0x0AD, 0x049, 0x000, 0x092, 0x057, 0x01B, 0x074,
- 0x045, 0x05F, 0x023, 0x051, 0x0B7, 0x044, 0x00A, 0x010,
- 0x006, 0x0A3, 0x06E, 0x08B, 0x06B, 0x008, 0x01F, 0x019,
- 0x0D1, 0x0E6, 0x080, 0x082, 0x080, 0x054, 0x004, 0x02A,
- 0x045, 0x091, 0x0A9, 0x0E4, 0x059, 0x0C2, 0x02D, 0x001,
- 0x014, 0x004, 0x050, 0x0D3, 0x0FC, 0x055, 0x084, 0x061,
- 0x0D9, 0x080, 0x051, 0x02F, 0x0E2, 0x01F, 0x046, 0x05F,
- 0x040, 0x0E0, 0x020, 0x015, 0x04A, 0x0BC, 0x059, 0x01A,
- 0x09E, 0x045, 0x09C, 0x022, 0x0D0, 0x011, 0x048, 0x0CB,
- 0x0E8, 0x014, 0x008, 0x001, 0x054, 0x015, 0x0E2, 0x0C8,
- 0x0D4, 0x0F2, 0x02C, 0x0E1, 0x016, 0x080, 0x08A, 0x046,
- 0x05F, 0x052, 0x07C, 0x0D9, 0x0A8, 0x0F8, 0x088, 0x0D0,
- 0x05A, 0x03C, 0x0D2, 0x05C, 0x05B, 0x080, 0x0DA, 0x0A7,
- 0x0D6, 0x05A, 0x008, 0x086, 0x0A4, 0x05D, 0x017, 0x0A0,
- 0x0C3, 0x052, 0x02E, 0x088, 0x0A8, 0x022, 0x01F, 0x053,
- 0x0EA, 0x0DA, 0x0CC, 0x0A6, 0x050, 0x0E1, 0x027, 0x076,
- 0x03C, 0x005, 0x0F5, 0x04F, 0x0AB, 0x06B, 0x032, 0x099,
- 0x043, 0x084, 0x09C, 0x07B, 0x038, 0x00B, 0x0E9, 0x027,
- 0x0AC, 0x0D4, 0x092, 0x0E0, 0x00E, 0x0DA, 0x038, 0x04D,
- 0x080, 0x0BE, 0x0E6, 0x07D, 0x050, 0x0BA, 0x051, 0x0AE,
- 0x066, 0x0EF, 0x0BC, 0x0DC, 0x07B, 0x087, 0x01E, 0x002,
- 0x0FA, 0x093, 0x0E6, 0x0CD, 0x047, 0x0C4, 0x043, 0x0CD,
- 0x00F, 0x034, 0x09D, 0x0A3, 0x000, 0x0B0, 0x055, 0x001,
- 0x0AE, 0x003, 0x084, 0x004, 0x0CE, 0x001, 0x0D0, 0x0E1,
- 0x070, 0x002, 0x080, 0x00E, 0x089, 0x0E9, 0x022, 0x01F,
- 0x0E0, 0x0E8, 0x096, 0x0B0, 0x011, 0x0F4, 0x0C2, 0x0CE,
- 0x003, 0x06A, 0x044, 0x02D, 0x0C0, 0x06D, 0x048, 0x005,
- 0x0B8, 0x00D, 0x0A3, 0x000, 0x0B7, 0x076, 0x0D5, 0x0DE,
- 0x0B1, 0x050, 0x0DC, 0x07D, 0x077, 0x0BC, 0x054, 0x0BA,
- 0x052, 0x07F, 0x058, 0x014, 0x034, 0x00F, 0x09A, 0x0F3,
- 0x081, 0x058, 0x00B, 0x0EA, 0x0EF, 0x058, 0x014, 0x060,
- 0x016, 0x0A5, 0x06C, 0x02E, 0x0F7, 0x081, 0x04B, 0x0A5,
- 0x06F, 0x07D, 0x05D, 0x0EE, 0x0B5, 0x02E, 0x095, 0x080,
- 0x0BE, 0x0F0, 0x073, 0x0BD, 0x004, 0x07C, 0x0EA, 0x0FE,
- 0x0EB, 0x04C, 0x0DE, 0x029, 0x053, 0x0DD, 0x06A, 0x054,
- 0x094, 0x0A9, 0x0EA, 0x00A, 0x08C, 0x002, 0x0D6, 0x04C,
- 0x03C, 0x005, 0x0F4, 0x000, 0x0EA, 0x0CD, 0x056, 0x0AF,
- 0x0C0, 0x047, 0x0D2, 0x09C, 0x08D, 0x029, 0x0CA, 0x0E0,
- 0x02F, 0x0AE, 0x0BD, 0x075, 0x099, 0x09D, 0x04A, 0x0F9,
- 0x0EF, 0x051, 0x07C, 0x094, 0x00C, 0x077, 0x080, 0x018,
- 0x018, 0x029, 0x02A, 0x0F8, 0x0E0, 0x0E8, 0x0AA, 0x030,
- 0x00B, 0x02A, 0x098, 0x07C, 0x01D, 0x011, 0x051, 0x080,
- 0x059, 0x054, 0x0C3, 0x051, 0x0F5, 0x01B, 0x033, 0x024,
- 0x0BB, 0x082, 0x0A5, 0x019, 0x05C, 0x01D, 0x010, 0x028,
- 0x0C0, 0x02C, 0x09A, 0x0C7, 0x0C1, 0x0D1, 0x022, 0x08C,
- 0x002, 0x0C9, 0x094, 0x064, 0x05C, 0x00C, 0x0D6, 0x08E,
- 0x013, 0x060, 0x02F, 0x0B8, 0x00B, 0x0EA, 0x030, 0x0E3,
- 0x0C0, 0x05F, 0x048, 0x0DC, 0x078, 0x00B, 0x0E8, 0x000,
- 0x0E3, 0x0C0, 0x05F, 0x06C, 0x038, 0x0D5, 0x02E, 0x035,
- 0x04F, 0x05A, 0x08A, 0x061, 0x0AA, 0x09F, 0x056, 0x01B,
- 0x032, 0x099, 0x046, 0x042, 0x0C8, 0x001, 0x00C, 0x045,
- 0x0CE, 0x0A5, 0x017, 0x0E6, 0x0C6, 0x0CE, 0x0A9, 0x0EB,
- 0x015, 0x016, 0x046, 0x0A2, 0x047, 0x038, 0x014, 0x043,
- 0x026, 0x022, 0x0E7, 0x03D, 0x060, 0x02F, 0x0AA, 0x09E,
- 0x0B5, 0x012, 0x0E0, 0x07F, 0x001, 0x07D, 0x0E3, 0x0E7,
- 0x002, 0x093, 0x0F9, 0x095, 0x044, 0x05C, 0x0E5, 0x0A0,
- 0x0E3, 0x09D, 0x04A, 0x07F, 0x09C, 0x054, 0x0A9, 0x0EB,
- 0x051, 0x005, 0x046, 0x0B9, 0x0FC, 0x0C0, 0x01B, 0x022,
- 0x02E, 0x064, 0x054, 0x02F, 0x0CD, 0x046, 0x0CC, 0x0A7,
- 0x0D5, 0x086, 0x0CC, 0x0A6, 0x050, 0x055, 0x0C6, 0x045,
- 0x0CE, 0x05A, 0x00E, 0x039, 0x0D4, 0x0A7, 0x0F9, 0x0C5,
- 0x04A, 0x09E, 0x0B5, 0x011, 0x080, 0x059, 0x0C0, 0x06D,
- 0x0CF, 0x0E6, 0x000, 0x0D9, 0x011, 0x073, 0x022, 0x0A1,
- 0x07E, 0x06A, 0x036, 0x065, 0x03E, 0x0AC, 0x036, 0x065,
- 0x032, 0x0B0, 0x017, 0x0DD, 0x03E, 0x072, 0x0D2, 0x079,
- 0x031, 0x00C, 0x098, 0x02E, 0x04C, 0x020, 0x073, 0x02A,
- 0x08F, 0x0F3, 0x08A, 0x0AD, 0x0E7, 0x041, 0x082, 0x07C,
- 0x0CA, 0x0A6, 0x089, 0x0B5, 0x085, 0x09F, 0x0B0, 0x0F0,
- 0x017, 0x0D5, 0x01F, 0x054, 0x054, 0x025, 0x01A, 0x0A8,
- 0x0FF, 0x02A, 0x094, 0x065, 0x011, 0x0D7, 0x049, 0x044,
- 0x0D5, 0x0CC, 0x0A0, 0x055, 0x0D8, 0x0AE, 0x00E, 0x088,
- 0x014, 0x060, 0x016, 0x04D, 0x063, 0x022, 0x0E0, 0x072,
- 0x086, 0x038, 0x04D, 0x080, 0x0BE, 0x0E0, 0x02F, 0x0B8,
- 0x00B, 0x0EE, 0x002, 0x0FB, 0x081, 0x038, 0x0F0, 0x017,
- 0x0D7, 0x0D7, 0x01E, 0x002, 0x0FA, 0x0FA, 0x0E3, 0x0C0,
- 0x05F, 0x04C, 0x085, 0x090, 0x002, 0x018, 0x0C8, 0x05B,
- 0x080, 0x0DA, 0x030, 0x00B, 0x070, 0x01B, 0x04C, 0x022,
- 0x0D3, 0x04C, 0x033, 0x003, 0x08C, 0x02E, 0x04C, 0x043,
- 0x026, 0x0D0, 0x0F5, 0x063, 0x066, 0x0D0, 0x095, 0x0A7,
- 0x0CE, 0x045, 0x033, 0x00A, 0x0D6, 0x016, 0x042, 0x038,
- 0x06E, 0x0E4, 0x0CE, 0x0BD, 0x059, 0x02C, 0x0D2, 0x0AB,
- 0x0BA, 0x094, 0x09D, 0x0E6, 0x01A, 0x0B0, 0x017, 0x0D5,
- 0x04F, 0x05A, 0x08B, 0x009, 0x01A, 0x088, 0x0B9, 0x0C5,
- 0x042, 0x047, 0x030, 0x0D4, 0x032, 0x016, 0x072, 0x088,
- 0x065, 0x0BD, 0x059, 0x099, 0x025, 0x0A5, 0x060, 0x02F,
- 0x0B8, 0x060, 0x0F3, 0x008, 0x0B7, 0x04A, 0x01A, 0x08F,
- 0x0AB, 0x00D, 0x099, 0x046, 0x051, 0x0AF, 0x038, 0x0A8,
- 0x08E, 0x090, 0x065, 0x013, 0x052, 0x018, 0x0A0, 0x054,
- 0x0B1, 0x042, 0x02E, 0x061, 0x0A8, 0x048, 0x0E7, 0x02D,
- 0x016, 0x0F7, 0x0A8, 0x005, 0x0A5, 0x060, 0x02F, 0x0A4,
- 0x075, 0x0D2, 0x051, 0x035, 0x073, 0x028, 0x015, 0x076,
- 0x02B, 0x083, 0x0A2, 0x005, 0x018, 0x005, 0x093, 0x058,
- 0x0C8, 0x0B8, 0x006, 0x028, 0x063, 0x084, 0x0D8, 0x00B,
- 0x0EE, 0x002, 0x0FB, 0x080, 0x0BE, 0x0E0, 0x02F, 0x0A0,
- 0x043, 0x0A7, 0x001, 0x07D, 0x04C, 0x0E3, 0x0C0, 0x05F,
- 0x070, 0x017, 0x0DC, 0x005, 0x0F4, 0x064, 0x02D, 0x0C0,
- 0x06D, 0x018, 0x005, 0x0B8, 0x00D, 0x0A5, 0x0BD, 0x06A,
- 0x023, 0x086, 0x0AA, 0x09E, 0x0B5, 0x011, 0x0A4, 0x06A,
- 0x0A3, 0x0EA, 0x08A, 0x08D, 0x023, 0x0E1, 0x017, 0x038,
- 0x034, 0x069, 0x071, 0x098, 0x045, 0x0A6, 0x098, 0x06A,
- 0x03E, 0x0AC, 0x036, 0x065, 0x019, 0x046, 0x0BC, 0x0E2,
- 0x0A2, 0x03A, 0x041, 0x094, 0x04D, 0x048, 0x062, 0x081,
- 0x052, 0x0C5, 0x016, 0x0F7, 0x0A8, 0x08B, 0x04A, 0x054,
- 0x0F5, 0x0A8, 0x08C, 0x002, 0x0DC, 0x006, 0x0D1, 0x003,
- 0x09C, 0x0B4, 0x0A9, 0x0EE, 0x00A, 0x095, 0x025, 0x02A,
- 0x07A, 0x0AD, 0x046, 0x001, 0x067, 0x001, 0x0B5, 0x0D7,
- 0x0AC, 0x00A, 0x030, 0x00B, 0x06C, 0x049, 0x035, 0x0E6,
- 0x0B5, 0x067, 0x0F3, 0x000, 0x06C, 0x088, 0x0B9, 0x091,
- 0x050, 0x0BF, 0x031, 0x01B, 0x032, 0x0A7, 0x0B8, 0x068,
- 0x095, 0x025, 0x07B, 0x0AD, 0x033, 0x078, 0x0A7, 0x0CD,
- 0x03E, 0x0D3, 0x08E, 0x09D, 0x034, 0x0E7, 0x04E, 0x0D4,
- 0x022, 0x0E7, 0x006, 0x084, 0x08E, 0x060, 0x0A8, 0x0FF,
- 0x038, 0x0AB, 0x083, 0x09C, 0x02A, 0x008, 0x0F9, 0x0D4,
- 0x020, 0x063, 0x0BC, 0x01A, 0x006, 0x00A, 0x0C0, 0x05F,
- 0x046, 0x042, 0x0DC, 0x006, 0x0D1, 0x080, 0x05B, 0x080,
- 0x0DA, 0x022, 0x0E6, 0x01A, 0x084, 0x08E, 0x072, 0x0D1,
- 0x06F, 0x05A, 0x080, 0x087, 0x01A, 0x0AA, 0x07A, 0x0D4,
- 0x048, 0x0C8, 0x0D5, 0x047, 0x0D5, 0x015, 0x023, 0x023,
- 0x0E1, 0x017, 0x038, 0x034, 0x08C, 0x0BA, 0x04B, 0x07B,
- 0x0D4, 0x002, 0x0D2, 0x08C, 0x022, 0x0DC, 0x006, 0x0D5,
- 0x01F, 0x056, 0x01B, 0x032, 0x08C, 0x0A3, 0x05E, 0x071,
- 0x051, 0x01D, 0x020, 0x0CA, 0x026, 0x0A4, 0x031, 0x040,
- 0x0A9, 0x062, 0x0B0, 0x017, 0x0DF, 0x09E, 0x0F4, 0x0B7,
- 0x0C9, 0x040, 0x0C7, 0x078, 0x001, 0x081, 0x082, 0x0B8,
- 0x038, 0x039, 0x049, 0x01C, 0x026, 0x0C0, 0x05F, 0x070,
- 0x017, 0x0D4, 0x0AB, 0x0E1, 0x02A, 0x0F8, 0x04A, 0x0BE,
- 0x012, 0x0AF, 0x08F, 0x097, 0x04F, 0x0CB, 0x0A7, 0x001,
- 0x07D, 0x0DA, 0x080, 0x0AA, 0x091, 0x064, 0x07F, 0x04A,
- 0x081, 0x0D5, 0x022, 0x0C8, 0x0FE, 0x082, 0x080, 0x025,
- 0x048, 0x0B2, 0x03E, 0x0BB, 0x0DC, 0x035, 0x02E, 0x094,
- 0x007, 0x0E8, 0x08A, 0x09C, 0x003, 0x0E2, 0x04B, 0x0A5,
- 0x077, 0x0AB, 0x0B3, 0x032, 0x0E9, 0x04B, 0x0BD, 0x059,
- 0x086, 0x084, 0x097, 0x07A, 0x004, 0x0BA, 0x053, 0x0E1,
- 0x032, 0x0EF, 0x050, 0x0D4, 0x0E6, 0x035, 0x053, 0x0EB,
- 0x002, 0x09C, 0x0C7, 0x0D7, 0x07A, 0x0B3, 0x030, 0x0D2,
- 0x05D, 0x0EA, 0x002, 0x0E9, 0x044, 0x05D, 0x016, 0x028,
- 0x0C0, 0x02C, 0x0E0, 0x036, 0x091, 0x074, 0x045, 0x059,
- 0x018, 0x0D5, 0x04F, 0x0AC, 0x00A, 0x0C4, 0x035, 0x030,
- 0x08B, 0x038, 0x069, 0x02B, 0x0BD, 0x059, 0x098, 0x069,
- 0x02E, 0x0F5, 0x012, 0x0E9, 0x058, 0x067, 0x04A, 0x0EF,
- 0x050, 0x0D5, 0x08E, 0x03E, 0x01C, 0x0A4, 0x0B0, 0x0CE,
- 0x093, 0x021, 0x06E, 0x01A, 0x048, 0x01F, 0x0A2, 0x02A,
- 0x0C3, 0x00D, 0x057, 0x07A, 0x0B3, 0x00D, 0x009, 0x02E,
- 0x0F4, 0x043, 0x05D, 0x028, 0x08B, 0x083, 0x020, 0x092,
- 0x038, 0x04D, 0x080, 0x0BE, 0x0E0, 0x02F, 0x0AC, 0x017,
- 0x049, 0x0B3, 0x0A5, 0x082, 0x0E9, 0x03E, 0x0E9, 0x036,
- 0x074, 0x0E0, 0x02F, 0x0A6, 0x0CE, 0x09C, 0x005, 0x0F4,
- 0x0C2, 0x02C, 0x08C, 0x052, 0x057, 0x07A, 0x0D4, 0x08D,
- 0x048, 0x0FA, 0x0EF, 0x050, 0x0D5, 0x0AE, 0x035, 0x053,
- 0x0EB, 0x002, 0x086, 0x021, 0x0AA, 0x0EF, 0x056, 0x066,
- 0x01A, 0x04B, 0x0BD, 0x044, 0x0BA, 0x050, 0x0C4, 0x0E9,
- 0x053, 0x0EB, 0x002, 0x086, 0x081, 0x0F5, 0x0DE, 0x0A1,
- 0x0A8, 0x062, 0x01F, 0x05D, 0x0FE, 0x0A2, 0x05D, 0x029,
- 0x077, 0x0A8, 0x06A, 0x061, 0x08D, 0x040, 0x0FD, 0x011,
- 0x053, 0x00C, 0x06A, 0x0A7, 0x0D6, 0x005, 0x030, 0x0C7,
- 0x0D7, 0x07F, 0x0A9, 0x057, 0x04A, 0x05D, 0x0EB, 0x048,
- 0x01B, 0x00C, 0x07C, 0x08B, 0x09D, 0x08A, 0x053, 0x0EF,
- 0x066, 0x094, 0x0CA, 0x054, 0x0F5, 0x0A0, 0x0C6, 0x001,
- 0x06E, 0x003, 0x06A, 0x09F, 0x056, 0x076, 0x065, 0x032,
- 0x08B, 0x07B, 0x0D2, 0x0C5, 0x0A5, 0x060, 0x02F, 0x0AA,
- 0x07D, 0x065, 0x0A3, 0x000, 0x0B7, 0x001, 0x0B4, 0x0C8,
- 0x05A, 0x007, 0x08F, 0x0ED, 0x001, 0x0D5, 0x027, 0x091,
- 0x067, 0x001, 0x0B4, 0x08B, 0x09C, 0x054, 0x01C, 0x073,
- 0x0A8, 0x084, 0x05C, 0x0C1, 0x050, 0x0BF, 0x036, 0x056,
- 0x060, 0x0AB, 0x08C, 0x08B, 0x09C, 0x054, 0x01C, 0x073,
- 0x0A8, 0x084, 0x05C, 0x0C1, 0x050, 0x0BF, 0x036, 0x056,
- 0x06C, 0x005, 0x0F5, 0x053, 0x0D6, 0x0A2, 0x030, 0x00B,
- 0x029, 0x05B, 0x019, 0x0FC, 0x0F6, 0x094, 0x045, 0x0CF,
- 0x015, 0x00B, 0x0F3, 0x03C, 0x0B3, 0x02A, 0x07A, 0x0C5,
- 0x046, 0x001, 0x064, 0x08A, 0x031, 0x023, 0x09C, 0x00A,
- 0x05D, 0x0EA, 0x034, 0x033, 0x02E, 0x095, 0x0C7, 0x0CE,
- 0x02A, 0x04F, 0x0E6, 0x050, 0x020, 0x0B9, 0x031, 0x00C,
- 0x09B, 0x0EF, 0x039, 0x014, 0x045, 0x0CE, 0x045, 0x007,
- 0x01C, 0x0EA, 0x046, 0x087, 0x0AB, 0x01B, 0x036, 0x084,
- 0x0A7, 0x05E, 0x0AC, 0x096, 0x067, 0x052, 0x0B0, 0x017,
- 0x0DC, 0x0FE, 0x07B, 0x04A, 0x022, 0x0E7, 0x08A, 0x085,
- 0x0F9, 0x09E, 0x059, 0x097, 0x07A, 0x08D, 0x00C, 0x0CB,
- 0x0A5, 0x027, 0x0F3, 0x0A0, 0x044, 0x032, 0x060, 0x0B9,
- 0x037, 0x0DE, 0x072, 0x028, 0x08B, 0x09C, 0x08A, 0x00E,
- 0x039, 0x0D4, 0x08C, 0x005, 0x0F7, 0x0E7, 0x0B8, 0x02A,
- 0x0F9, 0x028, 0x018, 0x0EF, 0x000, 0x030, 0x030, 0x057,
- 0x007, 0x044, 0x00A, 0x050, 0x08F, 0x0F0, 0x073, 0x091,
- 0x041, 0x01F, 0x03A, 0x090, 0x045, 0x0C0, 0x0BB, 0x018,
- 0x0E1, 0x036, 0x002, 0x0FB, 0x0FB, 0x09E, 0x002, 0x0FA,
- 0x0EE, 0x0E7, 0x0F5, 0x0CF, 0x001, 0x07D, 0x010, 0x05C,
- 0x0F0, 0x017, 0x0D1, 0x005, 0x0CF, 0x001, 0x07D, 0x053,
- 0x0EB, 0x02D, 0x018, 0x005, 0x0B8, 0x00D, 0x0A6, 0x042,
- 0x0DC, 0x006, 0x0D3, 0x017, 0x035, 0x0A8, 0x08B, 0x09C,
- 0x00A, 0x00E, 0x039, 0x0D4, 0x00C, 0x0FE, 0x07B, 0x04A,
- 0x022, 0x0E6, 0x055, 0x00B, 0x0F3, 0x031, 0x0B3, 0x060,
- 0x02F, 0x0BC, 0x07C, 0x0E2, 0x0A4, 0x0FE, 0x065, 0x051,
- 0x017, 0x038, 0x014, 0x01C, 0x073, 0x0A8, 0x019, 0x0FC,
- 0x0F6, 0x094, 0x045, 0x0CC, 0x0AA, 0x017, 0x0E6, 0x063,
- 0x066, 0x00A, 0x0B8, 0x0CC, 0x085, 0x0A1, 0x058, 0x0F6,
- 0x0A2, 0x035, 0x048, 0x048, 0x07F, 0x04A, 0x089, 0x095,
- 0x021, 0x021, 0x0FD, 0x005, 0x002, 0x054, 0x09E, 0x045,
- 0x091, 0x00E, 0x03C, 0x005, 0x0F5, 0x007, 0x040, 0x055,
- 0x048, 0x052, 0x03E, 0x086, 0x0A0, 0x075, 0x048, 0x052,
- 0x03E, 0x0B5, 0x000, 0x04A, 0x09C, 0x000, 0x06B, 0x0C7,
- 0x0CE, 0x045, 0x027, 0x0F3, 0x02A, 0x084, 0x037, 0x035,
- 0x0DE, 0x0A0, 0x0AB, 0x023, 0x01A, 0x0AE, 0x0F5, 0x083,
- 0x059, 0x018, 0x0D7, 0x043, 0x0DE, 0x02A, 0x0D0, 0x094,
- 0x0EB, 0x0DE, 0x005, 0x03A, 0x095, 0x09F, 0x0CC, 0x0C3,
- 0x020, 0x045, 0x0CC, 0x0AA, 0x017, 0x0E6, 0x066, 0x0CC,
- 0x043, 0x026, 0x04F, 0x0E7, 0x041, 0x022, 0x02E, 0x070,
- 0x068, 0x038, 0x0E7, 0x053, 0x0E0, 0x02F, 0x0AB, 0x0BC,
- 0x012, 0x0D2, 0x0E9, 0x058, 0x00B, 0x0EA, 0x0A7, 0x0AD,
- 0x045, 0x0A1, 0x01F, 0x0C0, 0x05F, 0x078, 0x039, 0x0C8,
- 0x0A0, 0x08F, 0x09D, 0x048, 0x01C, 0x024, 0x0EE, 0x0C7,
- 0x080, 0x0BE, 0x0BA, 0x0F5, 0x06D, 0x066, 0x049, 0x077,
- 0x00D, 0x04E, 0x0A5, 0x030, 0x009, 0x0B4, 0x0F9, 0x0C5,
- 0x043, 0x00F, 0x038, 0x0A9, 0x03F, 0x09D, 0x002, 0x0FB,
- 0x0CE, 0x045, 0x011, 0x073, 0x091, 0x041, 0x0C7, 0x03A,
- 0x091, 0x09F, 0x0CF, 0x069, 0x044, 0x05C, 0x0F1, 0x050,
- 0x0BF, 0x033, 0x0CB, 0x032, 0x0A7, 0x0AC, 0x054, 0x090,
- 0x08D, 0x044, 0x08E, 0x070, 0x029, 0x077, 0x0A8, 0x0D0,
- 0x0CC, 0x0BA, 0x056, 0x0B0, 0x0B2, 0x09D, 0x08C, 0x086,
- 0x04C, 0x017, 0x026, 0x077, 0x026, 0x01C, 0x027, 0x01C,
- 0x024, 0x09E, 0x023, 0x061, 0x0BE, 0x08E, 0x012, 0x04F,
- 0x011, 0x087, 0x01C, 0x0EA, 0x05C, 0x005, 0x0F5, 0x0D7,
- 0x0B8, 0x06A, 0x075, 0x029, 0x077, 0x0AB, 0x00D, 0x099,
- 0x074, 0x0A5, 0x04F, 0x072, 0x0A0, 0x0AA, 0x04A, 0x0C6,
- 0x0F3, 0x066, 0x066, 0x0C6, 0x039, 0x082, 0x0AF, 0x075,
- 0x0A6, 0x06F, 0x014, 0x06B, 0x0CE, 0x005, 0x070, 0x073,
- 0x096, 0x082, 0x03E, 0x075, 0x028, 0x0E1, 0x03A, 0x0A7,
- 0x0AD, 0x044, 0x060, 0x016, 0x052, 0x0B6, 0x01D, 0x07A,
- 0x0B6, 0x0B3, 0x024, 0x0BB, 0x086, 0x0A7, 0x052, 0x098,
- 0x004, 0x0DA, 0x07C, 0x0E2, 0x0A1, 0x087, 0x09C, 0x055,
- 0x0F7, 0x09C, 0x0B5, 0x0AC, 0x02C, 0x095, 0x033, 0x0B9,
- 0x031, 0x005, 0x0D9, 0x053, 0x0D6, 0x0A2, 0x030, 0x00B,
- 0x029, 0x05B, 0x002, 0x02E, 0x061, 0x05A, 0x017, 0x0E6,
- 0x09C, 0x0B3, 0x02A, 0x07A, 0x0C5, 0x040, 0x021, 0x0A8,
- 0x091, 0x0CE, 0x005, 0x027, 0x0F3, 0x0A5, 0x088, 0x064,
- 0x0C1, 0x072, 0x065, 0x04F, 0x058, 0x014, 0x00C, 0x08D,
- 0x07E, 0x0F3, 0x081, 0x044, 0x05C, 0x0EF, 0x041, 0x0C7,
- 0x03A, 0x0BE, 0x002, 0x0FA, 0x0A9, 0x0EA, 0x0CE, 0x0CC,
- 0x0A9, 0x029, 0x053, 0x0D6, 0x0A2, 0x046, 0x047, 0x0DD,
- 0x07A, 0x0C0, 0x0A3, 0x000, 0x086, 0x0E2, 0x09B, 0x029,
- 0x078, 0x08B, 0x081, 0x009, 0x098, 0x070, 0x09B, 0x029,
- 0x079, 0x05D, 0x0D9, 0x072, 0x0ED, 0x094, 0x0BC, 0x0B9,
- 0x076, 0x013, 0x03B, 0x02A, 0x05D, 0x0B2, 0x097, 0x095,
- 0x02E, 0x0D9, 0x04B, 0x0CA, 0x07D, 0x05B, 0x059, 0x094,
- 0x0CA, 0x01C, 0x024, 0x0EE, 0x0C7, 0x094, 0x0BC, 0x0C0,
- 0x026, 0x0D3, 0x0E7, 0x015, 0x00C, 0x03C, 0x0E2, 0x0AC,
- 0x0FE, 0x07B, 0x04A, 0x022, 0x0E7, 0x08A, 0x085, 0x0F9,
- 0x09E, 0x059, 0x097, 0x07A, 0x08D, 0x00C, 0x0CB, 0x0A5,
- 0x027, 0x0F3, 0x0A0, 0x041, 0x072, 0x062, 0x019, 0x037,
- 0x0DE, 0x070, 0x028, 0x08B, 0x09C, 0x08A, 0x00E, 0x039,
- 0x0D4, 0x08D, 0x00F, 0x056, 0x036, 0x06D, 0x009, 0x04E,
- 0x0BD, 0x059, 0x02C, 0x0CE, 0x0A5, 0x06B, 0x00B, 0x022,
- 0x0D9, 0x09D, 0x0C9, 0x0B2, 0x097, 0x0BE, 0x0F3, 0x081,
- 0x04A, 0x07D, 0x065, 0x0A3, 0x000, 0x093, 0x08F, 0x067,
- 0x029, 0x078, 0x0C2, 0x04D, 0x0C1, 0x0D1, 0x006, 0x082,
- 0x031, 0x0AF, 0x007, 0x038, 0x034, 0x011, 0x0F3, 0x0A8,
- 0x02A, 0x09E, 0x0A8, 0x066, 0x01A, 0x0A4, 0x0A5, 0x04F,
- 0x05A, 0x00C, 0x011, 0x08F, 0x0AA, 0x07B, 0x0D0, 0x065,
- 0x049, 0x045, 0x0BD, 0x0E9, 0x062, 0x0D2, 0x0B1, 0x09E,
- 0x06C, 0x0CC, 0x0C6, 0x019, 0x087, 0x009, 0x0C3, 0x08E,
- 0x075, 0x041, 0x01F, 0x03A, 0x0A5, 0x013, 0x0D5, 0x055,
- 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055,
- 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055,
- 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055,
- 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055,
- 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055,
- 0x055, 0x055, 0x055, 0x05A, 0x0CC, 0x090
- };
-
-#endif /* defined(CONFIG_SMCTR) || defined(CONFIG_SMCTR_MODULE) */
diff --git a/firmware/Makefile b/firmware/Makefile
index c70d18c..2f55795 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -13,6 +13,7 @@ fw-shipped-$(CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL) += \
ess/maestro3_assp_kernel.fw ess/maestro3_assp_minisrc.fw
fw-shipped-$(CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL) += yamaha/ds1_ctrl.fw \
yamaha/ds1_dsp.fw yamaha/ds1e_ctrl.fw
+fw-shipped-$(CONFIG_SMCTR_FIRMWARE) += tr_smctr.bin
firmware-y := $(fw-external-y) $(fw-shipped-y)
firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
diff --git a/firmware/tr_smctr.bin.ihex b/firmware/tr_smctr.bin.ihex
new file mode 100644
index 0000000..6797451
--- /dev/null
+++ b/firmware/tr_smctr.bin.ihex
@@ -0,0 +1,477 @@
+:10000000BC1D123B63B4E900001F000101000205A2
+:10001000010006030100040901000A070100080BA2
+:1000200001000C000000000F0100100D01000E1374
+:10003000010014110100120000050015010016193D
+:1000400001001A1701001800000E00000001000056
+:100050000004001B01001C0000070000000F00004E
+:10006000000B001D01001E0000080000000200003F
+:10007000000C000000060000000D0000000300005E
+:10008000000A00000009000478C6BC0194049380B3
+:10009000C84062E9DA1C2C1555555555555555582B
+:1000A0000BE9E5D595C19D77CEBBA06E1C05F67713
+:1000B000C602FA9670E81DC0170E02FA587DC05F9E
+:1000C00072CEECA4C384907A30CD8D7919E76C247C
+:1000D000279C08390738A84A4CEA4D989B244CC005
+:1000E00026D3E7545A4DF24C0C13234990326EA498
+:1000F000DF9371137726E126F8260C4C12260809A7
+:10010000828260A9307936B0B2A8A772648F9B331F
+:1001100033F9B839D51173AA75265D2651932A494A
+:1001200094C99589BC4DC89B809BA099064C862696
+:10013000589BA49B9937626C679B3330BF366661CE
+:10014000BF36ECC5BD66825A5031D59D9818293C02
+:1001500098864C17263E2CB8693B492EB408431AA2
+:10016000A4F9B351F110F343CD086F6379B3330EA3
+:100170001398499804DA7CE05279310C982E4DACF2
+:100180002C8414EE4CFE675EE49A7529D7A9353AA3
+:10019000945BD59B58B4AF7566AF14A9EF40952515
+:1001A00008B9AD42FCD8D98C330E1398661E45AC05
+:1001B000B00C42D3CCA61262DEB4B180497DA2DE7F
+:1001C000B418C02484E654F5834601681A630CC64B
+:1001D0001264FA4C351C2C0EAAAAAAAAAAAAAAAA88
+:1001E000AAAAAAAAAAADD70270E04CF3A1C1D5C0B1
+:1001F0003CB96939604E58770267933C99E4CF382F
+:100200001C972E401B903146A35E0E88346A35E061
+:10021000E8AA351AA9F51546A3EA7D4AA351AA9F73
+:100220007054A6572EB4CDC8A30CC1DAC6E1CB7A60
+:10023000D41C68FFCF55A8C02D851117442A300B58
+:100240004A88C24DB520D5260169516952195260BC
+:100250001695168296549805A545F3DD6AF9281877
+:10026000EF003030514E445D12D143E6126F9EBA1A
+:10027000CCDF25031DE006060A30CCA9EB2D008655
+:10028000A612654F56D665495F3DE837C940C77825
+:100290000181828C33184980AE40C518059C6D18C9
+:1002A000660EF3A0C61262DEF504B4AC6BC61991FB
+:1002B0007305482E72948073A1C8473666642F3642
+:1002C0006664079902918E72D10F9D063173A0C3A7
+:1002D000516A1A20BF3A0C2C7387435E600223FCDC
+:1002E000E0D635EF9EF5EF92818EF0030305186698
+:1002F00045CC0B482E700A4039D0E4239B3332178B
+:100300009B333203CC8548C73814A5CE297ED280D2
+:10031000A1A8B448882FCE830B1CE1D0D7980488BD
+:1003200087CE963173A58FF38358D7BE7B82AF9269
+:10033000818EF0030305186645CC1520B9C8290045
+:10034000E743908E6CCCC85E6CCCC80F3205231C82
+:10035000E450D45A17882FCE8310F9D023173A04CB
+:1003600035E600221639C3A3FCE0D635E0BFF41809
+:10037000F22D4D43516E5A221F30D417E74191732D
+:1003800005482E776900E743908E6CCCC85E6CCC34
+:10039000C80F3205231CEF4C4E0604C99E0BFF41CB
+:1003A0008F22D4D43516E5A221F35A82FCE8322EEE
+:1003B00060A905CE1348073A1C8473666642F3664B
+:1003C000664079902918E70A989C0A9EB5125C7CD1
+:1003D000C3318B982A7CD3ED38E9D34E74ED499E16
+:1003E0000BFF418F22D4D43516E5A22DEB45338F78
+:1003F000FCF7A05F25031DE40E060A30CC0CF3EBDE
+:1004000040DE61A870920A00E1241E00E1241E0073
+:10041000E1241E00E1241E00E1241E010F982A0B96
+:10042000F3A0C8B9A2A4173A6900E743908E7548B3
+:100430005E706901E6005231CC1814A5CC09829493
+:10044000730CA091F525CC070684849F30A2A47D6F
+:100450005075A665014A8EB4CCC435547566A49710
+:100460007A895053138019E3495C6DCEA940350653
+:1004700078D25706F1B32A8D972362925D69991C51
+:100480006A36E6CD46126F9EE1ABE4A30CC0DEAC4B
+:10049000D40D281BD012A500F84BAD332806A0DEE2
+:1004A00014973A895DC00DE30690925D699866B92C
+:1004B0001995E4A8CF9D331849BE7B86AF928C3343
+:1004C00024140CF4832421C270BFF418F22D4D4380
+:1004D000516E5A221F32A82FCE8322E605A4173A66
+:1004E0006900E743908E75485E706901E642A46337
+:1004F0009802294B9A2978E9405313818132678207
+:10050000FFD063C8B5350D45AE50087CE0D05F9D87
+:100510000645CC01A4173A6900E743908E75485E02
+:10052000706901E659A463981C52973B30528E7D46
+:100530002A091F51EBA4A40AB99487AEC531380229
+:10054000FFD063C8B5350D45AE50087CEA20BF3AF0
+:100550000C8B9A16905CE9A4039D0E4239D5217943
+:1005600095480F300A918E60EB297300095404CA34
+:1005700082655265E4CA226572650932E099724C5F
+:10058000C4E00BFF418F22D4D43516B94021F38A41
+:1005900082FCE8322E60A905CE9A4039D0E4239D32
+:1005A00052179954619901E640A4639804B1849864
+:1005B00018EF2D0305313802FFD063C8B5350D455E
+:1005C000B968887CE0505F9D0645CC81482E713427
+:1005D0008F48014815210521E90A5203CE5A4639B0
+:1005E000CF478E60AB1AF35343EB3524B81B30076B
+:1005F000098A742F7E41741E1D0D874649D595D1F9
+:10060000D5D5BBA94E829D053A0A7414E829D0427B
+:10061000745BCE50C40745BCE20C40745BCE8304CF
+:10062000F9954D13635E6F313BA08BA2C5398D7870
+:100630003A22A0006BC1D1546016D991A2E7438C35
+:1006400024DC1CE05117396B3BCC4B422E6B50BF66
+:100650003636654F7A185525789823E7503EF38152
+:100660004C026D3E7153AF78A9D4A629B1BCD9997B
+:10067000B28E628F222E7516B0B2AB23281654525A
+:1006800031BCD999B28E6619022E7516502CA9C8A4
+:10069000C6F520D3E47F4F9C0AD6167F90EE4CEB34
+:1006A000CFE288BA2F4286AEBDE5A7529F93637909
+:1006B000EB3308F9945247CD99256F3A0C13E65560
+:1006C000344C5A4DB52395A548115A0A4395AC2C84
+:1006D000BA240549B1BCCAA7726C6BC5BDE83169C3
+:1006E000525D0612653EB1504C7D4FAC0A300B3660
+:1006F0006411738A838E75129F7BD29958EE822E75
+:1007000077A0E39D5D4FBC2A532953DE9324BAB3EF
+:1007100036AA4AC679D4B9DE625A11735050BF372F
+:10072000366F1323BA0C24CEBDE2A752B28E6B6093
+:10073000622E751330ACA059CA646379B333651C5B
+:10074000CC32045CEA2CA059DF231BD4835247DD52
+:100750007996D49EB3524BA25A1A8D5D7B82A752D2
+:10076000B28E6619022E7516502C8C321D7B8EA708
+:1007700052B1BCD9999804DA7CE2ACFE6619022E1B
+:100780006550BF336664FE7418864C1726D6165221
+:100790003918DE7ACCC23E651491F36649086E833F
+:1007A0000933AF31ED0D9D0612622A318D6DE7419F
+:1007B000827CCAA68987092E29B1AF1039D66497E1
+:1007C000301D42759344028C24D27AB350F68905C9
+:1007D000435E6198C02C92253C8B2489490549E7EA
+:1007E0000CB98498B7AD3344AE5A5186609F38A98E
+:1007F000A26C6BC48EF45E49461262DEB4CD215CFD
+:10080000B4A30CC13E7229A26C6BC6126247F0E819
+:10081000C33204354092A4828810927CCBD42FA49A
+:1008200002118498B7AD3344AE5A5186609F38A9FF
+:10083000A26C6BC48EF45E494408493E65EA17D247
+:100840000108C24C5BD699A42B9694619827CE459B
+:10085000344D8D78810927CCBD12286C58AFB6F382
+:10086000A0C13E655344D8D7928E7D4BC2FA612613
+:10087000063AB36B030549E70CB96F5A66955CB449
+:10088000A30CC13E7029A26EA4DF9371137726E1F9
+:1008900026F826C6BC9473F92F0BE9849818EACC85
+:1008A000EC0C15279C32FF3D56AF928B7AD335D591
+:1008B000CB4A30CC13E7029A26C6BC947341979179
+:1008C000F483CE0420628B0516498C24C0C7569051
+:1008D000C0C15279C32E5BD5A672D294FAAD58C866
+:1008E000FA9F54B3324BB954A651866B79D0609FAE
+:1008F0003205344D8D7A4D1E7AB35100A93D59A869
+:100900007B4482A1AF4A8D52A95241494F3A2E40B1
+:10091000A49950BE90085279C32E61262DEB4CD07D
+:1009200015CB4A30CC13E7029A26C6BC48FE1D25DB
+:1009300046A954A920A4A79D1720524CA85F48049B
+:100940002309316F5A6680AE5A5186609F3814D1A0
+:100950003635E4A79D1720524CA2450D8B15F49116
+:10096000DE8BC928C24C5BD699A95CB4A30CD6F324
+:10097000A0C13E640A689B1AF16D4CAA92E03694BD
+:10098000709B297813AEB3AA85D44375093AC9EB95
+:100990003524B81B328E13487E4EFD40FD40FD408D
+:1009A000FD40FD40FC13F421F917458A300B335FFD
+:1009B00083A22A300B335F83A2A8C02DB32070928C
+:1009C000139ADE741827CCAA689B1AF70745518042
+:1009D0005B66470738A823E751113FE0E8854601E9
+:1009E0006D990612654F7A2024BAB33215257BAD76
+:1009F0003378AE0E73D047CEA730CC44FF83A2A885
+:100A0000C02CD991C1D11518059B3208BA2C518040
+:100A100059B3207092E29889FDBCEE1890FC8BA22D
+:100A2000C52B0D783A22A561AF074551805B66441E
+:100A30009EB3524B83ADC709BE1F9F74655D0A17F5
+:100A40007CABA0C24C3849122E384907A30CC13EDA
+:100A5000655344D8D7ADE700324B9B33344A03008B
+:100A60009D25CE8324B819998C02124BA199D8C028
+:100A7000274973CFF93CF47CE79804E92E7F39E3EA
+:100A80004F4653C06013A4B9E53C03DE8F9CF300CE
+:100A90009C6FCF3E85F9A336021E6038923E631AE2
+:100AA000109FCF181092BCD0A40CDCC00F9C9734C0
+:100AB00062B6E7F3F3A5CF1842341CC2CAFA8E68B7
+:100AC0005206AF3CA30DBF9E50E1D173CAE03AFC81
+:100AD000C1091A1E6A5C5B8E634E7773CC6167DD59
+:100AE000E66C48D1F31B24695108D4421BF467D14A
+:100AF000804E2FD08CD83009C21E801C46013A4748
+:100B0000D031A106013A7F4630211804E95E8429DC
+:100B100000C027CDD0007C9804F92E84628C027D21
+:100B2000BA3E7E4C027D2E8C61083009F41D0165B1
+:100B300073009F51D085201804FABD194618C027AC
+:100B4000DFD194384C027D174657013009F5FA0180
+:100B50000906013E87A14B88C027DC740D39D300FC
+:100B60009F73D030B39804FBBD06C483009F47D069
+:100B70003648CC0271BF3F9A17E63F0821E692A49F
+:100B80008F9A1031A7F310B184AF3AACDCF773F24F
+:100B90005CC62ADB9E7E7E97310863D0737B43A8B8
+:100BA000E63D34EAF3E315BF9F185F45CFE89F5F4A
+:100BB0009A5B03D0F3D3CE371CD00FBB9E68783B33
+:100BC000BCCA31E8F9A20212A27351086FD1F346F0
+:100BD0000138BF40FC23009C21E84951804E91F42C
+:100BE000210319804E9FD0216306013A568C02746E
+:100BF000FE75495E63D34A54423513A7D1804E95A2
+:100C0000E81E9A4C027CDD1BB9E6013E4BA062A3B4
+:100C1000009F6E8CFCF3009F4BA04218CC027D0716
+:100C200043DA13009F51D03D349804FABD1C628C06
+:100C3000027DFD1C6173009F45D1F44E6013EBF4FF
+:100C400025B033009F43D1A79C1804FB8E8403E991
+:100C5000804FB9E843C13009F77A0A319804FA3E67
+:100C6000844041804E82E7418709230423009D058B
+:100C7000CE961C248C108C0274173A043849182123
+:100C80001804E82E7450E12460846013A0B9D411D4
+:100C9000C248C108C0274173A82384918211804EA5
+:100CA00082E7528E12460846013A0B9D401C248C66
+:100CB000108C0274173A090E12460846013A0B9836
+:100CC0006A1C24B0E11804E82E6B50E1258708C0A7
+:100CD000274173054384961C23009D05CCAA1C2440
+:100CE000B0E11804E82E70687092C3846013E54484
+:100CF000F9409D05CE5A1C24B0E11804F9D13E708C
+:100D000027CF13E5442CA042CB89F2213A0B9C0A51
+:100D10001C24B0E11804F9D10B3810B3C4213936C2
+:100D20005C42C8842B79D061C2741524BAD331E5F2
+:100D300059082908E066634295128100290BC151C8
+:100D400024B81999902290B418A0914101414141D1
+:100D50005283CA4028682908BA16109C990B5694E9
+:100D600090521574C0271A2AD29025D3009D28AB23
+:100D70004A42174C0270D4842E9804E12A42174C40
+:100D8000027082904BA60138514842E9804E15A46A
+:100D90002174C0270FA412E9804E82AC80ACA0ACB5
+:100DA000A959E5644565CAC84ACE0ACE4ACE95918E
+:100DB000959495932925C0CCCC88A4975636647217
+:100DC00090548A9C4508B9B766129309C9B2748ECB
+:100DD000BA6013E5348EBA6013E4748EBA6013E51A
+:100DE000691D74C027CA291D74C027CED225D3001F
+:100DF0009F38A44BA6013E5E912E9804F915225D02
+:100E00003009F3E912E9804F905225D3009DC5487F
+:100E100025D3009C45CECD09C9B21A44BA6013E768
+:100E2000348974C0271C27B79C80C2D776599B93FE
+:100E30000C64C31D1BF4454BC7C63A37E8814BC74A
+:100E4000C63A37E8914BC7C632618EB3BCC34A225B
+:100E5000E6B5249771C987B431AE73A2CF39D25D9C
+:100E6000044442C0D6DE710616BBDBCE830C64C3DD
+:100E70001D311304F9954D133293635E6614CC292A
+:100E80002A5330A6614CC299853A72CCC299850624
+:100E90001BB30A661414249985330A08B186614C81
+:100EA000C2842168733B30A661414EA5985330AC93
+:100EB0005976614CC2B08DD6614CC2B02CF6614CF3
+:100EC000C2B18CA5985330AC0F24CC2998560F286A
+:100ED0006615921A1985330ACA850CC2998565C3AD
+:100EE000D985330ACE7086614CC2B397710C993B99
+:100EF000CC83580BEA779D064ABE047460E0D14E5D
+:100F0000384C3EEE3EEE3EEE3EEE30BBCAE11F7781
+:100F10001F771F771F7727708FBB800E11F771F730
+:100F20007C6F3CB33602FB8DE655707F2D246955EE
+:100F30004F58A9231F54F78A95252B750CCCAC5616
+:100F400051CC51E445CEA21239C0A0AF566A497FB8
+:100F5000028C09F80BEBAF56766752B28E69A71177
+:100F600073A8B1BCCAA0A936502C98E70AF566A4AC
+:100F700097E25A3027BAF7834EA5330A66158DE6F5
+:100F80005539D2A7AC546016701B728E628F222E18
+:100F9000751602FB8DE60A953D62A300B701B553B5
+:100FA000DE2A5494ADD43332B15947314791173AC0
+:100FB0008848E702B017DC679D4B8DE752AA7BD4C7
+:100FC000AA92BDD699BC5602FB8CF36666C6F36640
+:100FD0006662992AF8186870B08A0D5555555552B1
+:100FE00032E1405C380BEA9B87017DC05F7017DC03
+:100FF00005F5DC9B017D614D80BEA77982A21F5063
+:10100000152A8F8B1CE5A5138458E702915405021D
+:101010004BBD221A947F9C1AC05F421A21D180597D
+:10102000C06D1C2C0A83555555555555555555556C
+:1010300055541CB85C6E179C2F385E70E7B85E7014
+:10104000BCE179C2F385E70BCE179C299C299C292A
+:101050009C230F5814EE357726219305C9B017D27B
+:101060001D188A219305C9B017D187AC0A740FAE39
+:10107000F55A82A3E43A3114BBD7599974A21930B6
+:101080005C9B017D187AC0A740F843D4638925D0C2
+:1010900010D61C6A10F5558925D151661F51F5915E
+:1010A000492E8915986AA3E08A9465640E1317384F
+:1010B000A8864C1726C05F461EB028631F087A8C8E
+:1010C0007124BA021AD00D421EAAB124BA2A2D31B7
+:1010D000F51F587492E8875A6352DEF451694A3E0C
+:1010E00009694650F0E131730545BD598D8B4A7C45
+:1010F000D3ED38E9D34E74ED443260B93602FA5B71
+:10110000DE8A2D29D0E121F5A39221F219305C9BD2
+:10111000017D21F5A0C6016701B445CEA51239D4E1
+:101120001C05F440A1C2C3506AAAAAAAAAAAAAAAE4
+:10113000AAAAAAAAAAAA81AF869F191BE781F3656A
+:10114000F280BE7017DFDF380BEB0DC380BEA70F38
+:10115000954F5A94C02CD8B1A7CE5A1173A83AC251
+:10116000CCB63017DC6F35A9804DA7CE2A1879C5CB
+:1011700049DE61A822E75033F9986408B99542FC2A
+:10118000CCD9953D62A248D448E70288B9C1A0E312
+:101190009D4E62E6CCC66BCE8310C982E4DAC2C82B
+:1011A0001EC3B93602FAA9EB4E3030FA0DF0A9EBA6
+:1011B00040B90FAA7AD2C2C8FAA7AD410A47D53DB5
+:1011C00068ACF1F54F5A97547D4FA8AA551F11737B
+:1011D0005AB017DE5D59A925D0552A46BCB822AEB3
+:1011E00045293E14FAE19994CA4ABE3DD699925DCA
+:1011F0001517C8D7DC15178A401F0A9EACC9654968
+:101200005C1D10684A3E5BDE83169580BE91745863
+:10121000A4007C38E7563017DF75A6649745209DFB
+:10122000035F70545E291DF0A9EACC865495C1D1A4
+:1012300006830FAA7BD0654945BDE962D291DF04E0
+:101240005D16291C7D4FAC1A471AA9F5676653280D
+:10125000B7BD2C5A523BE3DD59A925D1A8AC086B88
+:10126000EE08ABC5202F854F566675495C1C181DCE
+:1012700081C26405F080BE355CD017C255F0957C04
+:10128000255F080BE1017C7BAB3524BA1055931A1E
+:10129000FB822AF148D7C2A7AB31B2A4AC639D4A06
+:1012A0008D7C7BAB3524BA1054308D7DC11578AC64
+:1012B0006F5A94601AE379D4AA4F854F5666D54980
+:1012C00058C73A9549F045D1629486BC1D13D29017
+:1012D000FFCF7A83F25031DE006060A11735A85F3E
+:1012E0009B1B3707441A300B380DBC1CE0D047CE8F
+:1012F000A0AA7AA1986A92953D6831805B80DAA9AC
+:10130000EF41952516F7A58B4AC679B333602FAA0E
+:101310009EB15180599ECAA7AC0A300B67B2ADD5B9
+:10132000DA925D17A300B32D956E08A958A1173A5C
+:101330008B017D54F78E9525081CE05602FBC1D128
+:10134000151805926B3C1D1228C02CA56C11701746
+:10135000B2384D80BEE02FB4EC4AEDB39E02FB8064
+:10136000BEE02FB139933E6DE710609F32A9A26CA9
+:1013700005F440E60A953D6A2300B380DAA7D62A31
+:10138000030D7017D22E76294FBC54A6516F7A5890
+:10139000B4AC05F48BA2F40E350D492EB4CC18A5CF
+:1013A000C8F84A9723E1052E47C28A5C8F85697287
+:1013B0003E1F4AC3551F5643328CA35E60A845CEDC
+:1013C0000D602FA3849DD8F017D22E0E1B2384D836
+:1013D0000BEB89F380BEE02FBB3985DF2203E701E9
+:1013E0007DC05F7017D11738145BD6A2740D4B7A8D
+:1013F000B33196946BCC3523D749481573290F5DCB
+:101400008AC05F4D79843580BE881CC3529F59685D
+:10141000C02CE036AA7BCD4A92BEF3814A7D5B594F
+:1014200094CA1C24EEC780BE881CC3529F5968C052
+:101430002CE036AA7BCD4A92BEF38143849C7B3854
+:101440000BEBAF70D4EA53009B4F9C5430F38A945B
+:10145000FAB6B3299422E61A85F9B05993F9D2C4A1
+:101460003260B936B0B390D977261C2722E896B4FB
+:1014700023EA9EB511805965862073968D79AD5803
+:101480000BE917448A4A07D77A82A190FAEF0154F0
+:10149000BA50D4591E2CE9F38A99856B0B23159702
+:1014A00072611730D42C738748AA028125DE910D12
+:1014B0004AC05F7ED280A53EB2D0C86B80BE881C79
+:1014C000EA0917441A371A917458A371AF074454A4
+:1014D0006E35E0E8AA640F90FAD06300B380DA2C8E
+:1014E000738748AA028125DE910D4AC05F48BA275A
+:1014F000A300B701B74F9CB46BCC3516F566632DCE
+:10150000291EBA4A40AB99487AEC508B9C0822FCC1
+:10151000F9B2553D62A92351239C0A3C730D445CEA
+:10152000E15071CEA11FE7156B0B25ED0B93602FDA
+:10153000AA9EAC3665495F7A2050087FEF3914497E
+:10154000011181046040CC59C0AD23EB41B081F260
+:101550003A41AA5043E4D48654A087C152CA9301A9
+:1015600032549D2402000052AF1646A7916708B47A
+:101570000451F16519B46E2DC0AD490092571B742A
+:10158000455F2351B7440A1006A36E8B6B081F19E1
+:10159000D1E680828054042A4591A9E459C22D01E4
+:1015A000140450D3FC558461D980512FE21F465F4B
+:1015B00040E020154ABC591A9E459C22D01148CBC8
+:1015C000E81408015415E2C8D4F22CE116808A46CA
+:1015D0005F527CD9A8F888D05A3CD25C5B80DAA7ED
+:1015E000D65A0886A45D17A0C3522E88A8221F537E
+:1015F000EADACCA650E127763C05F54FAB6B329981
+:1016000043849C7B380BE927ACD492E00EDA384D4A
+:1016100080BEE67D50BA51AE66EFBCDC7B871E0211
+:10162000FA93E6CD47C443CD0F349DA300B05501D6
+:10163000AE038404CE01D0E17002800E89E9221F3E
+:10164000E0E896B011F4C2CE036A442DC06D48059F
+:10165000B80DA300B776D5DEB150DC7D77BC54BAA7
+:10166000527F5814340F9AF381580BEAEF581460E4
+:1016700016A56C2EF7814BA56F7D5DEEB52E95807E
+:10168000BEF073BD047CEAFEEB4CDE2953DD6A54E8
+:1016900094A9EA0A8C02D64C3C05F400EACD56AF78
+:1016A000C047D29C8D29CAE02FAEBD75999D4AF9DD
+:1016B000EF517C940C77801818292AF8E0E8AA30BA
+:1016C0000B2A987C1D1151805954C351F51B3324AA
+:1016D000BB82A5195C1D1028C02C9AC7C1D1228CD1
+:1016E00002C994645C0CD68E13602FB80BEA30E309
+:1016F000C05F48DC780BE800E3C05F6C38D52E355E
+:101700004F5A8A61AA9F561B32994642C8010C451E
+:10171000CEA517E6C6CEA9EB151646A24738144348
+:101720002622E73D602FAA9EB512E07F017DE3E708
+:101730000293F995445CE5A0E39D4A7F9C54A9EB94
+:10174000510546B9FCC01B222E64542FCD46CCA7B0
+:10175000D586CCA65055C645CE5A0E39D4A7F9C564
+:101760004A9EB5118059C06DCFE600D9117322A1F0
+:101770007E6A36653EAC366532B017DD3E72D27990
+:10178000310C982E4C20732A8FF38AADE741827C6E
+:10179000CAA689B5859FB0F017D51F5454251AA83D
+:1017A000FF2A946511D74944D5CCA055D8AE0E88F0
+:1017B0001460164D6322E07286384D80BEE02FB86B
+:1017C0000BEE02FB8138F017D7D71E02FAFAE3C0FE
+:1017D0005F4C85900218C85B80DA300B701B4C227E
+:1017E000D34C33038C2E4C4326D0F56366D095A79B
+:1017F000CE45330AD61642386EE4CEBD592CD2AB54
+:10180000BA949DE61AB017D54F5A8B091A88B9C5F4
+:10181000424730D43216728865BD599925A5602F8C
+:10182000B860F308B74A1A8FAB0D994651AF38A884
+:101830008E9065135218A054B1422E61A848E72D2E
+:1018400016F7A805A5602FA475D251357328157613
+:101850002B83A20518059358C8B806286384D80BB3
+:10186000EE02FB80BEE02FA043A7017D4CE3C05FEA
+:101870007017DC05F4642DC06D1805B80DA5BD6AA0
+:101880002386AA9EB511A46AA3EA8A8D23E117389C
+:101890003469719845A6986A3EAC36651946BCE233
+:1018A000A23A41944D48628152C516F7A88B4A541A
+:1018B000F5A88C02DC06D1039CB4A9EE0A95252A72
+:1018C0007AAD46016701B5D7AC0A300B6C4935E6F5
+:1018D000B567F3006C88B99150BF311B32A7B86867
+:1018E00095257BAD3378A7CD3ED38E9D34E74ED47E
+:1018F00022E706848E60A8FF38AB839C2A08F9D4BF
+:101900002063BC1A060AC05F4642DC06D1805B80B9
+:10191000DA22E61A848E72D16F5A80871AAA7AD494
+:1019200048C8D547D5152323E11738348CBA4B7BEB
+:10193000D402D28C22DC06D51F561B328CA35E71DA
+:10194000511D20CA26A43140A962B017DF9EF4B70A
+:10195000C940C778018182B83839491C26C05F70F8
+:1019600017D4ABE12AF84ABE12AF8F974FCBA7012D
+:101970007DDA80AA91647F4A81D522C8FE828025C3
+:1019800048B23EBBDC352E9407E88A9C03E24BA5A7
+:1019900077ABB332E94BBD598684977A04BA53E1E9
+:1019A00032EF50D4E63553EB029CC7D77AB330D22E
+:1019B0005DEA02E9445D1628C02CE0369174455971
+:1019C00018D54FAC0AC435308B38692BBD5998698E
+:1019D0002EF512E958674AEF50D58E3E1CA4B0CEC2
+:1019E00093216E1A481FA22AC30D577AB30D092EF0
+:1019F000F4435D288B832092384D80BEE02FAC17D6
+:101A000049B3A582E93EE93674E02FA6CE9C05F4E1
+:101A1000C22C8C52577AD48D48FAEF50D5AE35533C
+:101A2000EB028621AAEF56661A4BBD44BA50C4E9B0
+:101A300053EB028681F5DEA1A8621F5DFEA25D293F
+:101A400077A86A618D40FD11530C6AA7D60530C78F
+:101A5000D77FA9574A5DEB481B0C7C8B9D8A53EFBF
+:101A60006694CA54F5A0C6016E036A9F5676653225
+:101A70008B7BD2C5A5602FAA7D65A300B701B4C832
+:101A80005A078FED01D527916701B48B9C541C73C5
+:101A9000A8845CC150BF365660AB8C8B9C541C73C1
+:101AA000A8845CC150BF36566C05F553D6A2300BE6
+:101AB000295B19FCF69445CF150BF33CB32A7AC584
+:101AC0004601648A31239C0A5DEA34332E95C7CEE1
+:101AD0002A4FE65020B9310C9BEF391445CE45070B
+:101AE0001CEA4687AB1B3684A75EAC966752B017DC
+:101AF000DCFE7B4A22E78A85F99E59977A8D0CCBCA
+:101B0000A527F3A0443260B937DE72288B9C8A0E79
+:101B100039D48C05F7E7B82AF92818EF0030305788
+:101B200007440A508FF07391411F3A9045C0BB188B
+:101B3000E13602FBFB9E02FAEEE7F5CF017D105C79
+:101B4000F017D105CF017D53EB2D1805B80DA64236
+:101B5000DC06D31735A88B9C0A0E39D40CFE7B4AC1
+:101B600022E6550BF331B3602FBC7CE2A4FE655135
+:101B70001738141C73A819FCF69445CCAA17E66311
+:101B8000660AB8CC85A158F6A23548487F4A89959F
+:101B90002121FD0502549E45910E3C05F507405557
+:101BA00048523E86A07548523EB5004A9C006BC71D
+:101BB000CE4527F32A843735DEA0AB231AAEF58352
+:101BC0005918D743DE2AD094EBDE053A959FCCC353
+:101BD0002045CCAA17E666CC43264FE741222E705B
+:101BE0006838E753E02FABBC12D2E9580BEAA7AD37
+:101BF00045A11FC05F7839C8A08F9D481C24EEC73F
+:101C000080BEBAF56D6649770D4EA53009B4F9C5A9
+:101C1000430F38A93F9D02FBCE4511739141C73A4E
+:101C2000919FCF69445CF150BF33CB32A7AC549045
+:101C30008D448E702977A8D0CCBA56B0B29D8C86D0
+:101C40004C172677261C271C249E2361BE8E124F1C
+:101C500011871CEA5C05F5D7B86A752977AB0D9931
+:101C600074A54F72A0AA4AC6F36666C63982AF75DC
+:101C7000A66F146BCE05707396823E7528E13AA765
+:101C8000AD44601652B61D7AB6B324BB86A75298EF
+:101C900004DA7CE2A1879C55F79CB5AC2C9533B94E
+:101CA0003105D953D6A2300B295B022E615A17E6B3
+:101CB0009CB32A7AC54021A891CE0527F3A5886454
+:101CC000C172654F58140C8D7EF381445CEF41C79F
+:101CD0003ABE02FAA9EACECCA92953D6A24647DDDC
+:101CE0007AC0A30086E29B29788B810998709B2992
+:101CF000795DD972ED94BCB976133B2A5DB29795A4
+:101D00002ED94BCA7D5B5994CA1C24EEC794BCC023
+:101D100026D3E7150C3CE2ACFE7B4A22E78A85F924
+:101D20009E59977A8D0CCBA527F3A0417262193783
+:101D3000DE70288B9C8A0E39D48D0F56366D094E75
+:101D4000BD592CCEA56B0B22D99DC9B297BEF3818C
+:101D50004A7D65A300938F672978C24DC1D1068261
+:101D600031AF07383411F3A82A9EA8661AA4A54FEC
+:101D70005A0C118FAA7BD0654945BDE962D2B19E4C
+:101D80006CCCC6198709C38E75411F3AA513D5556A
+:101D900055555555555555555555555555555555F3
+:101DA00055555555555555555555555555555555E3
+:0E1DB00055555555555555555555555ACC90C8
+:00000001FF
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCH] kaweth: use request_firmware()
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (30 preceding siblings ...)
2008-05-29 13:47 ` [PATCH] smctr: use request_firmware() David Woodhouse
@ 2008-05-29 14:20 ` David Woodhouse
2008-05-30 13:55 ` Oliver Neukum
2008-05-29 17:49 ` [PATCH] ttusb-budget: " David Woodhouse
` (2 subsequent siblings)
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-29 14:20 UTC (permalink / raw)
To: linux-kernel
Cc: alan, akpm, Michael Zappe, Stephane Alnet, Brad Hards,
Oliver Neukum
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/net/usb/Kconfig | 8 +
drivers/net/usb/kaweth.c | 38 ++-
drivers/net/usb/kawethfw.h | 557 -----------------------------
firmware/Makefile | 3 +
firmware/kaweth/new_code.bin.ihex | 206 +++++++++++
firmware/kaweth/new_code_fix.bin.ihex | 40 ++
firmware/kaweth/trigger_code.bin.ihex | 13 +
firmware/kaweth/trigger_code_fix.bin.ihex | 3 +
8 files changed, 296 insertions(+), 572 deletions(-)
delete mode 100644 drivers/net/usb/kawethfw.h
create mode 100644 firmware/kaweth/new_code.bin.ihex
create mode 100644 firmware/kaweth/new_code_fix.bin.ihex
create mode 100644 firmware/kaweth/trigger_code.bin.ihex
create mode 100644 firmware/kaweth/trigger_code_fix.bin.ihex
diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
index 0604f3f..c692510 100644
--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -66,6 +66,14 @@ config USB_KAWETH
To compile this driver as a module, choose M here: the
module will be called kaweth.
+config USB_KAWETH_FIRMWARE
+ bool "Include firmware for USB KLSI KL5USB101-based ethernet devices"
+ depends on USB_KAWETH
+ ---help---
+ This includes firmware for the "kaweth" devices in the kernel
+ image directly, so that it doesn't need to be provided by
+ the firmware loader. Say 'N'.
+
config USB_PEGASUS
tristate "USB Pegasus/Pegasus-II based ethernet device support"
select MII
diff --git a/drivers/net/usb/kaweth.c b/drivers/net/usb/kaweth.c
index 0dcfc03..bcc43b4 100644
--- a/drivers/net/usb/kaweth.c
+++ b/drivers/net/usb/kaweth.c
@@ -57,13 +57,12 @@
#include <linux/ethtool.h>
#include <linux/dma-mapping.h>
#include <linux/wait.h>
+#include <linux/firmware.h>
#include <asm/uaccess.h>
#include <asm/byteorder.h>
#undef DEBUG
-#include "kawethfw.h"
-
#define KAWETH_MTU 1514
#define KAWETH_BUF_SIZE 1664
#define KAWETH_TX_TIMEOUT (5 * HZ)
@@ -108,6 +107,10 @@
MODULE_AUTHOR("Michael Zappe <zapman@interlan.net>, Stephane Alnet <stephane@u-picardie.fr>, Brad Hards <bhards@bigpond.net.au> and Oliver Neukum <oliver@neukum.org>");
MODULE_DESCRIPTION("KL5USB101 USB Ethernet driver");
MODULE_LICENSE("GPL");
+MODULE_FIRMWARE("kaweth/new_code.bin");
+MODULE_FIRMWARE("kaweth/new_code_fix.bin");
+MODULE_FIRMWARE("kaweth/trigger_code.bin");
+MODULE_FIRMWARE("kaweth/trigger_code_fix.bin");
static const char driver_name[] = "kaweth";
@@ -385,17 +388,26 @@ static int kaweth_set_receive_filter(struct kaweth_device *kaweth,
* kaweth_download_firmware
****************************************************************/
static int kaweth_download_firmware(struct kaweth_device *kaweth,
- __u8 *data,
- __u16 data_len,
+ const char *fwname,
__u8 interrupt,
__u8 type)
{
- if(data_len > KAWETH_FIRMWARE_BUF_SIZE) {
- err("Firmware too big: %d", data_len);
+ const struct firmware *fw;
+ int data_len;
+ int ret;
+
+ ret = request_firmware(&fw, fwname, &kaweth->dev->dev);
+ if (ret)
+ return ret;
+
+ if (fw->size > KAWETH_FIRMWARE_BUF_SIZE) {
+ err("Firmware too big: %d", fw->size);
return -ENOSPC;
}
+ data_len = fw->size;
+ memcpy(kaweth->firmware_buf, fw->data, fw->size);
- memcpy(kaweth->firmware_buf, data, data_len);
+ release_firmware(fw);
kaweth->firmware_buf[2] = (data_len & 0xFF) - 7;
kaweth->firmware_buf[3] = data_len >> 8;
@@ -1009,8 +1021,7 @@ static int kaweth_probe(
info("Downloading firmware...");
kaweth->firmware_buf = (__u8 *)__get_free_page(GFP_KERNEL);
if ((result = kaweth_download_firmware(kaweth,
- kaweth_new_code,
- len_kaweth_new_code,
+ "kaweth/new_code.bin",
100,
2)) < 0) {
err("Error downloading firmware (%d)", result);
@@ -1018,8 +1029,7 @@ static int kaweth_probe(
}
if ((result = kaweth_download_firmware(kaweth,
- kaweth_new_code_fix,
- len_kaweth_new_code_fix,
+ "kaweth/new_code_fix.bin",
100,
3)) < 0) {
err("Error downloading firmware fix (%d)", result);
@@ -1027,8 +1037,7 @@ static int kaweth_probe(
}
if ((result = kaweth_download_firmware(kaweth,
- kaweth_trigger_code,
- len_kaweth_trigger_code,
+ "kaweth/trigger_code.bin",
126,
2)) < 0) {
err("Error downloading trigger code (%d)", result);
@@ -1037,8 +1046,7 @@ static int kaweth_probe(
}
if ((result = kaweth_download_firmware(kaweth,
- kaweth_trigger_code_fix,
- len_kaweth_trigger_code_fix,
+ "kaweth/trigger_code_fix.bin",
126,
3)) < 0) {
err("Error downloading trigger code fix (%d)", result);
diff --git a/drivers/net/usb/kawethfw.h b/drivers/net/usb/kawethfw.h
deleted file mode 100644
index cf85fcb..0000000
--- a/drivers/net/usb/kawethfw.h
+++ /dev/null
@@ -1,557 +0,0 @@
-/******************************************/
-/* NOTE: B6/C3 is data header signature */
-/* 0xAA/0xBB is data length = total */
-/* bytes - 7, 0xCC is type, 0xDD is */
-/* interrupt to use. */
-/******************************************/
-
-/****************************************************************
- * kaweth_trigger_code
- ****************************************************************/
-static __u8 kaweth_trigger_code[] =
-{
- 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD,
- 0xc8, 0x07, 0xa0, 0x00, 0xf0, 0x07, 0x5e, 0x00,
- 0x06, 0x00, 0xf0, 0x07, 0x0a, 0x00, 0x08, 0x00,
- 0xf0, 0x09, 0x00, 0x00, 0x02, 0x00, 0xe7, 0x07,
- 0x36, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00,
- 0x04, 0x00, 0xe7, 0x07, 0x50, 0xc3, 0x10, 0xc0,
- 0xf0, 0x09, 0x0e, 0xc0, 0x00, 0x00, 0xe7, 0x87,
- 0x01, 0x00, 0x0e, 0xc0, 0x97, 0xcf, 0xd7, 0x09,
- 0x00, 0xc0, 0x17, 0x02, 0xc8, 0x07, 0xa0, 0x00,
- 0xe7, 0x17, 0x50, 0xc3, 0x10, 0xc0, 0x30, 0xd8,
- 0x04, 0x00, 0x30, 0x5c, 0x08, 0x00, 0x04, 0x00,
- 0xb0, 0xc0, 0x06, 0x00, 0xc8, 0x05, 0xe7, 0x05,
- 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, 0x49, 0xaf,
- 0xc0, 0x07, 0x00, 0x00, 0x60, 0xaf, 0x4a, 0xaf,
- 0x00, 0x0c, 0x0c, 0x00, 0x40, 0xd2, 0x00, 0x1c,
- 0x0c, 0x00, 0x40, 0xd2, 0x30, 0x00, 0x08, 0x00,
- 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, 0xf0, 0x07,
- 0x86, 0x00, 0x06, 0x00, 0x67, 0xcf, 0x27, 0x0c,
- 0x02, 0x00, 0x00, 0x00, 0x27, 0x0c, 0x00, 0x00,
- 0x0e, 0xc0, 0x49, 0xaf, 0x64, 0xaf, 0xc0, 0x07,
- 0x00, 0x00, 0x4b, 0xaf, 0x4a, 0xaf, 0x5a, 0xcf,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x94, 0x00, 0x05, 0x00,
- 0x00, 0x00
-};
-/****************************************************************
- * kaweth_trigger_code_fix
- ****************************************************************/
-static __u8 kaweth_trigger_code_fix[] =
-{
- 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD,
- 0x02, 0x00, 0x06, 0x00, 0x18, 0x00, 0x3e, 0x00,
- 0x80, 0x00, 0x98, 0x00, 0xaa, 0x00,
- 0x00, 0x00
-};
-
-/****************************************************************
- * kaweth_new_code
- ****************************************************************/
-static __u8 kaweth_new_code[] =
-{
- 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD,
- 0x9f, 0xcf, 0xde, 0x06, 0xe7, 0x57, 0x00, 0x00,
- 0xc4, 0x06, 0x97, 0xc1, 0xe7, 0x67, 0xff, 0x1f,
- 0x28, 0xc0, 0xe7, 0x87, 0x00, 0x04, 0x24, 0xc0,
- 0xe7, 0x67, 0xff, 0xf9, 0x22, 0xc0, 0x97, 0xcf,
- 0xd7, 0x09, 0x00, 0xc0, 0xe7, 0x09, 0xa2, 0xc0,
- 0xbe, 0x06, 0x9f, 0xaf, 0x36, 0x00, 0xe7, 0x05,
- 0x00, 0xc0, 0xa7, 0xcf, 0xbc, 0x06, 0x97, 0xcf,
- 0xe7, 0x57, 0x00, 0x00, 0xb8, 0x06, 0xa7, 0xa1,
- 0xb8, 0x06, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00,
- 0x14, 0x08, 0x0a, 0xc0, 0xe7, 0x57, 0x00, 0x00,
- 0xa4, 0xc0, 0xa7, 0xc0, 0x7a, 0x06, 0x9f, 0xaf,
- 0x92, 0x07, 0xe7, 0x07, 0x00, 0x00, 0x14, 0x08,
- 0xe7, 0x57, 0xff, 0xff, 0xba, 0x06, 0x9f, 0xa0,
- 0x38, 0x00, 0xe7, 0x59, 0xba, 0x06, 0xbe, 0x06,
- 0x9f, 0xa0, 0x38, 0x00, 0xc8, 0x09, 0xca, 0x06,
- 0x08, 0x62, 0x9f, 0xa1, 0x36, 0x08, 0xc0, 0x09,
- 0x76, 0x06, 0x00, 0x60, 0xa7, 0xc0, 0x7a, 0x06,
- 0x9f, 0xaf, 0xcc, 0x02, 0xe7, 0x57, 0x00, 0x00,
- 0xb8, 0x06, 0xa7, 0xc1, 0x7a, 0x06, 0x9f, 0xaf,
- 0x04, 0x00, 0xe7, 0x57, 0x00, 0x00, 0x8e, 0x06,
- 0x0a, 0xc1, 0xe7, 0x09, 0x20, 0xc0, 0x10, 0x08,
- 0xe7, 0xd0, 0x10, 0x08, 0xe7, 0x67, 0x40, 0x00,
- 0x10, 0x08, 0x9f, 0xaf, 0x92, 0x0c, 0xc0, 0x09,
- 0xd0, 0x06, 0x00, 0x60, 0x05, 0xc4, 0xc0, 0x59,
- 0xbe, 0x06, 0x02, 0xc0, 0x9f, 0xaf, 0xec, 0x00,
- 0x9f, 0xaf, 0x34, 0x02, 0xe7, 0x57, 0x00, 0x00,
- 0xa6, 0x06, 0x9f, 0xa0, 0x7a, 0x02, 0xa7, 0xcf,
- 0x7a, 0x06, 0x48, 0x02, 0xe7, 0x09, 0xbe, 0x06,
- 0xd0, 0x06, 0xc8, 0x37, 0x04, 0x00, 0x9f, 0xaf,
- 0x08, 0x03, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00,
- 0xce, 0x06, 0x97, 0xc0, 0xd7, 0x09, 0x00, 0xc0,
- 0xc1, 0xdf, 0xc8, 0x09, 0xc6, 0x06, 0x08, 0x62,
- 0x14, 0xc0, 0x27, 0x04, 0xc6, 0x06, 0x10, 0x94,
- 0xf0, 0x07, 0x10, 0x08, 0x02, 0x00, 0xc1, 0x07,
- 0x01, 0x00, 0x70, 0x00, 0x04, 0x00, 0xf0, 0x07,
- 0x30, 0x01, 0x06, 0x00, 0x50, 0xaf, 0xe7, 0x07,
- 0xff, 0xff, 0xd0, 0x06, 0xe7, 0x07, 0x00, 0x00,
- 0xce, 0x06, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf,
- 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x48, 0x02,
- 0xd0, 0x09, 0xc6, 0x06, 0x27, 0x02, 0xc6, 0x06,
- 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, 0x48, 0x02,
- 0xc8, 0x37, 0x04, 0x00, 0x00, 0x0c, 0x0c, 0x00,
- 0x00, 0x60, 0x21, 0xc0, 0xc0, 0x37, 0x3e, 0x00,
- 0x23, 0xc9, 0xc0, 0x57, 0xb4, 0x05, 0x1b, 0xc8,
- 0xc0, 0x17, 0x3f, 0x00, 0xc0, 0x67, 0xc0, 0xff,
- 0x30, 0x00, 0x08, 0x00, 0xf0, 0x07, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x02, 0xc0, 0x17, 0x4c, 0x00,
- 0x30, 0x00, 0x06, 0x00, 0xf0, 0x07, 0xa0, 0x01,
- 0x0a, 0x00, 0x48, 0x02, 0xc1, 0x07, 0x02, 0x00,
- 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x51, 0xaf,
- 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, 0x9f, 0xaf,
- 0x08, 0x03, 0x9f, 0xaf, 0x7a, 0x02, 0x97, 0xcf,
- 0x9f, 0xaf, 0x7a, 0x02, 0xc9, 0x37, 0x04, 0x00,
- 0xc1, 0xdf, 0xc8, 0x09, 0xa2, 0x06, 0x50, 0x02,
- 0x67, 0x02, 0xa2, 0x06, 0xd1, 0x07, 0x00, 0x00,
- 0x27, 0xd8, 0xaa, 0x06, 0xc0, 0xdf, 0x9f, 0xaf,
- 0xc4, 0x01, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00,
- 0xd2, 0x06, 0x97, 0xc1, 0xe7, 0x57, 0x01, 0x00,
- 0xa8, 0x06, 0x97, 0xc0, 0xc8, 0x09, 0xa0, 0x06,
- 0x08, 0x62, 0x97, 0xc0, 0x00, 0x02, 0xc0, 0x17,
- 0x0e, 0x00, 0x27, 0x00, 0x34, 0x01, 0x27, 0x0c,
- 0x0c, 0x00, 0x36, 0x01, 0xe7, 0x07, 0x50, 0xc3,
- 0x12, 0xc0, 0xe7, 0x07, 0xcc, 0x0b, 0x02, 0x00,
- 0xe7, 0x07, 0x01, 0x00, 0xa8, 0x06, 0xe7, 0x07,
- 0x05, 0x00, 0x90, 0xc0, 0x97, 0xcf, 0xc8, 0x09,
- 0xa4, 0x06, 0x08, 0x62, 0x02, 0xc0, 0x10, 0x64,
- 0x07, 0xc1, 0xe7, 0x07, 0x00, 0x00, 0x9e, 0x06,
- 0xe7, 0x07, 0x72, 0x04, 0x24, 0x00, 0x97, 0xcf,
- 0x27, 0x04, 0xa4, 0x06, 0xc8, 0x17, 0x0e, 0x00,
- 0x27, 0x02, 0x9e, 0x06, 0xe7, 0x07, 0x80, 0x04,
- 0x24, 0x00, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0,
- 0xc1, 0xdf, 0xe7, 0x57, 0x00, 0x00, 0x90, 0x06,
- 0x13, 0xc1, 0x9f, 0xaf, 0x06, 0x02, 0xe7, 0x57,
- 0x00, 0x00, 0x9e, 0x06, 0x13, 0xc0, 0xe7, 0x09,
- 0x9e, 0x06, 0x30, 0x01, 0xe7, 0x07, 0xf2, 0x05,
- 0x32, 0x01, 0xe7, 0x07, 0x10, 0x00, 0x96, 0xc0,
- 0xe7, 0x09, 0x9e, 0x06, 0x90, 0x06, 0x04, 0xcf,
- 0xe7, 0x57, 0x00, 0x00, 0x9e, 0x06, 0x02, 0xc1,
- 0x9f, 0xaf, 0x06, 0x02, 0xe7, 0x05, 0x00, 0xc0,
- 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf,
- 0x08, 0x92, 0xe7, 0x57, 0x02, 0x00, 0xaa, 0x06,
- 0x02, 0xc3, 0xc8, 0x09, 0xa4, 0x06, 0x27, 0x02,
- 0xa6, 0x06, 0x08, 0x62, 0x03, 0xc1, 0xe7, 0x05,
- 0x00, 0xc0, 0x97, 0xcf, 0x27, 0x04, 0xa4, 0x06,
- 0xe7, 0x05, 0x00, 0xc0, 0xf0, 0x07, 0x40, 0x00,
- 0x08, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00,
- 0x00, 0x02, 0xc0, 0x17, 0x0c, 0x00, 0x30, 0x00,
- 0x06, 0x00, 0xf0, 0x07, 0x46, 0x01, 0x0a, 0x00,
- 0xc8, 0x17, 0x04, 0x00, 0xc1, 0x07, 0x02, 0x00,
- 0x51, 0xaf, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00,
- 0x96, 0x06, 0x97, 0xc0, 0xc1, 0xdf, 0xc8, 0x09,
- 0x96, 0x06, 0x27, 0x04, 0x96, 0x06, 0x27, 0x52,
- 0x98, 0x06, 0x03, 0xc1, 0xe7, 0x07, 0x96, 0x06,
- 0x98, 0x06, 0xc0, 0xdf, 0x17, 0x02, 0xc8, 0x17,
- 0x0e, 0x00, 0x9f, 0xaf, 0xba, 0x03, 0xc8, 0x05,
- 0x00, 0x60, 0x03, 0xc0, 0x9f, 0xaf, 0x24, 0x03,
- 0x97, 0xcf, 0x9f, 0xaf, 0x08, 0x03, 0x97, 0xcf,
- 0x57, 0x02, 0xc9, 0x07, 0xa4, 0x06, 0xd7, 0x09,
- 0x00, 0xc0, 0xc1, 0xdf, 0x08, 0x62, 0x1b, 0xc0,
- 0x50, 0x04, 0x11, 0x02, 0xe7, 0x05, 0x00, 0xc0,
- 0xc9, 0x05, 0x97, 0xcf, 0x97, 0x02, 0xca, 0x09,
- 0xd6, 0x06, 0xf2, 0x17, 0x01, 0x00, 0x04, 0x00,
- 0xf2, 0x27, 0x00, 0x00, 0x06, 0x00, 0xca, 0x17,
- 0x2c, 0x00, 0xf8, 0x77, 0x01, 0x00, 0x0e, 0x00,
- 0x06, 0xc0, 0xca, 0xd9, 0xf8, 0x57, 0xff, 0x00,
- 0x0e, 0x00, 0x01, 0xc1, 0xca, 0xd9, 0x22, 0x1c,
- 0x0c, 0x00, 0xe2, 0x27, 0x00, 0x00, 0xe2, 0x17,
- 0x01, 0x00, 0xe2, 0x27, 0x00, 0x00, 0xca, 0x05,
- 0x00, 0x0c, 0x0c, 0x00, 0xc0, 0x17, 0x41, 0x00,
- 0xc0, 0x67, 0xc0, 0xff, 0x30, 0x00, 0x08, 0x00,
- 0x00, 0x02, 0xc0, 0x17, 0x0c, 0x00, 0x30, 0x00,
- 0x06, 0x00, 0xf0, 0x07, 0xda, 0x00, 0x0a, 0x00,
- 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0c,
- 0x08, 0x00, 0x40, 0xd1, 0x01, 0x00, 0xc0, 0x19,
- 0xce, 0x06, 0xc0, 0x59, 0xc2, 0x06, 0x04, 0xc9,
- 0x49, 0xaf, 0x9f, 0xaf, 0xec, 0x00, 0x4a, 0xaf,
- 0x67, 0x10, 0xce, 0x06, 0xc8, 0x17, 0x04, 0x00,
- 0xc1, 0x07, 0x01, 0x00, 0xd7, 0x09, 0x00, 0xc0,
- 0xc1, 0xdf, 0x50, 0xaf, 0xe7, 0x05, 0x00, 0xc0,
- 0x97, 0xcf, 0xc0, 0x07, 0x01, 0x00, 0xc1, 0x09,
- 0xac, 0x06, 0xc1, 0x77, 0x01, 0x00, 0x97, 0xc1,
- 0xd8, 0x77, 0x01, 0x00, 0x12, 0xc0, 0xc9, 0x07,
- 0x6a, 0x06, 0x9f, 0xaf, 0x08, 0x04, 0x04, 0xc1,
- 0xc1, 0x77, 0x08, 0x00, 0x13, 0xc0, 0x97, 0xcf,
- 0xc1, 0x77, 0x02, 0x00, 0x97, 0xc1, 0xc1, 0x77,
- 0x10, 0x00, 0x0c, 0xc0, 0x9f, 0xaf, 0x2c, 0x04,
- 0x97, 0xcf, 0xc1, 0x77, 0x04, 0x00, 0x06, 0xc0,
- 0xc9, 0x07, 0x70, 0x06, 0x9f, 0xaf, 0x08, 0x04,
- 0x97, 0xc0, 0x00, 0xcf, 0x00, 0x90, 0x97, 0xcf,
- 0x50, 0x54, 0x97, 0xc1, 0x70, 0x5c, 0x02, 0x00,
- 0x02, 0x00, 0x97, 0xc1, 0x70, 0x5c, 0x04, 0x00,
- 0x04, 0x00, 0x97, 0xcf, 0x80, 0x01, 0xc0, 0x00,
- 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0c, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0xcb, 0x09, 0xb2, 0x06,
- 0xcc, 0x09, 0xb4, 0x06, 0x0b, 0x53, 0x11, 0xc0,
- 0xc9, 0x02, 0xca, 0x07, 0x1c, 0x04, 0x9f, 0xaf,
- 0x08, 0x04, 0x97, 0xc0, 0x0a, 0xc8, 0x82, 0x08,
- 0x0a, 0xcf, 0x82, 0x08, 0x9f, 0xaf, 0x08, 0x04,
- 0x97, 0xc0, 0x05, 0xc2, 0x89, 0x30, 0x82, 0x60,
- 0x78, 0xc1, 0x00, 0x90, 0x97, 0xcf, 0x89, 0x10,
- 0x09, 0x53, 0x79, 0xc2, 0x89, 0x30, 0x82, 0x08,
- 0x7a, 0xcf, 0xc0, 0xdf, 0x97, 0xcf, 0xc0, 0xdf,
- 0x97, 0xcf, 0xe7, 0x09, 0x96, 0xc0, 0x92, 0x06,
- 0xe7, 0x09, 0x98, 0xc0, 0x94, 0x06, 0x0f, 0xcf,
- 0xe7, 0x09, 0x96, 0xc0, 0x92, 0x06, 0xe7, 0x09,
- 0x98, 0xc0, 0x94, 0x06, 0xe7, 0x09, 0x9e, 0x06,
- 0x30, 0x01, 0xe7, 0x07, 0xf2, 0x05, 0x32, 0x01,
- 0xe7, 0x07, 0x10, 0x00, 0x96, 0xc0, 0xd7, 0x09,
- 0x00, 0xc0, 0x17, 0x02, 0xc8, 0x09, 0x90, 0x06,
- 0xc8, 0x37, 0x0e, 0x00, 0xe7, 0x77, 0x2a, 0x00,
- 0x92, 0x06, 0x30, 0xc0, 0x97, 0x02, 0xca, 0x09,
- 0xd6, 0x06, 0xe7, 0x77, 0x20, 0x00, 0x92, 0x06,
- 0x0e, 0xc0, 0xf2, 0x17, 0x01, 0x00, 0x10, 0x00,
- 0xf2, 0x27, 0x00, 0x00, 0x12, 0x00, 0xe7, 0x77,
- 0x0a, 0x00, 0x92, 0x06, 0xca, 0x05, 0x1e, 0xc0,
- 0x97, 0x02, 0xca, 0x09, 0xd6, 0x06, 0xf2, 0x17,
- 0x01, 0x00, 0x0c, 0x00, 0xf2, 0x27, 0x00, 0x00,
- 0x0e, 0x00, 0xe7, 0x77, 0x02, 0x00, 0x92, 0x06,
- 0x07, 0xc0, 0xf2, 0x17, 0x01, 0x00, 0x44, 0x00,
- 0xf2, 0x27, 0x00, 0x00, 0x46, 0x00, 0x06, 0xcf,
- 0xf2, 0x17, 0x01, 0x00, 0x60, 0x00, 0xf2, 0x27,
- 0x00, 0x00, 0x62, 0x00, 0xca, 0x05, 0x9f, 0xaf,
- 0x08, 0x03, 0x0f, 0xcf, 0x57, 0x02, 0x09, 0x02,
- 0xf1, 0x09, 0x94, 0x06, 0x0c, 0x00, 0xf1, 0xda,
- 0x0c, 0x00, 0xc8, 0x09, 0x98, 0x06, 0x50, 0x02,
- 0x67, 0x02, 0x98, 0x06, 0xd1, 0x07, 0x00, 0x00,
- 0xc9, 0x05, 0xe7, 0x09, 0x9e, 0x06, 0x90, 0x06,
- 0xe7, 0x57, 0x00, 0x00, 0x90, 0x06, 0x02, 0xc0,
- 0x9f, 0xaf, 0x06, 0x02, 0xc8, 0x05, 0xe7, 0x05,
- 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, 0xd7, 0x09,
- 0x00, 0xc0, 0x17, 0x00, 0x17, 0x02, 0x97, 0x02,
- 0xc0, 0x09, 0x92, 0xc0, 0xe7, 0x07, 0x04, 0x00,
- 0x90, 0xc0, 0xca, 0x09, 0xd6, 0x06, 0xe7, 0x07,
- 0x00, 0x00, 0xa8, 0x06, 0xe7, 0x07, 0x6a, 0x04,
- 0x02, 0x00, 0xc0, 0x77, 0x02, 0x00, 0x08, 0xc0,
- 0xf2, 0x17, 0x01, 0x00, 0x50, 0x00, 0xf2, 0x27,
- 0x00, 0x00, 0x52, 0x00, 0x9f, 0xcf, 0x24, 0x06,
- 0xc0, 0x77, 0x10, 0x00, 0x06, 0xc0, 0xf2, 0x17,
- 0x01, 0x00, 0x58, 0x00, 0xf2, 0x27, 0x00, 0x00,
- 0x5a, 0x00, 0xc0, 0x77, 0x80, 0x00, 0x06, 0xc0,
- 0xf2, 0x17, 0x01, 0x00, 0x70, 0x00, 0xf2, 0x27,
- 0x00, 0x00, 0x72, 0x00, 0xc0, 0x77, 0x08, 0x00,
- 0x1d, 0xc1, 0xf2, 0x17, 0x01, 0x00, 0x08, 0x00,
- 0xf2, 0x27, 0x00, 0x00, 0x0a, 0x00, 0xc0, 0x77,
- 0x00, 0x02, 0x06, 0xc0, 0xf2, 0x17, 0x01, 0x00,
- 0x64, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x66, 0x00,
- 0xc0, 0x77, 0x40, 0x00, 0x06, 0xc0, 0xf2, 0x17,
- 0x01, 0x00, 0x5c, 0x00, 0xf2, 0x27, 0x00, 0x00,
- 0x5e, 0x00, 0xc0, 0x77, 0x01, 0x00, 0x01, 0xc0,
- 0x1b, 0xcf, 0x1a, 0xcf, 0xf2, 0x17, 0x01, 0x00,
- 0x00, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x02, 0x00,
- 0xc8, 0x09, 0x34, 0x01, 0xca, 0x17, 0x14, 0x00,
- 0xd8, 0x77, 0x01, 0x00, 0x05, 0xc0, 0xca, 0xd9,
- 0xd8, 0x57, 0xff, 0x00, 0x01, 0xc0, 0xca, 0xd9,
- 0xe2, 0x19, 0x94, 0xc0, 0xe2, 0x27, 0x00, 0x00,
- 0xe2, 0x17, 0x01, 0x00, 0xe2, 0x27, 0x00, 0x00,
- 0x9f, 0xaf, 0x40, 0x06, 0x9f, 0xaf, 0xc4, 0x01,
- 0xe7, 0x57, 0x00, 0x00, 0xd2, 0x06, 0x9f, 0xa1,
- 0x0e, 0x0a, 0xca, 0x05, 0xc8, 0x05, 0xc0, 0x05,
- 0xe7, 0x05, 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf,
- 0xc8, 0x09, 0xa0, 0x06, 0x08, 0x62, 0x97, 0xc0,
- 0x27, 0x04, 0xa0, 0x06, 0x27, 0x52, 0xa2, 0x06,
- 0x03, 0xc1, 0xe7, 0x07, 0xa0, 0x06, 0xa2, 0x06,
- 0x9f, 0xaf, 0x08, 0x03, 0xe7, 0x57, 0x00, 0x00,
- 0xaa, 0x06, 0x02, 0xc0, 0x27, 0xda, 0xaa, 0x06,
- 0x97, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xfb, 0x13, 0xe7, 0x57,
- 0x00, 0x80, 0xb2, 0x00, 0x06, 0xc2, 0xe7, 0x07,
- 0xee, 0x0b, 0x12, 0x00, 0xe7, 0x07, 0x34, 0x0c,
- 0xb2, 0x00, 0xe7, 0x07, 0xc6, 0x07, 0xf2, 0x02,
- 0xc8, 0x09, 0xb4, 0x00, 0xf8, 0x07, 0x02, 0x00,
- 0x0d, 0x00, 0xd7, 0x09, 0x0e, 0xc0, 0xe7, 0x07,
- 0x00, 0x00, 0x0e, 0xc0, 0xc8, 0x09, 0xde, 0x00,
- 0xc8, 0x17, 0x09, 0x00, 0xc9, 0x07, 0xda, 0x06,
- 0xc0, 0x07, 0x04, 0x00, 0x68, 0x0a, 0x00, 0xda,
- 0x7d, 0xc1, 0xe7, 0x09, 0xc0, 0x00, 0x7c, 0x06,
- 0xe7, 0x09, 0xbe, 0x00, 0x78, 0x06, 0xe7, 0x09,
- 0x10, 0x00, 0xbc, 0x06, 0xc8, 0x07, 0xd6, 0x07,
- 0x9f, 0xaf, 0xae, 0x07, 0x9f, 0xaf, 0x00, 0x0a,
- 0xc8, 0x09, 0xde, 0x00, 0x00, 0x0e, 0x0f, 0x00,
- 0x41, 0x90, 0x9f, 0xde, 0x06, 0x00, 0x44, 0xaf,
- 0x27, 0x00, 0xb2, 0x06, 0x27, 0x00, 0xb4, 0x06,
- 0x27, 0x00, 0xb6, 0x06, 0xc0, 0x07, 0x74, 0x00,
- 0x44, 0xaf, 0x27, 0x00, 0xd6, 0x06, 0x08, 0x00,
- 0x00, 0x90, 0xc1, 0x07, 0x3a, 0x00, 0x20, 0x00,
- 0x01, 0xda, 0x7d, 0xc1, 0x9f, 0xaf, 0xba, 0x09,
- 0xc0, 0x07, 0x44, 0x00, 0x48, 0xaf, 0x27, 0x00,
- 0x7a, 0x06, 0x9f, 0xaf, 0x96, 0x0a, 0xe7, 0x07,
- 0x01, 0x00, 0xc0, 0x06, 0xe7, 0x05, 0x0e, 0xc0,
- 0x97, 0xcf, 0x49, 0xaf, 0xe7, 0x87, 0x43, 0x00,
- 0x0e, 0xc0, 0xe7, 0x07, 0xff, 0xff, 0xbe, 0x06,
- 0x9f, 0xaf, 0xae, 0x0a, 0xc0, 0x07, 0x01, 0x00,
- 0x60, 0xaf, 0x4a, 0xaf, 0x97, 0xcf, 0x00, 0x08,
- 0x09, 0x08, 0x11, 0x08, 0x00, 0xda, 0x7c, 0xc1,
- 0x97, 0xcf, 0x67, 0x04, 0xcc, 0x02, 0xc0, 0xdf,
- 0x51, 0x94, 0xb1, 0xaf, 0x06, 0x00, 0xc1, 0xdf,
- 0xc9, 0x09, 0xcc, 0x02, 0x49, 0x62, 0x75, 0xc1,
- 0xc0, 0xdf, 0xa7, 0xcf, 0xd6, 0x02, 0x0e, 0x00,
- 0x24, 0x00, 0x80, 0x04, 0x22, 0x00, 0x4e, 0x05,
- 0xd0, 0x00, 0x0e, 0x0a, 0xaa, 0x00, 0x30, 0x08,
- 0xbe, 0x00, 0x4a, 0x0a, 0x10, 0x00, 0x20, 0x00,
- 0x04, 0x00, 0x6e, 0x04, 0x02, 0x00, 0x6a, 0x04,
- 0x06, 0x00, 0x00, 0x00, 0x24, 0xc0, 0x04, 0x04,
- 0x28, 0xc0, 0xfe, 0xfb, 0x1e, 0xc0, 0x00, 0x04,
- 0x22, 0xc0, 0xff, 0xf4, 0xc0, 0x00, 0x90, 0x09,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x08,
- 0x60, 0x08, 0xd0, 0x08, 0xda, 0x08, 0x00, 0x09,
- 0x04, 0x09, 0x08, 0x09, 0x32, 0x09, 0x42, 0x09,
- 0x50, 0x09, 0x52, 0x09, 0x5a, 0x09, 0x5a, 0x09,
- 0x27, 0x02, 0xca, 0x06, 0x97, 0xcf, 0xe7, 0x07,
- 0x00, 0x00, 0xca, 0x06, 0x0a, 0x0e, 0x01, 0x00,
- 0xca, 0x57, 0x0e, 0x00, 0x9f, 0xc3, 0x5a, 0x09,
- 0xca, 0x37, 0x00, 0x00, 0x9f, 0xc2, 0x5a, 0x09,
- 0x0a, 0xd2, 0xb2, 0xcf, 0x16, 0x08, 0xc8, 0x09,
- 0xde, 0x00, 0x07, 0x06, 0x9f, 0xcf, 0x6c, 0x09,
- 0x17, 0x02, 0xc8, 0x09, 0xde, 0x00, 0x00, 0x0e,
- 0x0f, 0x00, 0x41, 0x90, 0x9f, 0xde, 0x06, 0x00,
- 0xc8, 0x05, 0x30, 0x50, 0x06, 0x00, 0x9f, 0xc8,
- 0x5a, 0x09, 0x27, 0x0c, 0x02, 0x00, 0xb0, 0x06,
- 0xc0, 0x09, 0xb2, 0x06, 0x27, 0x00, 0xb4, 0x06,
- 0xe7, 0x07, 0x00, 0x00, 0xae, 0x06, 0x27, 0x00,
- 0x80, 0x06, 0x00, 0x1c, 0x06, 0x00, 0x27, 0x00,
- 0xb6, 0x06, 0x41, 0x90, 0x67, 0x50, 0xb0, 0x06,
- 0x0d, 0xc0, 0x67, 0x00, 0x7e, 0x06, 0x27, 0x0c,
- 0x06, 0x00, 0x82, 0x06, 0xe7, 0x07, 0xbc, 0x08,
- 0x84, 0x06, 0xc8, 0x07, 0x7e, 0x06, 0x41, 0x90,
- 0x51, 0xaf, 0x97, 0xcf, 0x9f, 0xaf, 0x48, 0x0c,
- 0xe7, 0x09, 0xb6, 0x06, 0xb4, 0x06, 0xe7, 0x09,
- 0xb0, 0x06, 0xae, 0x06, 0x59, 0xaf, 0x97, 0xcf,
- 0x27, 0x0c, 0x02, 0x00, 0xac, 0x06, 0x59, 0xaf,
- 0x97, 0xcf, 0x09, 0x0c, 0x02, 0x00, 0x09, 0xda,
- 0x49, 0xd2, 0xc9, 0x19, 0xd6, 0x06, 0xc8, 0x07,
- 0x7e, 0x06, 0xe0, 0x07, 0x00, 0x00, 0x60, 0x02,
- 0xe0, 0x07, 0x04, 0x00, 0xd0, 0x07, 0xcc, 0x08,
- 0x48, 0xdb, 0x41, 0x90, 0x50, 0xaf, 0x97, 0xcf,
- 0x59, 0xaf, 0x97, 0xcf, 0x59, 0xaf, 0x97, 0xcf,
- 0xf0, 0x57, 0x06, 0x00, 0x06, 0x00, 0x25, 0xc1,
- 0xe7, 0x07, 0x70, 0x06, 0x80, 0x06, 0x41, 0x90,
- 0x67, 0x00, 0x7e, 0x06, 0x27, 0x0c, 0x06, 0x00,
- 0x82, 0x06, 0xe7, 0x07, 0x8c, 0x09, 0x84, 0x06,
- 0xc8, 0x07, 0x7e, 0x06, 0x41, 0x90, 0x51, 0xaf,
- 0x97, 0xcf, 0x07, 0x0c, 0x06, 0x00, 0xc7, 0x57,
- 0x06, 0x00, 0x0f, 0xc1, 0xc8, 0x07, 0x70, 0x06,
- 0x15, 0xcf, 0x00, 0x0c, 0x02, 0x00, 0x00, 0xda,
- 0x40, 0xd1, 0x27, 0x00, 0xc2, 0x06, 0x1e, 0xcf,
- 0x1d, 0xcf, 0x27, 0x0c, 0x02, 0x00, 0xcc, 0x06,
- 0x19, 0xcf, 0x27, 0x02, 0x20, 0x01, 0xe7, 0x07,
- 0x08, 0x00, 0x22, 0x01, 0xe7, 0x07, 0x13, 0x00,
- 0xb0, 0xc0, 0x97, 0xcf, 0x41, 0x90, 0x67, 0x00,
- 0x7e, 0x06, 0xe7, 0x01, 0x82, 0x06, 0x27, 0x02,
- 0x80, 0x06, 0xe7, 0x07, 0x8c, 0x09, 0x84, 0x06,
- 0xc8, 0x07, 0x7e, 0x06, 0xc1, 0x07, 0x00, 0x80,
- 0x50, 0xaf, 0x97, 0xcf, 0x59, 0xaf, 0x97, 0xcf,
- 0x00, 0x60, 0x05, 0xc0, 0xe7, 0x07, 0x00, 0x00,
- 0xc4, 0x06, 0xa7, 0xcf, 0x7c, 0x06, 0x9f, 0xaf,
- 0x00, 0x0a, 0xe7, 0x07, 0x01, 0x00, 0xc4, 0x06,
- 0x49, 0xaf, 0xd7, 0x09, 0x00, 0xc0, 0x07, 0xaf,
- 0xe7, 0x05, 0x00, 0xc0, 0x4a, 0xaf, 0xa7, 0xcf,
- 0x7c, 0x06, 0xc0, 0x07, 0xfe, 0x7f, 0x44, 0xaf,
- 0x40, 0x00, 0xc0, 0x37, 0x00, 0x01, 0x41, 0x90,
- 0xc0, 0x37, 0x08, 0x00, 0xdf, 0xde, 0x50, 0x06,
- 0xc0, 0x57, 0x10, 0x00, 0x02, 0xc2, 0xc0, 0x07,
- 0x10, 0x00, 0x27, 0x00, 0x9a, 0x06, 0x41, 0x90,
- 0x9f, 0xde, 0x40, 0x06, 0x44, 0xaf, 0x27, 0x00,
- 0x9c, 0x06, 0xc0, 0x09, 0x9a, 0x06, 0x41, 0x90,
- 0x00, 0xd2, 0x00, 0xd8, 0x9f, 0xde, 0x08, 0x00,
- 0x44, 0xaf, 0x27, 0x00, 0xc8, 0x06, 0x97, 0xcf,
- 0xe7, 0x87, 0x00, 0x84, 0x28, 0xc0, 0xe7, 0x67,
- 0xff, 0xfb, 0x24, 0xc0, 0x97, 0xcf, 0xe7, 0x87,
- 0x01, 0x00, 0xd2, 0x06, 0xe7, 0x57, 0x00, 0x00,
- 0xa8, 0x06, 0x97, 0xc1, 0x9f, 0xaf, 0x00, 0x0a,
- 0xe7, 0x87, 0x00, 0x06, 0x22, 0xc0, 0xe7, 0x07,
- 0x00, 0x00, 0x90, 0xc0, 0xe7, 0x67, 0xfe, 0xff,
- 0x3e, 0xc0, 0xe7, 0x07, 0x26, 0x00, 0x0a, 0xc0,
- 0xe7, 0x87, 0x01, 0x00, 0x3e, 0xc0, 0xe7, 0x07,
- 0xff, 0xff, 0xbe, 0x06, 0x9f, 0xaf, 0x10, 0x0b,
- 0x97, 0xcf, 0x17, 0x00, 0xa7, 0xaf, 0x78, 0x06,
- 0xc0, 0x05, 0x27, 0x00, 0x76, 0x06, 0xe7, 0x87,
- 0x01, 0x00, 0xd2, 0x06, 0x9f, 0xaf, 0x00, 0x0a,
- 0xe7, 0x07, 0x0c, 0x00, 0x40, 0xc0, 0x9f, 0xaf,
- 0x10, 0x0b, 0x00, 0x90, 0x27, 0x00, 0xa6, 0x06,
- 0x27, 0x00, 0xaa, 0x06, 0xe7, 0x09, 0xb2, 0x06,
- 0xb4, 0x06, 0x27, 0x00, 0xae, 0x06, 0x27, 0x00,
- 0xac, 0x06, 0x9f, 0xaf, 0xae, 0x0a, 0xc0, 0x07,
- 0x00, 0x00, 0x27, 0x00, 0xb2, 0x02, 0x27, 0x00,
- 0xb4, 0x02, 0x27, 0x00, 0x8e, 0x06, 0xc0, 0x07,
- 0x06, 0x00, 0xc8, 0x09, 0xde, 0x00, 0xc8, 0x17,
- 0x03, 0x00, 0xc9, 0x07, 0x70, 0x06, 0x29, 0x0a,
- 0x00, 0xda, 0x7d, 0xc1, 0x97, 0xcf, 0xd7, 0x09,
- 0x00, 0xc0, 0xc1, 0xdf, 0x00, 0x90, 0x27, 0x00,
- 0x96, 0x06, 0xe7, 0x07, 0x96, 0x06, 0x98, 0x06,
- 0x27, 0x00, 0xa0, 0x06, 0xe7, 0x07, 0xa0, 0x06,
- 0xa2, 0x06, 0x27, 0x00, 0xa6, 0x06, 0x27, 0x00,
- 0x90, 0x06, 0x27, 0x00, 0x9e, 0x06, 0xc8, 0x09,
- 0x9c, 0x06, 0xc1, 0x09, 0x9a, 0x06, 0xc9, 0x07,
- 0xa4, 0x06, 0x11, 0x02, 0x09, 0x02, 0xc8, 0x17,
- 0x40, 0x06, 0x01, 0xda, 0x7a, 0xc1, 0x51, 0x94,
- 0xc8, 0x09, 0xc8, 0x06, 0xc9, 0x07, 0xc6, 0x06,
- 0xc1, 0x09, 0x9a, 0x06, 0x11, 0x02, 0x09, 0x02,
- 0xc8, 0x17, 0x08, 0x00, 0x01, 0xda, 0x7a, 0xc1,
- 0x51, 0x94, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf,
- 0xe7, 0x57, 0x00, 0x00, 0x76, 0x06, 0x97, 0xc0,
- 0x9f, 0xaf, 0x04, 0x00, 0xe7, 0x09, 0xbe, 0x06,
- 0xba, 0x06, 0xe7, 0x57, 0xff, 0xff, 0xba, 0x06,
- 0x04, 0xc1, 0xe7, 0x07, 0x10, 0x0b, 0xb8, 0x06,
- 0x97, 0xcf, 0xe7, 0x17, 0x32, 0x00, 0xba, 0x06,
- 0xe7, 0x67, 0xff, 0x07, 0xba, 0x06, 0xe7, 0x07,
- 0x46, 0x0b, 0xb8, 0x06, 0x97, 0xcf, 0xe7, 0x57,
- 0x00, 0x00, 0xc0, 0x06, 0x23, 0xc0, 0xe7, 0x07,
- 0x04, 0x00, 0x90, 0xc0, 0xe7, 0x07, 0x00, 0x80,
- 0x80, 0xc0, 0xe7, 0x07, 0x00, 0x00, 0x80, 0xc0,
- 0xe7, 0x07, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x07,
- 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xc0, 0x07,
- 0x00, 0x00, 0xe7, 0x07, 0x00, 0x00, 0x80, 0xc0,
- 0xe7, 0x07, 0x00, 0x80, 0x80, 0xc0, 0xe7, 0x07,
- 0x00, 0x80, 0x40, 0xc0, 0xc0, 0x07, 0x00, 0x00,
- 0xe7, 0x07, 0x00, 0x00, 0x40, 0xc0, 0xe7, 0x07,
- 0x00, 0x00, 0x80, 0xc0, 0xe7, 0x07, 0x04, 0x00,
- 0x90, 0xc0, 0xe7, 0x07, 0x00, 0x02, 0x40, 0xc0,
- 0xe7, 0x07, 0x0c, 0x02, 0x40, 0xc0, 0xe7, 0x07,
- 0x00, 0x00, 0xc0, 0x06, 0xe7, 0x07, 0x00, 0x00,
- 0xb8, 0x06, 0xe7, 0x07, 0x00, 0x00, 0xd2, 0x06,
- 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x9f, 0xaf,
- 0x34, 0x02, 0xe7, 0x05, 0x00, 0xc0, 0x9f, 0xaf,
- 0xc4, 0x01, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0,
- 0x17, 0x00, 0x17, 0x02, 0x97, 0x02, 0xe7, 0x57,
- 0x00, 0x00, 0xa8, 0x06, 0x06, 0xc0, 0xc0, 0x09,
- 0x92, 0xc0, 0xc0, 0x77, 0x09, 0x02, 0x9f, 0xc1,
- 0x5c, 0x05, 0x9f, 0xcf, 0x32, 0x06, 0xd7, 0x09,
- 0x0e, 0xc0, 0xe7, 0x07, 0x00, 0x00, 0x0e, 0xc0,
- 0x9f, 0xaf, 0x02, 0x0c, 0xe7, 0x05, 0x0e, 0xc0,
- 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, 0x17, 0x02,
- 0xc8, 0x09, 0xb0, 0xc0, 0xe7, 0x67, 0xfe, 0x7f,
- 0xb0, 0xc0, 0xc8, 0x77, 0x00, 0x20, 0x9f, 0xc1,
- 0x64, 0xeb, 0xe7, 0x57, 0x00, 0x00, 0xc8, 0x02,
- 0x9f, 0xc1, 0x80, 0xeb, 0xc8, 0x99, 0xca, 0x02,
- 0xc8, 0x67, 0x04, 0x00, 0x9f, 0xc1, 0x96, 0xeb,
- 0x9f, 0xcf, 0x4c, 0xeb, 0xe7, 0x07, 0x00, 0x00,
- 0xa6, 0xc0, 0xe7, 0x09, 0xb0, 0xc0, 0xc8, 0x02,
- 0xe7, 0x07, 0x03, 0x00, 0xb0, 0xc0, 0x97, 0xcf,
- 0xc0, 0x09, 0xb0, 0x06, 0xc0, 0x37, 0x01, 0x00,
- 0x97, 0xc9, 0xc9, 0x09, 0xb2, 0x06, 0x02, 0x00,
- 0x41, 0x90, 0x48, 0x02, 0xc9, 0x17, 0x06, 0x00,
- 0x9f, 0xaf, 0x08, 0x04, 0x9f, 0xa2, 0x72, 0x0c,
- 0x02, 0xda, 0x77, 0xc1, 0x41, 0x60, 0x71, 0xc1,
- 0x97, 0xcf, 0x17, 0x02, 0x57, 0x02, 0x43, 0x04,
- 0x21, 0x04, 0xe0, 0x00, 0x43, 0x04, 0x21, 0x04,
- 0xe0, 0x00, 0x43, 0x04, 0x21, 0x04, 0xe0, 0x00,
- 0xc1, 0x07, 0x01, 0x00, 0xc9, 0x05, 0xc8, 0x05,
- 0x97, 0xcf, 0xe7, 0x07, 0x01, 0x00, 0x8e, 0x06,
- 0xc8, 0x07, 0x86, 0x06, 0xe7, 0x07, 0x00, 0x00,
- 0x86, 0x06, 0xe7, 0x07, 0x10, 0x08, 0x88, 0x06,
- 0xe7, 0x07, 0x04, 0x00, 0x8a, 0x06, 0xe7, 0x07,
- 0xbc, 0x0c, 0x8c, 0x06, 0xc1, 0x07, 0x03, 0x80,
- 0x50, 0xaf, 0x97, 0xcf, 0xe7, 0x07, 0x00, 0x00,
- 0x8e, 0x06, 0x97, 0xcf,
- 0x00, 0x00
-};
-
-/****************************************************************
- * kaweth_new_code_fix
- ****************************************************************/
-static __u8 kaweth_new_code_fix[] =
-{
- 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD,
- 0x02, 0x00, 0x08, 0x00, 0x28, 0x00, 0x2c, 0x00,
- 0x34, 0x00, 0x3c, 0x00, 0x40, 0x00, 0x48, 0x00,
- 0x54, 0x00, 0x58, 0x00, 0x5e, 0x00, 0x64, 0x00,
- 0x68, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x72, 0x00,
- 0x76, 0x00, 0x7c, 0x00, 0x80, 0x00, 0x86, 0x00,
- 0x8a, 0x00, 0x90, 0x00, 0x94, 0x00, 0x98, 0x00,
- 0x9e, 0x00, 0xa6, 0x00, 0xaa, 0x00, 0xb0, 0x00,
- 0xb4, 0x00, 0xb8, 0x00, 0xc0, 0x00, 0xc6, 0x00,
- 0xca, 0x00, 0xd0, 0x00, 0xd4, 0x00, 0xd8, 0x00,
- 0xe0, 0x00, 0xde, 0x00, 0xe8, 0x00, 0xf0, 0x00,
- 0xfc, 0x00, 0x04, 0x01, 0x0a, 0x01, 0x18, 0x01,
- 0x22, 0x01, 0x28, 0x01, 0x3a, 0x01, 0x3e, 0x01,
- 0x7e, 0x01, 0x98, 0x01, 0x9c, 0x01, 0xa2, 0x01,
- 0xac, 0x01, 0xb2, 0x01, 0xba, 0x01, 0xc0, 0x01,
- 0xc8, 0x01, 0xd0, 0x01, 0xd6, 0x01, 0xf4, 0x01,
- 0xfc, 0x01, 0x08, 0x02, 0x16, 0x02, 0x1a, 0x02,
- 0x22, 0x02, 0x2a, 0x02, 0x2e, 0x02, 0x3e, 0x02,
- 0x44, 0x02, 0x4a, 0x02, 0x50, 0x02, 0x64, 0x02,
- 0x62, 0x02, 0x6c, 0x02, 0x72, 0x02, 0x86, 0x02,
- 0x8c, 0x02, 0x90, 0x02, 0x9e, 0x02, 0xbc, 0x02,
- 0xd0, 0x02, 0xd8, 0x02, 0xdc, 0x02, 0xe0, 0x02,
- 0xe8, 0x02, 0xe6, 0x02, 0xf4, 0x02, 0xfe, 0x02,
- 0x04, 0x03, 0x0c, 0x03, 0x28, 0x03, 0x7c, 0x03,
- 0x90, 0x03, 0x94, 0x03, 0x9c, 0x03, 0xa2, 0x03,
- 0xc0, 0x03, 0xd0, 0x03, 0xd4, 0x03, 0xee, 0x03,
- 0xfa, 0x03, 0xfe, 0x03, 0x2e, 0x04, 0x32, 0x04,
- 0x3c, 0x04, 0x40, 0x04, 0x4e, 0x04, 0x76, 0x04,
- 0x7c, 0x04, 0x84, 0x04, 0x8a, 0x04, 0x8e, 0x04,
- 0xa6, 0x04, 0xb0, 0x04, 0xb8, 0x04, 0xbe, 0x04,
- 0xd2, 0x04, 0xdc, 0x04, 0xee, 0x04, 0x10, 0x05,
- 0x1a, 0x05, 0x24, 0x05, 0x2a, 0x05, 0x36, 0x05,
- 0x34, 0x05, 0x3c, 0x05, 0x42, 0x05, 0x64, 0x05,
- 0x6a, 0x05, 0x6e, 0x05, 0x86, 0x05, 0x22, 0x06,
- 0x26, 0x06, 0x2c, 0x06, 0x30, 0x06, 0x42, 0x06,
- 0x4a, 0x06, 0x4e, 0x06, 0x56, 0x06, 0x54, 0x06,
- 0x5a, 0x06, 0x60, 0x06, 0x66, 0x06, 0xe8, 0x06,
- 0xee, 0x06, 0xf4, 0x06, 0x16, 0x07, 0x26, 0x07,
- 0x2c, 0x07, 0x32, 0x07, 0x36, 0x07, 0x3a, 0x07,
- 0x3e, 0x07, 0x52, 0x07, 0x56, 0x07, 0x5a, 0x07,
- 0x64, 0x07, 0x76, 0x07, 0x7a, 0x07, 0x80, 0x07,
- 0x84, 0x07, 0x8a, 0x07, 0x9e, 0x07, 0xa2, 0x07,
- 0xda, 0x07, 0xde, 0x07, 0xe2, 0x07, 0xe6, 0x07,
- 0xea, 0x07, 0xee, 0x07, 0xf2, 0x07, 0xf6, 0x07,
- 0x0e, 0x08, 0x16, 0x08, 0x18, 0x08, 0x1a, 0x08,
- 0x1c, 0x08, 0x1e, 0x08, 0x20, 0x08, 0x22, 0x08,
- 0x24, 0x08, 0x26, 0x08, 0x28, 0x08, 0x2a, 0x08,
- 0x2c, 0x08, 0x2e, 0x08, 0x32, 0x08, 0x3a, 0x08,
- 0x46, 0x08, 0x4e, 0x08, 0x54, 0x08, 0x5e, 0x08,
- 0x78, 0x08, 0x7e, 0x08, 0x82, 0x08, 0x86, 0x08,
- 0x8c, 0x08, 0x90, 0x08, 0x98, 0x08, 0x9e, 0x08,
- 0xa4, 0x08, 0xaa, 0x08, 0xb0, 0x08, 0xae, 0x08,
- 0xb4, 0x08, 0xbe, 0x08, 0xc4, 0x08, 0xc2, 0x08,
- 0xca, 0x08, 0xc8, 0x08, 0xd4, 0x08, 0xe4, 0x08,
- 0xe8, 0x08, 0xf6, 0x08, 0x14, 0x09, 0x12, 0x09,
- 0x1a, 0x09, 0x20, 0x09, 0x26, 0x09, 0x24, 0x09,
- 0x2a, 0x09, 0x3e, 0x09, 0x4c, 0x09, 0x56, 0x09,
- 0x70, 0x09, 0x74, 0x09, 0x78, 0x09, 0x7e, 0x09,
- 0x7c, 0x09, 0x82, 0x09, 0x98, 0x09, 0x9c, 0x09,
- 0xa0, 0x09, 0xa6, 0x09, 0xb8, 0x09, 0xdc, 0x09,
- 0xe8, 0x09, 0xec, 0x09, 0xfc, 0x09, 0x12, 0x0a,
- 0x18, 0x0a, 0x1e, 0x0a, 0x42, 0x0a, 0x46, 0x0a,
- 0x4e, 0x0a, 0x54, 0x0a, 0x5a, 0x0a, 0x5e, 0x0a,
- 0x68, 0x0a, 0x6e, 0x0a, 0x72, 0x0a, 0x78, 0x0a,
- 0x76, 0x0a, 0x7c, 0x0a, 0x80, 0x0a, 0x84, 0x0a,
- 0x94, 0x0a, 0xa4, 0x0a, 0xb8, 0x0a, 0xbe, 0x0a,
- 0xbc, 0x0a, 0xc2, 0x0a, 0xc8, 0x0a, 0xc6, 0x0a,
- 0xcc, 0x0a, 0xd0, 0x0a, 0xd4, 0x0a, 0xd8, 0x0a,
- 0xdc, 0x0a, 0xe0, 0x0a, 0xf2, 0x0a, 0xf6, 0x0a,
- 0xfa, 0x0a, 0x14, 0x0b, 0x1a, 0x0b, 0x20, 0x0b,
- 0x1e, 0x0b, 0x26, 0x0b, 0x2e, 0x0b, 0x2c, 0x0b,
- 0x36, 0x0b, 0x3c, 0x0b, 0x42, 0x0b, 0x40, 0x0b,
- 0x4a, 0x0b, 0xaa, 0x0b, 0xb0, 0x0b, 0xb6, 0x0b,
- 0xc0, 0x0b, 0xc8, 0x0b, 0xda, 0x0b, 0xe8, 0x0b,
- 0xec, 0x0b, 0xfa, 0x0b, 0x4a, 0x0c, 0x54, 0x0c,
- 0x62, 0x0c, 0x66, 0x0c, 0x96, 0x0c, 0x9a, 0x0c,
- 0xa0, 0x0c, 0xa6, 0x0c, 0xa4, 0x0c, 0xac, 0x0c,
- 0xb2, 0x0c, 0xb0, 0x0c, 0xc0, 0x0c,
- 0x00, 0x00
-};
-
-
-static const int len_kaweth_trigger_code = sizeof(kaweth_trigger_code);
-static const int len_kaweth_trigger_code_fix = sizeof(kaweth_trigger_code_fix);
-static const int len_kaweth_new_code = sizeof(kaweth_new_code);
-static const int len_kaweth_new_code_fix = sizeof(kaweth_new_code_fix);
diff --git a/firmware/Makefile b/firmware/Makefile
index 2f55795..f5c50d6 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -14,6 +14,9 @@ fw-shipped-$(CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL) += \
fw-shipped-$(CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL) += yamaha/ds1_ctrl.fw \
yamaha/ds1_dsp.fw yamaha/ds1e_ctrl.fw
fw-shipped-$(CONFIG_SMCTR_FIRMWARE) += tr_smctr.bin
+fw-shipped-$(CONFIG_USB_KAWETH_FIRMWARE) += kaweth/new_code.bin \
+ kaweth/new_code_fix.bin kaweth/trigger_code.bin \
+ kaweth/trigger_code_fix.bin
firmware-y := $(fw-external-y) $(fw-shipped-y)
firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
diff --git a/firmware/kaweth/new_code.bin.ihex b/firmware/kaweth/new_code.bin.ihex
new file mode 100644
index 0000000..292d40f
--- /dev/null
+++ b/firmware/kaweth/new_code.bin.ihex
@@ -0,0 +1,206 @@
+:10000000B6C3AABBCCDD9FCFDE06E7570000C4060F
+:1000100097C1E767FF1F28C0E787000424C0E76790
+:10002000FFF922C097CFD70900C0E709A2C0BE06DA
+:100030009FAF3600E70500C0A7CFBC0697CFE757B4
+:100040000000B806A7A1B80697CFE757000014082C
+:100050000AC0E7570000A4C0A7C07A069FAF920766
+:10006000E70700001408E757FFFFBA069FA0380013
+:10007000E759BA06BE069FA03800C809CA0608623A
+:100080009FA13608C00976060060A7C07A069FAF18
+:10009000CC02E7570000B806A7C17A069FAF04005C
+:1000A000E75700008E060AC1E70920C01008E7D014
+:1000B0001008E767400010089FAF920CC009D006F7
+:1000C000006005C4C059BE0602C09FAFEC009FAFE0
+:1000D0003402E7570000A6069FA07A02A7CF7A064F
+:1000E0004802E709BE06D006C83704009FAF0803E0
+:1000F00097CFE7570000CE0697C0D70900C0C1DFF1
+:10010000C809C606086214C02704C6061094F00782
+:1001100010080200C107010070000400F007300160
+:10012000060050AFE707FFFFD006E7070000CE0646
+:10013000E70500C097CFD70900C0C1DF4802D0094A
+:10014000C6062702C606E70500C097CF4802C83793
+:100150000400000C0C00006021C0C0373E0023C921
+:10016000C057B4051BC8C0173F00C067C0FF3000B0
+:100170000800F007000004000002C0174C00300027
+:100180000600F007A0010A004802C1070200D709D3
+:1001900000C0C1DF51AFE70500C097CF9FAF080394
+:1001A0009FAF7A0297CF9FAF7A02C9370400C1DFB1
+:1001B000C809A20650026702A206D107000027D88C
+:1001C000AA06C0DF9FAFC40197CFE7570000D20651
+:1001D00097C1E7570100A80697C0C809A0060862A2
+:1001E00097C00002C0170E0027003401270C0C0036
+:1001F0003601E70750C312C0E707CC0B0200E70740
+:100200000100A806E707050090C097CFC809A4061B
+:10021000086202C0106407C1E70700009E06E707F6
+:100220007204240097CF2704A406C8170E002702E3
+:100230009E06E7078004240097CFD70900C0C1DFDE
+:10024000E7570000900613C19FAF0602E757000072
+:100250009E0613C0E7099E063001E707F20532014A
+:10026000E707100096C0E7099E06900604CFE757FF
+:1002700000009E0602C19FAF0602E70500C097CFAF
+:10028000D70900C0C1DF0892E7570200AA0602C3DF
+:10029000C809A4062702A606086203C1E70500C034
+:1002A00097CF2704A406E70500C0F0074000080028
+:1002B000F007000004000002C0170C003000060028
+:1002C000F00746010A00C8170400C107020051AF39
+:1002D00097CFE7570000960697C0C1DFC80996067A
+:1002E000270496062752980603C1E7079606980644
+:1002F000C0DF1702C8170E009FAFBA03C805006021
+:1003000003C09FAF240397CF9FAF080397CF570237
+:10031000C907A406D70900C0C1DF08621BC050048A
+:100320001102E70500C0C90597CF9702CA09D60692
+:10033000F21701000400F22700000600CA172C0083
+:10034000F87701000E0006C0CAD9F857FF000E006A
+:1003500001C1CAD9221C0C00E2270000E2170100EB
+:10036000E2270000CA05000C0C00C0174100C0675E
+:10037000C0FF300008000002C0170C00300006006B
+:10038000F007DA000A00F00700000400000C080083
+:1003900040D10100C019CE06C059C20604C949AFF8
+:1003A0009FAFEC004AAF6710CE06C8170400C10724
+:1003B0000100D70900C0C1DF50AFE70500C097CFEB
+:1003C000C0070100C109AC06C177010097C1D87709
+:1003D000010012C0C9076A069FAF080404C1C177B3
+:1003E000080013C097CFC177020097C1C1771000F2
+:1003F0000CC09FAF2C0497CFC177040006C0C9077B
+:1004000070069FAF080497C000CF009097CF50545C
+:1004100097C1705C0200020097C1705C0400040088
+:1004200097CF8001C0006000300018000C0006006B
+:100430000000CB09B206CC09B4060B5311C0C902A7
+:10044000CA071C049FAF080497C00AC882080ACFD5
+:1004500082089FAF080497C005C28930826078C1C6
+:10046000009097CF8910095379C2893082087ACFDA
+:10047000C0DF97CFC0DF97CFE70996C09206E709A4
+:1004800098C094060FCFE70996C09206E70998C076
+:100490009406E7099E063001E707F2053201E707F7
+:1004A000100096C0D70900C01702C8099006C837C7
+:1004B0000E00E7772A00920630C09702CA09D606D6
+:1004C000E777200092060EC0F21701001000F22715
+:1004D00000001200E7770A009206CA051EC09702C4
+:1004E000CA09D606F21701000C00F22700000E0020
+:1004F000E7770200920607C0F21701004400F227D6
+:100500000000460006CFF21701006000F22700004D
+:100510006200CA059FAF08030FCF57020902F10915
+:1005200094060C00F1DA0C00C80998065002670224
+:100530009806D1070000C905E7099E069006E7570F
+:100540000000900602C09FAF0602C805E70500C084
+:10055000C0DF97CFD70900C0170017029702C00964
+:1005600092C0E707040090C0CA09D606E70700005A
+:10057000A806E7076A040200C077020008C0F21765
+:1005800001005000F227000052009FCF2406C077E0
+:10059000100006C0F21701005800F22700005A00B0
+:1005A000C077800006C0F21701007000F22700003B
+:1005B0007200C07708001DC1F21701000800F22781
+:1005C00000000A00C077000206C0F21701006400B4
+:1005D000F22700006600C077400006C0F217010055
+:1005E0005C00F22700005E00C077010001C01BCF55
+:1005F0001ACFF21701000000F22700000200C8091C
+:100600003401CA171400D877010005C0CAD9D857D9
+:10061000FF0001C0CAD9E21994C0E2270000E21726
+:100620000100E22700009FAF40069FAFC401E757DB
+:100630000000D2069FA10E0ACA05C805C005E7053D
+:1006400000C0C0DF97CFC809A006086297C0270482
+:10065000A0062752A20603C1E707A006A2069FAF85
+:100660000803E7570000AA0602C027DAAA0697CFB8
+:10067000FFFFFFFFFFFF0000000000000000000080
+:10068000000000000000000000000000000000006A
+:10069000000000000000000000000000000000005A
+:1006A000000000000000000000000000000000004A
+:1006B000000000000000000000000000000000003A
+:1006C00000000000000000003F00000000000000EB
+:1006D000000000000000FFFF01000000000000001B
+:1006E000FFFFFB13E7570080B20006C2E707EE0BDF
+:1006F0001200E707340CB200E707C607F202C80988
+:10070000B400F80702000D00D7090EC0E70700008B
+:100710000EC0C809DE00C8170900C907DA06C007FD
+:100720000400680A00DA7DC1E709C0007C06E70919
+:10073000BE007806E7091000BC06C807D6079FAFC1
+:10074000AE079FAF000AC809DE00000E0F004190FF
+:100750009FDE060044AF2700B2062700B40627003C
+:10076000B606C007740044AF2700D6060800009004
+:10077000C1073A00200001DA7DC19FAFBA09C00766
+:10078000440048AF27007A069FAF960AE7070100AA
+:10079000C006E7050EC097CF49AFE78743000EC0FC
+:1007A000E707FFFFBE069FAFAE0AC007010060AFBC
+:1007B0004AAF97CF00080908110800DA7CC197CF2B
+:1007C0006704CC02C0DF5194B1AF0600C1DFC90994
+:1007D000CC02496275C1C0DFA7CFD6020E0024004B
+:1007E000800422004E05D0000E0AAA003008BE0088
+:1007F0004A0A1000200004006E0402006A04060089
+:10080000000024C0040428C0FEFB1EC0000422C057
+:10081000FFF4C000900900000000FFFF56086008C8
+:10082000D008DA0800090409080932094209500908
+:1008300052095A095A092702CA0697CFE70700004A
+:10084000CA060A0E0100CA570E009FC35A09CA37CA
+:1008500000009FC25A090AD2B2CF1608C809DE00AA
+:1008600007069FCF6C091702C809DE00000E0F00B3
+:1008700041909FDE0600C805305006009FC85A0907
+:10088000270C0200B006C009B2062700B406E7072D
+:100890000000AE0627008006001C06002700B606F2
+:1008A00041906750B0060DC067007E06270C060019
+:1008B0008206E707BC088406C8077E06419051AF50
+:1008C00097CF9FAF480CE709B606B406E709B00614
+:1008D000AE0659AF97CF270C0200AC0659AF97CFA1
+:1008E000090C020009DA49D2C919D606C8077E06E2
+:1008F000E00700006002E0070400D007CC0848DBF6
+:10090000419050AF97CF59AF97CF59AF97CFF0578E
+:100910000600060025C1E7077006800641906700C3
+:100920007E06270C06008206E7078C098406C807A6
+:100930007E06419051AF97CF070C0600C7570600BF
+:100940000FC1C807700615CF000C020000DA40D1B5
+:100950002700C2061ECF1DCF270C0200CC0619CFE0
+:1009600027022001E70708002201E7071300B0C0B3
+:1009700097CF419067007E06E70182062702800636
+:10098000E7078C098406C8077E06C107008050AFC0
+:1009900097CF59AF97CF006005C0E7070000C406A6
+:1009A000A7CF7C069FAF000AE7070100C40649AF46
+:1009B000D70900C007AFE70500C04AAFA7CF7C0644
+:1009C000C007FE7F44AF4000C03700014190C037F0
+:1009D0000800DFDE5006C057100002C2C00710003A
+:1009E00027009A0641909FDE400644AF27009C06F0
+:1009F000C0099A06419000D200D89FDE080044AF9B
+:100A00002700C80697CFE787008428C0E767FFFB69
+:100A100024C097CFE7870100D206E7570000A80659
+:100A200097C19FAF000AE787000622C0E7070000D2
+:100A300090C0E767FEFF3EC0E70726000AC0E787D1
+:100A400001003EC0E707FFFFBE069FAF100B97CF28
+:100A50001700A7AF7806C00527007606E7870100D4
+:100A6000D2069FAF000AE7070C0040C09FAF100BF3
+:100A700000902700A6062700AA06E709B206B406DA
+:100A80002700AE062700AC069FAFAE0AC0070000E5
+:100A90002700B2022700B40227008E06C007060016
+:100AA000C809DE00C8170300C9077006290A00DA62
+:100AB0007DC197CFD70900C0C1DF009027009606FF
+:100AC000E707960698062700A006E707A006A206F5
+:100AD0002700A6062700900627009E06C8099C0648
+:100AE000C1099A06C907A40611020902C8174006DF
+:100AF00001DA7AC15194C809C806C907C606C109F6
+:100B00009A0611020902C817080001DA7AC1519445
+:100B1000E70500C097CFE7570000760697C09FAF64
+:100B20000400E709BE06BA06E757FFFFBA0604C18C
+:100B3000E707100BB80697CFE7173200BA06E7674A
+:100B4000FF07BA06E707460BB80697CFE75700003E
+:100B5000C00623C0E707040090C0E707008080C0FC
+:100B6000E707000080C0E707008080C0C0070000E2
+:100B7000C0070000C0070000E707000080C0E707CB
+:100B8000008080C0E707008040C0C0070000E70782
+:100B9000000040C0E707000080C0E707040090C0E5
+:100BA000E707000240C0E7070C0240C0E70700006B
+:100BB000C006E7070000B806E7070000D206D7091D
+:100BC00000C0C1DF9FAF3402E70500C09FAFC40182
+:100BD00097CFD70900C0170017029702E757000008
+:100BE000A80606C0C00992C0C07709029FC15C0573
+:100BF0009FCF3206D7090EC0E70700000EC09FAF97
+:100C0000020CE7050EC097CFD70900C01702C8092C
+:100C1000B0C0E767FE7FB0C0C87700209FC164EB1B
+:100C2000E7570000C8029FC180EBC899CA02C86795
+:100C300004009FC196EB9FCF4CEBE7070000A6C0D6
+:100C4000E709B0C0C802E7070300B0C097CFC009EA
+:100C5000B006C037010097C9C909B2060200419029
+:100C60004802C91706009FAF08049FA2720C02DA5F
+:100C700077C1416071C197CF170257024304210425
+:100C8000E00043042104E00043042104E000C10724
+:100C90000100C905C80597CFE70701008E06C80700
+:100CA0008606E70700008606E70710088806E707BC
+:100CB00004008A06E707BC0C8C06C107038050AF0E
+:0C0CC00097CFE70700008E0697CF0000DA
+:00000001FF
diff --git a/firmware/kaweth/new_code_fix.bin.ihex b/firmware/kaweth/new_code_fix.bin.ihex
new file mode 100644
index 0000000..fb35d3d
--- /dev/null
+++ b/firmware/kaweth/new_code_fix.bin.ihex
@@ -0,0 +1,40 @@
+:10000000B6C3AABBCCDD0200080028002C003400D7
+:100010003C0040004800540058005E006400680046
+:100020006E006C00720076007C00800086008A0002
+:100030009000940098009E00A600AA00B000B400B2
+:10004000B800C000C600CA00D000D400D800E0004C
+:10005000DE00E800F000FC0004010A0118012201A2
+:1000600028013A013E017E0198019C01A201AC01E8
+:10007000B201BA01C001C801D001D601F401FC01EE
+:10008000080216021A0222022A022E023E0244022C
+:100090004A025002640262026C02720286028C0200
+:1000A00090029E02BC02D002D802DC02E002E8020A
+:1000B000E602F402FE0204030C0328037C0390030F
+:1000C00094039C03A203C003D003D403EE03FA03FA
+:1000D000FE032E0432043C0440044E0476047C04E7
+:1000E00084048A048E04A604B004B804BE04D204B6
+:1000F000DC04EE0410051A0524052A05360534052E
+:100100003C05420564056A056E058605220626063D
+:100110002C06300642064A064E06560654065A0675
+:1001200060066606E806EE06F406160726072C07A4
+:10013000320736073A073E07520756075A07640741
+:1001400076077A07800784078A079E07A207DA07DF
+:10015000DE07E207E607EA07EE07F207F6070E08F2
+:10016000160818081A081C081E0820082208240867
+:10017000260828082A082C082E0832083A084608BB
+:100180004E0854085E0878087E08820886088C08A5
+:10019000900898089E08A408AA08B008AE08B408F9
+:1001A000BE08C408C208CA08C808D408E408E80899
+:1001B000F608140912091A092009260924092A092E
+:1001C0003E094C0956097009740978097E097C09B1
+:1001D000820998099C09A009A609B809DC09E8095F
+:1001E000EC09FC09120A180A1E0A420A460A4E0ABB
+:1001F000540A5A0A5E0A680A6E0A720A780A760A6D
+:100200007C0A800A840A940AA40AB80ABE0ABC0AB4
+:10021000C20AC80AC60ACC0AD00AD40AD80ADC0A1A
+:10022000E00AF20AF60AFA0A140B1A0B200B1E0B4C
+:10023000260B2E0B2C0B360B3C0B420B400B4A0BA8
+:10024000AA0BB00BB60BC00BC80BDA0BE80BEC0B10
+:10025000FA0B4A0C540C620C660C960C9A0CA00C0F
+:0E026000A60CA40CAC0CB20CB00CC00C000030
+:00000001FF
diff --git a/firmware/kaweth/trigger_code.bin.ihex b/firmware/kaweth/trigger_code.bin.ihex
new file mode 100644
index 0000000..c3e1658
--- /dev/null
+++ b/firmware/kaweth/trigger_code.bin.ihex
@@ -0,0 +1,13 @@
+:10000000B6C3AABBCCDDC807A000F0075E0006009F
+:10001000F0070A000800F00900000200E7073600B8
+:100020000000F00700000400E70750C310C0F0090B
+:100030000EC00000E78701000EC097CFD70900C0AF
+:100040001702C807A000E71750C310C030D804003B
+:10005000305C08000400B0C00600C805E70500C019
+:10006000C0DF97CF49AFC007000060AF4AAF000CB8
+:100070000C0040D2001C0C0040D230000800F007F9
+:1000800000000400F0078600060067CF270C02007E
+:100090000000270C00000EC049AF64AFC00700008D
+:1000A0004BAF4AAF5ACF0000000000000000000034
+:0600B000940005000000B1
+:00000001FF
diff --git a/firmware/kaweth/trigger_code_fix.bin.ihex b/firmware/kaweth/trigger_code_fix.bin.ihex
new file mode 100644
index 0000000..7712f73
--- /dev/null
+++ b/firmware/kaweth/trigger_code_fix.bin.ihex
@@ -0,0 +1,3 @@
+:10000000B6C3AABBCCDD0200060018003E0080008B
+:060010009800AA000000A8
+:00000001FF
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* Re: [PATCH] kaweth: use request_firmware()
2008-05-29 14:20 ` [PATCH] kaweth: " David Woodhouse
@ 2008-05-30 13:55 ` Oliver Neukum
2008-05-30 15:16 ` David Woodhouse
0 siblings, 1 reply; 72+ messages in thread
From: Oliver Neukum @ 2008-05-30 13:55 UTC (permalink / raw)
To: David Woodhouse
Cc: linux-kernel, alan, akpm, Michael Zappe, Stephane Alnet,
Brad Hards
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 762 bytes --]
Am Donnerstag, 29. Mai 2008 16:20:41 schrieb David Woodhouse:> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â if ((result = kaweth_download_firmware(kaweth,> -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â kaweth_trigger_code_fix,> -Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â len_kaweth_trigger_code_fix,> +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â "kaweth/trigger_code_fix.bin",
We don't put hirarchy policy into drivers.
Regards Oliver
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply [flat|nested] 72+ messages in thread* Re: [PATCH] kaweth: use request_firmware()
2008-05-30 13:55 ` Oliver Neukum
@ 2008-05-30 15:16 ` David Woodhouse
2008-05-30 15:26 ` Marcel Holtmann
0 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-30 15:16 UTC (permalink / raw)
To: Oliver Neukum
Cc: linux-kernel, alan, akpm, Michael Zappe, Stephane Alnet,
Brad Hards
On Fri, 2008-05-30 at 15:55 +0200, Oliver Neukum wrote:
> Am Donnerstag, 29. Mai 2008 16:20:41 schrieb David Woodhouse:
> > if ((result = kaweth_download_firmware(kaweth,
> > - kaweth_trigger_code_fix,
> > - len_kaweth_trigger_code_fix,
> > + "kaweth/trigger_code_fix.bin",
>
> We don't put hirarchy policy into drivers.
Not a strictly accurate observation; we've been doing so for some time.
--
dwmw2
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCH] kaweth: use request_firmware()
2008-05-30 15:16 ` David Woodhouse
@ 2008-05-30 15:26 ` Marcel Holtmann
2008-05-30 15:48 ` Alan Cox
0 siblings, 1 reply; 72+ messages in thread
From: Marcel Holtmann @ 2008-05-30 15:26 UTC (permalink / raw)
To: David Woodhouse
Cc: Oliver Neukum, linux-kernel, alan, akpm, Michael Zappe,
Stephane Alnet, Brad Hards
Hi David,
>>> if ((result = kaweth_download_firmware(kaweth,
>>> -
>>> kaweth_trigger_code_fix,
>>> -
>>> len_kaweth_trigger_code_fix,
>>> + "kaweth/
>>> trigger_code_fix.bin",
>>
>> We don't put hirarchy policy into drivers.
>
> Not a strictly accurate observation; we've been doing so for some
> time.
we tried to not put that policy into the drivers and I was looking
over this, but in the meantime driver slipped past me and made it in.
We should not do this at all and if people wanna have this, then they
should solve this within udev.
Regards
Marcel
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCH] kaweth: use request_firmware()
2008-05-30 15:26 ` Marcel Holtmann
@ 2008-05-30 15:48 ` Alan Cox
2008-05-30 21:02 ` Oliver Neukum
2008-05-31 6:51 ` Marcel Holtmann
0 siblings, 2 replies; 72+ messages in thread
From: Alan Cox @ 2008-05-30 15:48 UTC (permalink / raw)
To: Marcel Holtmann
Cc: David Woodhouse, Oliver Neukum, linux-kernel, akpm, Michael Zappe,
Stephane Alnet, Brad Hards
> we tried to not put that policy into the drivers and I was looking
> over this, but in the meantime driver slipped past me and made it in.
> We should not do this at all and if people wanna have this, then they
> should solve this within udev.
Then you arrived at the party a year too late. The format name/firmware
is commonly used all over the kernel. How that maps to a file or
directory is indeed a matter for udev, but there is already a
heirarchical namespace and pretending otherwise won't help.
Alan
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCH] kaweth: use request_firmware()
2008-05-30 15:48 ` Alan Cox
@ 2008-05-30 21:02 ` Oliver Neukum
2008-05-31 0:00 ` Alexandre Oliva
2008-05-31 6:51 ` Marcel Holtmann
1 sibling, 1 reply; 72+ messages in thread
From: Oliver Neukum @ 2008-05-30 21:02 UTC (permalink / raw)
To: Alan Cox
Cc: Marcel Holtmann, David Woodhouse, linux-kernel, akpm,
Michael Zappe, Stephane Alnet, Brad Hards
Am Freitag, 30. Mai 2008 17:48:42 schrieb Alan Cox:
> > we tried to not put that policy into the drivers and I was looking
> > over this, but in the meantime driver slipped past me and made it in.
> > We should not do this at all and if people wanna have this, then they
> > should solve this within udev.
>
> Then you arrived at the party a year too late. The format name/firmware
> is commonly used all over the kernel. How that maps to a file or
> directory is indeed a matter for udev, but there is already a
> heirarchical namespace and pretending otherwise won't help.
If that is supposed to be constructed from the driver/file pair,
it is a good idea, but would argue against hardcoding it in the source.
Regards
Oliver
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCH] kaweth: use request_firmware()
2008-05-30 21:02 ` Oliver Neukum
@ 2008-05-31 0:00 ` Alexandre Oliva
0 siblings, 0 replies; 72+ messages in thread
From: Alexandre Oliva @ 2008-05-31 0:00 UTC (permalink / raw)
To: Oliver Neukum
Cc: Alan Cox, Marcel Holtmann, David Woodhouse, linux-kernel, akpm,
Michael Zappe, Stephane Alnet, Brad Hards
On May 30, 2008, Oliver Neukum <oliver@neukum.org> wrote:
> If that is supposed to be constructed from the driver/file pair,
> it is a good idea, but would argue against hardcoding it in the source.
It's not. It could be named dwmw2-rulez-new-fix or
dwmw2/rulez/new/fix or anything else, it's just a key, a string, an
identifier. Any pathnames or relationship with driver names you're
seeing there are just a figment of your imagination ;-) / 2
--
Alexandre Oliva http://www.lsd.ic.unicamp.br/~oliva/
Free Software Evangelist oliva@{lsd.ic.unicamp.br, gnu.org}
FSFLA Board Member ¡Sé Libre! => http://www.fsfla.org/
Red Hat Compiler Engineer aoliva@{redhat.com, gcc.gnu.org}
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCH] kaweth: use request_firmware()
2008-05-30 15:48 ` Alan Cox
2008-05-30 21:02 ` Oliver Neukum
@ 2008-05-31 6:51 ` Marcel Holtmann
2008-05-31 12:35 ` Alan Cox
1 sibling, 1 reply; 72+ messages in thread
From: Marcel Holtmann @ 2008-05-31 6:51 UTC (permalink / raw)
To: Alan Cox
Cc: David Woodhouse, Oliver Neukum, linux-kernel, akpm, Michael Zappe,
Stephane Alnet, Brad Hards
Hi Alan,
>> we tried to not put that policy into the drivers and I was looking
>> over this, but in the meantime driver slipped past me and made it in.
>> We should not do this at all and if people wanna have this, then they
>> should solve this within udev.
>
> Then you arrived at the party a year too late. The format name/
> firmware
> is commonly used all over the kernel. How that maps to a file or
> directory is indeed a matter for udev, but there is already a
> heirarchical namespace and pretending otherwise won't help.
I was not late to the party. I was the first one using
request_firmware() and always keeping an eye on drivers using it and
making sure using it correctly. However drivers sneaked in without
that I realized it. Mainly because I don't have that hardware and
reviewing every single driver obviously never happened.
I repeatedly said that no hierarchical namespace should be used (and
this was a couple of years ago) and now since some developers misuse
it, it makes it right. Don't think so.
Regards
Marcel
^ permalink raw reply [flat|nested] 72+ messages in thread
* Re: [PATCH] kaweth: use request_firmware()
2008-05-31 6:51 ` Marcel Holtmann
@ 2008-05-31 12:35 ` Alan Cox
0 siblings, 0 replies; 72+ messages in thread
From: Alan Cox @ 2008-05-31 12:35 UTC (permalink / raw)
To: Marcel Holtmann
Cc: David Woodhouse, Oliver Neukum, linux-kernel, akpm, Michael Zappe,
Stephane Alnet, Brad Hards
> I was not late to the party. I was the first one using
> request_firmware() and always keeping an eye on drivers using it and
> making sure using it correctly. However drivers sneaked in without
> that I realized it. Mainly because I don't have that hardware and
> reviewing every single driver obviously never happened.
Nothing in the documentation says that it can't have a heirarchical name,
so naturally lots of people did it. They didn't sneak in - they improved
on the interface and evolved it. They did it in a way that didn't upset
anything else (which is why you didn't notice).
No sneaking involved.
> I repeatedly said that no hierarchical namespace should be used (and
> this was a couple of years ago) and now since some developers misuse
> it, it makes it right.
It means by consensus the developer community decided that a heirarchical
namespace was useful. And that is the party you've arrived late for.
Alan
^ permalink raw reply [flat|nested] 72+ messages in thread
* [PATCH] ttusb-budget: use request_firmware()
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (31 preceding siblings ...)
2008-05-29 14:20 ` [PATCH] kaweth: " David Woodhouse
@ 2008-05-29 17:49 ` David Woodhouse
2008-06-13 19:23 ` Mauro Carvalho Chehab
2008-05-30 11:45 ` [PATCH] keyspan: " David Woodhouse
2008-05-30 12:19 ` [PATCH] keyspan_pda: " David Woodhouse
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-29 17:49 UTC (permalink / raw)
To: linux-kernel
Cc: alan, akpm, Holger Waechtler, Felix Domke, Michael Krufky,
Mauro Carvalho Chehab
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/media/dvb/ttusb-budget/Kconfig | 9 +
drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c | 14 +-
.../media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h | 1644 --------------------
firmware/Makefile | 1 +
firmware/ttusb-budget-dspbootcode.bin.ihex | 820 ++++++++++
5 files changed, 840 insertions(+), 1648 deletions(-)
delete mode 100644 drivers/media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h
create mode 100644 firmware/ttusb-budget-dspbootcode.bin.ihex
diff --git a/drivers/media/dvb/ttusb-budget/Kconfig b/drivers/media/dvb/ttusb-budget/Kconfig
index f546bcc..7e6b141 100644
--- a/drivers/media/dvb/ttusb-budget/Kconfig
+++ b/drivers/media/dvb/ttusb-budget/Kconfig
@@ -1,5 +1,6 @@
config DVB_TTUSB_BUDGET
tristate "Technotrend/Hauppauge Nova-USB devices"
+ select FW_LOADER
depends on DVB_CORE && USB && I2C
select DVB_CX22700 if !DVB_FE_CUSTOMISE
select DVB_TDA1004X if !DVB_FE_CUSTOMISE
@@ -16,3 +17,11 @@ config DVB_TTUSB_BUDGET
an external software decoder to watch TV.
Say Y if you own such a device and want to use it.
+
+config DVB_TTUSB_BUDGET_FIRMWARE
+ bool "Firmware for Technotrend/Hauppauge Nova-USB devices"
+ depends on DVB_TTUSB_BUDGET
+ help
+ Include DSP bootcode for the device within the kernel image,
+ instead of having it provided from userspace by the firmware
+ loader. Say 'N'.
diff --git a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
index 732ce4d..cef90c6 100644
--- a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
+++ b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
@@ -19,6 +19,7 @@
#include <linux/errno.h>
#include <linux/jiffies.h>
#include <linux/mutex.h>
+#include <linux/firmware.h>
#include "dvb_frontend.h"
#include "dmxdev.h"
@@ -285,13 +286,17 @@ static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg *msg, int num
return i;
}
-#include "dvb-ttusb-dspbootcode.h"
-
static int ttusb_boot_dsp(struct ttusb *ttusb)
{
+ const struct firmware *fw;
int i, err;
u8 b[40];
+ err = request_firmware(&fw, "ttusb-budget-dspbootcode.bin",
+ &ttusb->dev->dev);
+ if (err)
+ return err;
+
/* BootBlock */
b[0] = 0xaa;
b[2] = 0x13;
@@ -299,8 +304,8 @@ static int ttusb_boot_dsp(struct ttusb *ttusb)
/* upload dsp code in 32 byte steps (36 didn't work for me ...) */
/* 32 is max packet size, no messages should be splitted. */
- for (i = 0; i < sizeof(dsp_bootcode); i += 28) {
- memcpy(&b[4], &dsp_bootcode[i], 28);
+ for (i = 0; i < fw->size; i += 28) {
+ memcpy(&b[4], &fw->data[i], 28);
b[1] = ++ttusb->c;
@@ -1820,3 +1825,4 @@ module_exit(ttusb_exit);
MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>");
MODULE_DESCRIPTION("TTUSB DVB Driver");
MODULE_LICENSE("GPL");
+MODULE_FIRMWARE("ttusb-budget-dspbootcode.bin");
diff --git a/drivers/media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h b/drivers/media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h
deleted file mode 100644
index 8c3cd54..0000000
--- a/drivers/media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h
+++ /dev/null
@@ -1,1644 +0,0 @@
-
-#include <asm/types.h>
-
-static u8 dsp_bootcode [] = {
- 0x08, 0xaa, 0x00, 0x18, 0x00, 0x03, 0x08, 0x00,
- 0x00, 0x10, 0x00, 0x00, 0x01, 0x80, 0x18, 0x5f,
- 0x00, 0x00, 0x01, 0x80, 0x77, 0x18, 0x2a, 0xeb,
- 0x6b, 0xf8, 0x00, 0x18, 0x03, 0xff, 0x68, 0xf8,
- 0x00, 0x18, 0xff, 0xfe, 0xf7, 0xb8, 0xf7, 0xbe,
- 0xf6, 0xb9, 0xf4, 0xa0, 0xf6, 0xb7, 0xf6, 0xb5,
- 0xf6, 0xb6, 0xf0, 0x20, 0x19, 0xdf, 0xf1, 0x00,
- 0x00, 0x01, 0xf8, 0x4d, 0x01, 0xab, 0xf6, 0xb8,
- 0xf0, 0x20, 0x19, 0xdf, 0xf0, 0x73, 0x01, 0xa5,
- 0x7e, 0xf8, 0x00, 0x12, 0xf0, 0x00, 0x00, 0x01,
- 0x47, 0xf8, 0x00, 0x11, 0x7e, 0x92, 0x00, 0xf8,
- 0x00, 0x11, 0xf0, 0x00, 0x00, 0x01, 0x7e, 0xf8,
- 0x00, 0x11, 0xf0, 0x00, 0x00, 0x01, 0x6c, 0x89,
- 0x01, 0x9a, 0xf7, 0xb8, 0xee, 0xfc, 0xf0, 0x20,
- 0xff, 0xff, 0xf1, 0x00, 0x00, 0x01, 0xf8, 0x4d,
- 0x01, 0xbf, 0xf2, 0x73, 0x01, 0xb9, 0x4e, 0x02,
- 0xf4, 0x95, 0xf5, 0xe3, 0x56, 0x02, 0x7e, 0x00,
- 0x11, 0x00, 0xfa, 0x4c, 0x01, 0xb7, 0x6b, 0x03,
- 0x00, 0x01, 0xf6, 0xb8, 0xee, 0x04, 0xf0, 0x74,
- 0x0d, 0xa7, 0xf0, 0x74, 0x01, 0xc5, 0x4a, 0x11,
- 0x4a, 0x16, 0x72, 0x11, 0x2a, 0xe6, 0x10, 0xf8,
- 0x00, 0x11, 0xfa, 0x45, 0x01, 0xdb, 0xf4, 0x95,
- 0xee, 0xff, 0x48, 0x11, 0xf0, 0x00, 0x2a, 0xc6,
- 0x88, 0x16, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0xee,
- 0xff, 0xff, 0xf4, 0xe3, 0x6c, 0xe9, 0xff, 0xff,
- 0x01, 0xd5, 0x10, 0xf8, 0x2a, 0xe7, 0xf8, 0x45,
- 0x01, 0xe2, 0x10, 0xf8, 0x2a, 0xe7, 0xf4, 0xe3,
- 0xf0, 0x74, 0x01, 0xff, 0xee, 0x01, 0x8a, 0x16,
- 0x8a, 0x11, 0xfc, 0x00, 0xf7, 0xb8, 0xe9, 0x20,
- 0x4a, 0x11, 0x09, 0xf8, 0x2a, 0xe6, 0xf8, 0x4e,
- 0x01, 0xf3, 0xf2, 0x73, 0x01, 0xfd, 0xf4, 0x95,
- 0xe8, 0x01, 0x72, 0x11, 0x2a, 0xe6, 0x49, 0x11,
- 0x80, 0xe1, 0x2a, 0xc6, 0xf3, 0x00, 0x00, 0x01,
- 0xe8, 0x00, 0x81, 0xf8, 0x2a, 0xe6, 0x8a, 0x11,
- 0xfc, 0x00, 0xf4, 0x95, 0xf0, 0x73, 0x02, 0x00,
- 0x10, 0xf8, 0x2a, 0x0f, 0xfc, 0x00, 0x4a, 0x11,
- 0xf0, 0x74, 0x02, 0x02, 0x80, 0xf8, 0x2a, 0x10,
- 0x73, 0x08, 0x00, 0x09, 0x40, 0xf8, 0x2a, 0x15,
- 0x82, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0x77, 0x10,
- 0x03, 0xe8, 0xf5, 0xa9, 0xf8, 0x30, 0x02, 0x21,
- 0x71, 0xf8, 0x2a, 0x10, 0x2a, 0x15, 0x56, 0xf8,
- 0x2a, 0x0c, 0xf0, 0xe3, 0x4e, 0xf8, 0x2a, 0x16,
- 0xe8, 0x00, 0x4e, 0xf8, 0x2a, 0x0c, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1d,
- 0x68, 0xf8, 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8,
- 0x00, 0x07, 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d,
- 0xff, 0xfc, 0x6b, 0xf8, 0x2a, 0x0f, 0x00, 0x01,
- 0x8a, 0x1d, 0x8a, 0x07, 0x8a, 0x06, 0xf4, 0xeb,
- 0xee, 0xfd, 0x76, 0xf8, 0x2a, 0x0f, 0x00, 0x00,
- 0x76, 0x00, 0x00, 0x00, 0xfb, 0x80, 0x19, 0x4c,
- 0xf4, 0x95, 0xe8, 0x00, 0x80, 0xf8, 0x2a, 0x11,
- 0xf9, 0x80, 0x19, 0x07, 0x80, 0xf8, 0x2a, 0x0e,
- 0xf9, 0x80, 0x16, 0x66, 0x76, 0x00, 0x2a, 0x12,
- 0x10, 0xf8, 0x2a, 0x11, 0xf9, 0x80, 0x18, 0xe3,
- 0x10, 0xf8, 0x2a, 0x0e, 0xf9, 0x80, 0x16, 0x66,
- 0x10, 0xf8, 0x2a, 0x0e, 0xf9, 0x80, 0x16, 0x87,
- 0xee, 0x03, 0xfc, 0x00, 0x4a, 0x11, 0xf6, 0xb8,
- 0xf4, 0x95, 0xf0, 0x20, 0x80, 0x00, 0x11, 0xf8,
- 0x2a, 0x5a, 0xf8, 0x4d, 0x02, 0x93, 0x11, 0xf8,
- 0x2a, 0x9f, 0xf8, 0x4c, 0x02, 0x7c, 0x77, 0x12,
- 0x2a, 0x39, 0x49, 0x12, 0x01, 0xf8, 0x2a, 0x9f,
- 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0x81,
- 0x00, 0x11, 0x6c, 0xe1, 0xff, 0xab, 0x02, 0x93,
- 0x6b, 0xf8, 0x2a, 0x9f, 0x00, 0x01, 0xe9, 0x05,
- 0x01, 0xe2, 0x00, 0x03, 0x81, 0xf8, 0x2a, 0xa0,
- 0xf0, 0x73, 0x02, 0x95, 0x72, 0x11, 0x2a, 0x9f,
- 0xf4, 0x95, 0x10, 0xe1, 0x2a, 0x39, 0x6b, 0xf8,
- 0x2a, 0x9f, 0x00, 0x01, 0x11, 0xf8, 0x2a, 0x9f,
- 0x09, 0xf8, 0x2a, 0xa0, 0xf8, 0x4c, 0x02, 0x93,
- 0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x00, 0x76, 0xf8,
- 0x2a, 0x9f, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa0,
- 0x00, 0x00, 0x88, 0x11, 0xf4, 0x95, 0x48, 0x11,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
- 0x10, 0xf8, 0x2a, 0x5a, 0xf8, 0x44, 0x02, 0xb2,
- 0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x01, 0xf0, 0x74,
- 0x02, 0x58, 0x88, 0x11, 0xf4, 0x95, 0x77, 0x10,
- 0x80, 0x00, 0xf4, 0xa9, 0xf8, 0x30, 0x02, 0xb2,
- 0x48, 0x11, 0xf0, 0x30, 0x00, 0xff, 0x80, 0x00,
- 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x18, 0xd6,
- 0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00, 0xf4, 0x95,
- 0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a, 0x4a, 0x0b,
- 0x4a, 0x0c, 0x4a, 0x0d, 0x4a, 0x10, 0x4a, 0x11,
- 0x4a, 0x12, 0x4a, 0x13, 0x4a, 0x14, 0x4a, 0x15,
- 0x4a, 0x16, 0x4a, 0x17, 0x4a, 0x17, 0x4a, 0x19,
- 0x4a, 0x0e, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1a,
- 0x4a, 0x1d, 0x4a, 0x1b, 0x4a, 0x1c, 0x68, 0xf8,
- 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
- 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
- 0x48, 0x18, 0x68, 0xf8, 0x00, 0x18, 0xff, 0xfe,
- 0xf4, 0x95, 0xf4, 0x95, 0x4a, 0x08, 0xee, 0xfd,
- 0xf0, 0x74, 0x02, 0x58, 0x88, 0x11, 0xf4, 0x95,
- 0x77, 0x10, 0x80, 0x00, 0xf4, 0xa9, 0xf8, 0x30,
- 0x02, 0xef, 0x48, 0x11, 0xf0, 0x30, 0x00, 0xff,
- 0x80, 0x00, 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80,
- 0x18, 0xd6, 0xee, 0x03, 0x8a, 0x18, 0xf4, 0x95,
- 0x8a, 0x1c, 0x8a, 0x1b, 0x8a, 0x1d, 0x8a, 0x1a,
- 0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0e, 0x8a, 0x19,
- 0x8a, 0x17, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x15,
- 0x8a, 0x14, 0x8a, 0x13, 0x8a, 0x12, 0x8a, 0x11,
- 0x8a, 0x10, 0x8a, 0x0d, 0x8a, 0x0c, 0x8a, 0x0b,
- 0x8a, 0x0a, 0x8a, 0x09, 0x8a, 0x08, 0xf4, 0xeb,
- 0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81,
- 0x00, 0x55, 0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2,
- 0x00, 0x01, 0x80, 0xe1, 0x00, 0x01, 0x10, 0xe2,
- 0x00, 0x02, 0x80, 0xe1, 0x00, 0x02, 0x76, 0xe1,
- 0x00, 0x03, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x04,
- 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11, 0xf4, 0x95,
- 0xf4, 0x95, 0x10, 0x81, 0x6f, 0xf8, 0x2a, 0x9e,
- 0x0c, 0x88, 0xe8, 0xff, 0x18, 0xe1, 0x00, 0x01,
- 0x1a, 0xf8, 0x2a, 0x9e, 0xf0, 0x30, 0x1f, 0xff,
- 0x80, 0xf8, 0x2a, 0x9e, 0x8a, 0x11, 0xfc, 0x00,
- 0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81,
- 0x00, 0x55, 0x77, 0x12, 0x2a, 0x18, 0x11, 0xe2,
- 0x00, 0x01, 0x81, 0xe1, 0x00, 0x01, 0x11, 0xe2,
- 0x00, 0x02, 0x81, 0xe1, 0x00, 0x02, 0x76, 0xe1,
- 0x00, 0x03, 0x00, 0x02, 0x48, 0x08, 0x6f, 0xe1,
- 0x00, 0x04, 0x0c, 0x98, 0xf0, 0x30, 0x00, 0xff,
- 0x80, 0xe1, 0x00, 0x05, 0x76, 0xe1, 0x00, 0x06,
- 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39,
- 0x76, 0x81, 0x00, 0x55, 0x77, 0x12, 0x2a, 0x18,
- 0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1, 0x00, 0x01,
- 0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1, 0x00, 0x02,
- 0x76, 0xe1, 0x00, 0x03, 0x00, 0x04, 0x48, 0x11,
- 0xf0, 0x00, 0x00, 0x04, 0x88, 0x12, 0xf4, 0x95,
- 0x77, 0x13, 0x2a, 0x76, 0xe9, 0x00, 0xe5, 0x98,
- 0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8, 0x48, 0x0b,
- 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43, 0x03, 0x71,
- 0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xf0,
- 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0x81,
- 0x00, 0x14, 0x71, 0xe1, 0x00, 0x01, 0x00, 0x15,
- 0x49, 0x11, 0xf3, 0x00, 0x00, 0x02, 0x89, 0x11,
- 0xe7, 0x82, 0x6d, 0xea, 0x00, 0x04, 0xe7, 0x83,
- 0x6d, 0xeb, 0x00, 0x0a, 0x77, 0x1a, 0x00, 0x05,
- 0xf0, 0x72, 0x03, 0xaa, 0x11, 0x81, 0xf2, 0xe8,
- 0x80, 0x82, 0xe9, 0xff, 0x19, 0xe1, 0x00, 0x01,
- 0xf1, 0xa0, 0x81, 0x92, 0x11, 0xe1, 0x00, 0x0c,
- 0xf2, 0xe8, 0x80, 0x83, 0xe9, 0xff, 0x19, 0xe1,
- 0x00, 0x0d, 0xf1, 0xa0, 0x81, 0x93, 0x6d, 0xe9,
- 0x00, 0x02, 0x48, 0x18, 0x49, 0x18, 0x70, 0x00,
- 0x00, 0x15, 0xf0, 0x00, 0x00, 0x04, 0xf3, 0x00,
- 0x00, 0x0a, 0x80, 0x01, 0x81, 0x02, 0xf2, 0x74,
- 0x0e, 0x54, 0xf4, 0x95, 0x48, 0x14, 0xee, 0x10,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xf0, 0x74,
- 0x0c, 0x5e, 0x80, 0xf8, 0x2a, 0x5c, 0x77, 0x12,
- 0x2a, 0x39, 0x76, 0x82, 0x00, 0x55, 0x77, 0x11,
- 0x2a, 0x18, 0x10, 0xe1, 0x00, 0x01, 0x80, 0xe2,
- 0x00, 0x01, 0x10, 0xe1, 0x00, 0x02, 0x80, 0xe2,
- 0x00, 0x02, 0x76, 0xe2, 0x00, 0x03, 0x00, 0x1c,
- 0xf6, 0xb8, 0x56, 0xf8, 0x2a, 0x16, 0xf0, 0xf0,
- 0xf0, 0xf8, 0x80, 0xe2, 0x00, 0x07, 0x56, 0xf8,
- 0x2a, 0x16, 0xf1, 0xf0, 0xe8, 0xff, 0xf2, 0x80,
- 0x80, 0xe2, 0x00, 0x06, 0x56, 0xf8, 0x2a, 0x16,
- 0xf1, 0xf8, 0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2,
- 0x00, 0x05, 0x57, 0xf8, 0x2a, 0x16, 0xe8, 0xff,
- 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x04, 0x56, 0xf8,
- 0x27, 0x6c, 0xf0, 0xf0, 0xf0, 0xf8, 0x80, 0xe2,
- 0x00, 0x0b, 0x56, 0xf8, 0x27, 0x6c, 0xf1, 0xf0,
- 0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x0a,
- 0x56, 0xf8, 0x27, 0x6c, 0xf1, 0xf8, 0xe8, 0xff,
- 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x09, 0xe8, 0xff,
- 0x57, 0xf8, 0x27, 0x6c, 0xf2, 0x80, 0x80, 0xe2,
- 0x00, 0x08, 0x56, 0xf8, 0x27, 0x6a, 0xf0, 0xf0,
- 0xf0, 0xf8, 0x80, 0xe2, 0x00, 0x0f, 0x56, 0xf8,
- 0x27, 0x6a, 0xf1, 0xf0, 0xe8, 0xff, 0xf2, 0x80,
- 0x80, 0xe2, 0x00, 0x0e, 0x56, 0xf8, 0x27, 0x6a,
- 0xf1, 0xf8, 0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2,
- 0x00, 0x0d, 0x57, 0xf8, 0x27, 0x6a, 0xe8, 0xff,
- 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x0c, 0x76, 0xe2,
- 0x00, 0x13, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x12,
- 0x00, 0x00, 0x6f, 0xf8, 0x2a, 0x5c, 0x0c, 0x58,
- 0x80, 0xe2, 0x00, 0x11, 0xe8, 0xff, 0x18, 0xf8,
- 0x2a, 0x5c, 0x80, 0xe2, 0x00, 0x10, 0x76, 0xe2,
- 0x00, 0x17, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x16,
- 0x00, 0x00, 0x6f, 0xf8, 0x2a, 0x9e, 0x0c, 0x58,
- 0x80, 0xe2, 0x00, 0x15, 0xe8, 0xff, 0x18, 0xf8,
- 0x2a, 0x9e, 0x80, 0xe2, 0x00, 0x14, 0x76, 0xe2,
- 0x00, 0x1b, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x1a,
- 0x00, 0x00, 0x76, 0xe2, 0x00, 0x19, 0x00, 0x00,
- 0x70, 0xe2, 0x00, 0x18, 0x27, 0x6e, 0x76, 0xe2,
- 0x00, 0x1f, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x1e,
- 0x00, 0x00, 0x76, 0xe2, 0x00, 0x1d, 0x00, 0x00,
- 0x76, 0xe2, 0x00, 0x1c, 0x00, 0x00, 0x76, 0xe2,
- 0x00, 0x20, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
- 0x10, 0xf8, 0x2a, 0x38, 0xf8, 0x45, 0x04, 0xed,
- 0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x02,
- 0x88, 0x11, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x08,
- 0x6d, 0xe9, 0xff, 0xdf, 0xf6, 0xa9, 0xf8, 0x20,
- 0x04, 0x75, 0xf0, 0x73, 0x04, 0x7d, 0xf0, 0x10,
- 0x00, 0x21, 0xf0, 0x00, 0x1a, 0x83, 0x48, 0x08,
- 0x7e, 0xf8, 0x00, 0x08, 0xf4, 0xe2, 0xf0, 0x74,
- 0x03, 0x0a, 0xf0, 0x73, 0x04, 0xea, 0x48, 0x12,
- 0xf2, 0x74, 0x03, 0x23, 0xf0, 0x00, 0x00, 0x04,
- 0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00,
- 0xf0, 0x73, 0x04, 0xea, 0x77, 0x11, 0x2a, 0x18,
- 0xe8, 0xff, 0x6f, 0xe1, 0x00, 0x04, 0x0d, 0x48,
- 0x18, 0xe1, 0x00, 0x05, 0xf2, 0x74, 0x09, 0x69,
- 0xf4, 0x95, 0xf2, 0xa0, 0xf0, 0x74, 0x03, 0x36,
- 0xf0, 0x73, 0x04, 0xea, 0x77, 0x11, 0x2a, 0x18,
- 0xe8, 0xff, 0x6f, 0xe1, 0x00, 0x04, 0x0d, 0x48,
- 0x18, 0xe1, 0x00, 0x05, 0xf2, 0x74, 0x09, 0x41,
- 0xf4, 0x95, 0xf2, 0xa0, 0xf0, 0x74, 0x03, 0x36,
- 0xf0, 0x73, 0x04, 0xea, 0xf0, 0x74, 0x03, 0x57,
- 0xf0, 0x73, 0x04, 0xea, 0x10, 0xf8, 0x2a, 0x1c,
- 0xf0, 0x74, 0x12, 0xa4, 0xf2, 0x74, 0x03, 0x36,
- 0xf4, 0x95, 0xe8, 0x00, 0xf0, 0x73, 0x04, 0xea,
- 0x48, 0x12, 0xf2, 0x74, 0x03, 0x80, 0xf0, 0x00,
- 0x00, 0x04, 0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95,
- 0xe8, 0x00, 0xf0, 0x73, 0x04, 0xea, 0x10, 0xf8,
- 0x2a, 0x1c, 0xf0, 0x74, 0x12, 0xc5, 0xf2, 0x74,
- 0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00, 0xf0, 0x73,
- 0x04, 0xea, 0x77, 0x11, 0x2a, 0x18, 0xe8, 0xff,
- 0x6f, 0xe1, 0x00, 0x06, 0x0d, 0x48, 0x18, 0xe1,
- 0x00, 0x07, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0xf2, 0xa0, 0x70, 0x00, 0x00, 0x12, 0x80, 0x01,
- 0x10, 0xe1, 0x00, 0x04, 0xf0, 0x74, 0x0e, 0x7a,
- 0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00,
- 0xf0, 0x73, 0x04, 0xea, 0xf0, 0x74, 0x03, 0xbc,
- 0x76, 0xf8, 0x2a, 0x38, 0x00, 0x00, 0xee, 0x02,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11,
- 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55, 0x77, 0x12,
- 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1,
- 0x00, 0x01, 0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1,
- 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x09,
- 0x48, 0x11, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x12,
- 0xf4, 0x95, 0x77, 0x13, 0x2a, 0x86, 0xe9, 0x00,
- 0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8,
- 0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43,
- 0x05, 0x0a, 0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74,
- 0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55,
- 0x77, 0x13, 0x2a, 0x18, 0x10, 0xe3, 0x00, 0x01,
- 0x80, 0xe1, 0x00, 0x01, 0x10, 0xe3, 0x00, 0x02,
- 0x80, 0xe1, 0x00, 0x02, 0x13, 0xe3, 0x00, 0x03,
- 0x81, 0xe1, 0x00, 0x03, 0x48, 0x11, 0x77, 0x11,
- 0x00, 0x00, 0xf8, 0x4d, 0x05, 0x44, 0xf0, 0x00,
- 0x00, 0x04, 0x88, 0x12, 0x48, 0x13, 0xf0, 0x00,
- 0x00, 0x04, 0x88, 0x13, 0xf4, 0x95, 0xf4, 0x95,
- 0xe5, 0x98, 0x6d, 0x91, 0xf6, 0xb8, 0x48, 0x11,
- 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43, 0x05, 0x3a,
- 0xf0, 0x20, 0x2a, 0x39, 0x49, 0x11, 0xf5, 0x00,
- 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x76, 0xe1,
- 0x00, 0x04, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11,
- 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55, 0x77, 0x12,
- 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1,
- 0x00, 0x01, 0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1,
- 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x0c,
- 0x48, 0x11, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x12,
- 0xf4, 0x95, 0x77, 0x13, 0x2a, 0x7a, 0xe9, 0x00,
- 0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8,
- 0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43,
- 0x05, 0x6a, 0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74,
- 0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55,
- 0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01,
- 0x80, 0xe1, 0x00, 0x01, 0x10, 0xe2, 0x00, 0x02,
- 0x80, 0xe1, 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03,
- 0x00, 0x19, 0x48, 0x11, 0xf0, 0x00, 0x00, 0x04,
- 0x88, 0x12, 0xf4, 0x95, 0x77, 0x13, 0x2a, 0x5d,
- 0xe9, 0x00, 0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01,
- 0xf6, 0xb8, 0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c,
- 0xf8, 0x43, 0x05, 0x93, 0x76, 0x82, 0x00, 0xaa,
- 0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00,
- 0x4a, 0x11, 0x88, 0x11, 0x10, 0xf8, 0x2a, 0x38,
- 0xf8, 0x44, 0x05, 0xe3, 0x10, 0xf8, 0x2a, 0xa1,
- 0xf8, 0x44, 0x05, 0xba, 0x6c, 0xe1, 0xff, 0x56,
- 0x05, 0xe3, 0x72, 0x12, 0x2a, 0xa1, 0xf4, 0x95,
- 0x70, 0xe2, 0x2a, 0x18, 0x00, 0x11, 0x6b, 0xf8,
- 0x2a, 0xa1, 0x00, 0x01, 0xf0, 0x73, 0x05, 0xe3,
- 0x72, 0x12, 0x2a, 0xa1, 0xf4, 0x95, 0x70, 0xe2,
- 0x2a, 0x18, 0x00, 0x11, 0x10, 0xf8, 0x2a, 0xa1,
- 0xf0, 0x00, 0x00, 0x01, 0x88, 0x12, 0xf4, 0x95,
- 0xf4, 0x95, 0x6e, 0xe2, 0xff, 0xfc, 0x05, 0xd1,
- 0x73, 0x12, 0x2a, 0xa1, 0x48, 0x11, 0xf0, 0x00,
- 0x00, 0x05, 0x80, 0xf8, 0x2a, 0xa2, 0x10, 0xf8,
- 0x2a, 0xa1, 0x08, 0xf8, 0x2a, 0xa2, 0xf8, 0x44,
- 0x05, 0xe3, 0x6c, 0xe1, 0xff, 0xab, 0x05, 0xdd,
- 0x76, 0xf8, 0x2a, 0x38, 0x00, 0x01, 0x76, 0xf8,
- 0x2a, 0xa1, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa2,
- 0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0xf4, 0x95,
- 0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a, 0x4a, 0x0b,
- 0x4a, 0x0c, 0x4a, 0x0d, 0x4a, 0x10, 0x4a, 0x11,
- 0x4a, 0x12, 0x4a, 0x13, 0x4a, 0x14, 0x4a, 0x15,
- 0x4a, 0x16, 0x4a, 0x17, 0x4a, 0x17, 0x4a, 0x19,
- 0x4a, 0x0e, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1a,
- 0x4a, 0x1d, 0x4a, 0x1b, 0x4a, 0x1c, 0x68, 0xf8,
- 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
- 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
- 0x48, 0x18, 0x68, 0xf8, 0x00, 0x18, 0xff, 0xfe,
- 0xf4, 0x95, 0xf4, 0x95, 0x4a, 0x08, 0xee, 0xff,
- 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x18, 0x04,
- 0xf0, 0x74, 0x05, 0xa2, 0xee, 0x01, 0x8a, 0x18,
- 0xf4, 0x95, 0x8a, 0x1c, 0x8a, 0x1b, 0x8a, 0x1d,
- 0x8a, 0x1a, 0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0e,
- 0x8a, 0x19, 0x8a, 0x17, 0x8a, 0x17, 0x8a, 0x16,
- 0x8a, 0x15, 0x8a, 0x14, 0x8a, 0x13, 0x8a, 0x12,
- 0x8a, 0x11, 0x8a, 0x10, 0x8a, 0x0d, 0x8a, 0x0c,
- 0x8a, 0x0b, 0x8a, 0x0a, 0x8a, 0x09, 0x8a, 0x08,
- 0xf4, 0xeb, 0xee, 0xfd, 0x76, 0xf8, 0x2a, 0x38,
- 0x00, 0x00, 0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x00,
- 0xe8, 0x01, 0x4e, 0x00, 0xfb, 0x80, 0x17, 0xd6,
- 0xf4, 0x95, 0xe8, 0x01, 0x80, 0xf8, 0x2a, 0x5b,
- 0x76, 0x00, 0x2a, 0x8f, 0xf9, 0x80, 0x16, 0xaa,
- 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x17, 0x5c,
- 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x17, 0x6f,
- 0xfb, 0x80, 0x16, 0x66, 0xf4, 0x95, 0xe8, 0x1a,
- 0xfb, 0x80, 0x16, 0x87, 0xf4, 0x95, 0xe8, 0x1a,
- 0xfb, 0x80, 0x16, 0x66, 0xf4, 0x95, 0xe8, 0x1b,
- 0xfb, 0x80, 0x16, 0x87, 0xf4, 0x95, 0xe8, 0x1b,
- 0xee, 0x03, 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95,
- 0x13, 0x02, 0x88, 0x11, 0xe8, 0x00, 0xf8, 0x4d,
- 0x06, 0x6a, 0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a,
- 0xf4, 0x95, 0xf0, 0x72, 0x06, 0x69, 0x1c, 0x91,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11,
- 0x12, 0x03, 0x11, 0x02, 0xf8, 0x45, 0x06, 0x79,
- 0xf0, 0x10, 0x00, 0x01, 0x88, 0x1a, 0xf4, 0x95,
- 0xf0, 0x72, 0x06, 0x78, 0x81, 0x91, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02,
- 0x00, 0x11, 0x11, 0x03, 0x61, 0xf8, 0x00, 0x11,
- 0x00, 0x01, 0xf8, 0x30, 0x06, 0x91, 0xf6, 0xb8,
- 0x6f, 0xf8, 0x00, 0x11, 0x0c, 0x1f, 0x88, 0x11,
- 0xf3, 0xe8, 0xe8, 0xff, 0x18, 0x81, 0xf1, 0xa0,
- 0x81, 0x81, 0xf0, 0x73, 0x06, 0x9d, 0xf6, 0xb8,
- 0x6f, 0xf8, 0x00, 0x11, 0x0c, 0x1f, 0x88, 0x11,
- 0xf3, 0x30, 0x00, 0xff, 0xf0, 0x20, 0xff, 0x00,
- 0x18, 0x81, 0xf1, 0xa0, 0x81, 0x81, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x11, 0x02,
- 0x61, 0xf8, 0x00, 0x0b, 0x00, 0x01, 0xf8, 0x20,
- 0x06, 0xb1, 0x49, 0x0b, 0xf6, 0x1f, 0x88, 0x11,
- 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xf2, 0x73,
- 0x06, 0xb8, 0xf0, 0x30, 0x00, 0xff, 0x49, 0x0b,
- 0xf6, 0x1f, 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95,
- 0x12, 0x81, 0xf4, 0x78, 0x8a, 0x11, 0xfc, 0x00,
- 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x12,
- 0x13, 0x03, 0x88, 0x11, 0xe8, 0x00, 0xf8, 0x4d,
- 0x06, 0xcc, 0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a,
- 0xf4, 0x95, 0xf0, 0x72, 0x06, 0xcb, 0x11, 0x92,
- 0xf2, 0xc0, 0x81, 0x91, 0x8a, 0x11, 0xfc, 0x00,
- 0x88, 0x12, 0x12, 0x02, 0x71, 0x01, 0x00, 0x13,
- 0xf8, 0x45, 0x06, 0xdb, 0xf0, 0x10, 0x00, 0x01,
- 0x88, 0x1a, 0xf4, 0x95, 0xf0, 0x72, 0x06, 0xda,
- 0xe5, 0x98, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
- 0x88, 0x11, 0x11, 0x04, 0x10, 0x06, 0x71, 0x05,
- 0x00, 0x12, 0x61, 0xf8, 0x00, 0x12, 0x00, 0x01,
- 0xf8, 0x20, 0x06, 0xea, 0xf0, 0x00, 0x00, 0x01,
- 0xf6, 0xb8, 0xf0, 0x00, 0x00, 0x01, 0x6f, 0xf8,
- 0x00, 0x12, 0x0f, 0x1f, 0x48, 0x08, 0x81, 0x00,
- 0xf4, 0x7f, 0x80, 0x01, 0xf2, 0x74, 0x06, 0xba,
- 0xf4, 0x95, 0x48, 0x11, 0xee, 0x02, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 0x88, 0x12,
- 0x11, 0x04, 0x10, 0x06, 0x71, 0x05, 0x00, 0x13,
- 0x61, 0xf8, 0x00, 0x13, 0x00, 0x01, 0xf8, 0x20,
- 0x07, 0x09, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00,
- 0x00, 0x01, 0x88, 0x11, 0xf6, 0xb8, 0x6f, 0xf8,
- 0x00, 0x13, 0x0f, 0x1f, 0x81, 0x00, 0x48, 0x11,
- 0xf4, 0x7f, 0x80, 0x01, 0xf2, 0x74, 0x06, 0xce,
- 0xf4, 0x95, 0x48, 0x12, 0x48, 0x11, 0xf0, 0x30,
- 0xff, 0xfe, 0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00,
- 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xfc,
- 0xf4, 0x95, 0x80, 0x02, 0x71, 0x08, 0x00, 0x16,
- 0x10, 0x09, 0x71, 0x0b, 0x00, 0x17, 0x80, 0x03,
- 0x71, 0x0a, 0x00, 0x11, 0x48, 0x17, 0xf8, 0x45,
- 0x07, 0x3f, 0x70, 0x00, 0x00, 0x11, 0x10, 0x03,
- 0xf0, 0x74, 0x06, 0x9f, 0x80, 0x01, 0x70, 0x00,
- 0x00, 0x16, 0x10, 0x02, 0xf0, 0x74, 0x06, 0x7b,
- 0x6d, 0x91, 0x6d, 0x96, 0x6c, 0xef, 0xff, 0xff,
- 0x07, 0x2f, 0xee, 0x04, 0x8a, 0x17, 0x8a, 0x16,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
- 0x10, 0xf8, 0x2a, 0xe8, 0x08, 0xf8, 0x2a, 0xe9,
- 0xf8, 0x45, 0x07, 0x64, 0x76, 0x00, 0x00, 0x01,
- 0x62, 0xf8, 0x2a, 0xe9, 0x00, 0x5e, 0xf2, 0x74,
- 0x12, 0x0b, 0xf0, 0x00, 0x30, 0x40, 0x72, 0x11,
- 0x2a, 0xe9, 0x77, 0x10, 0x00, 0x0f, 0xf5, 0xa9,
- 0xf8, 0x20, 0x07, 0x61, 0x6b, 0xf8, 0x2a, 0xe9,
- 0x00, 0x01, 0xf0, 0x73, 0x07, 0x64, 0x76, 0xf8,
- 0x2a, 0xe9, 0x00, 0x00, 0xee, 0x02, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11, 0xe8, 0x00,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x08, 0xe8, 0x00,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x09, 0xf6, 0xb8,
- 0xf4, 0x95, 0xf0, 0x20, 0xfc, 0x3f, 0x75, 0xf8,
- 0x00, 0x08, 0x00, 0x0d, 0xf0, 0x20, 0x0c, 0x30,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x0c, 0x76, 0xf8,
- 0x2a, 0xe8, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xe9,
- 0x00, 0x00, 0x6c, 0x81, 0x07, 0x92, 0x76, 0xf8,
- 0x2a, 0xea, 0x00, 0x00, 0xfb, 0x80, 0x16, 0x76,
- 0xf4, 0x95, 0xe8, 0x10, 0xe8, 0x00, 0x75, 0xf8,
- 0x00, 0x08, 0x00, 0x00, 0xf0, 0x73, 0x07, 0xa8,
- 0x76, 0xf8, 0x2a, 0xea, 0x00, 0x01, 0xfb, 0x80,
- 0x16, 0x66, 0xf4, 0x95, 0xe8, 0x10, 0xfb, 0x80,
- 0x16, 0x87, 0xf4, 0x95, 0xe8, 0x10, 0xe8, 0x00,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x00, 0xf6, 0xb8,
- 0xf4, 0x95, 0xf0, 0x20, 0xff, 0xff, 0x75, 0xf8,
- 0x00, 0x08, 0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00,
- 0xf4, 0x95, 0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a,
- 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8,
- 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
- 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
- 0x10, 0xf8, 0x2a, 0xea, 0xf8, 0x45, 0x07, 0xe1,
- 0x10, 0xf8, 0x2a, 0xe8, 0xf0, 0x00, 0x00, 0x01,
- 0xf0, 0x30, 0x00, 0x0f, 0x80, 0xf8, 0x2a, 0xe8,
- 0x10, 0xf8, 0x2a, 0xe8, 0xf8, 0x44, 0x07, 0xd6,
- 0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xfc, 0x3f,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x0d, 0xf0, 0x20,
- 0x0c, 0x30, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x0c,
- 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x00,
- 0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xff, 0xff,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x00, 0x8a, 0x1d,
- 0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0a, 0x8a, 0x09,
- 0x8a, 0x08, 0xf4, 0xeb, 0xee, 0xff, 0xf2, 0x74,
- 0x07, 0x67, 0xf4, 0x95, 0xe8, 0x01, 0xee, 0x01,
- 0xfc, 0x00, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8,
- 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
- 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
- 0x8a, 0x1d, 0x8a, 0x07, 0xf4, 0xeb, 0x4a, 0x11,
- 0x77, 0x11, 0x00, 0x28, 0x76, 0x81, 0x24, 0x00,
- 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
- 0xf2, 0x74, 0x07, 0x67, 0xf4, 0x95, 0xe8, 0x00,
- 0x77, 0x11, 0x00, 0x1d, 0x68, 0x81, 0x00, 0x7f,
- 0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xff, 0x80,
- 0x77, 0x11, 0x00, 0x1d, 0xf0, 0x30, 0x01, 0x00,
- 0x1a, 0x81, 0x80, 0x81, 0xf0, 0x74, 0x0a, 0x33,
- 0xf0, 0x74, 0x11, 0xac, 0xf9, 0x80, 0x13, 0x25,
- 0xf9, 0x80, 0x16, 0x53, 0xf9, 0x80, 0x17, 0x82,
- 0xf0, 0x74, 0x06, 0x2f, 0xf9, 0x80, 0x14, 0xb2,
- 0xf9, 0x80, 0x19, 0x10, 0xf0, 0x74, 0x0d, 0xe3,
- 0xf0, 0x74, 0x07, 0xe8, 0xf0, 0x74, 0x02, 0x36,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x60, 0xf8,
- 0x27, 0x7b, 0xff, 0xff, 0xf8, 0x30, 0x08, 0x39,
- 0x71, 0xf8, 0x27, 0x7b, 0x27, 0x79, 0x60, 0xf8,
- 0x27, 0x79, 0xff, 0xff, 0xf8, 0x30, 0x08, 0xb2,
- 0x10, 0xf8, 0x29, 0x86, 0x08, 0xf8, 0x27, 0x79,
- 0xf0, 0x30, 0x7f, 0xff, 0x88, 0x11, 0xf4, 0x95,
- 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x30,
- 0x08, 0x58, 0x10, 0xf8, 0x27, 0x79, 0x08, 0xf8,
- 0x27, 0x7a, 0xf0, 0x30, 0x7f, 0xff, 0x88, 0x11,
- 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9,
- 0xf8, 0x20, 0x08, 0x63, 0x76, 0xf8, 0x27, 0x79,
- 0xff, 0xff, 0x76, 0xf8, 0x27, 0x7b, 0xff, 0xff,
- 0xf7, 0xb8, 0xf2, 0x73, 0x08, 0xd9, 0xf0, 0x20,
- 0xff, 0xff, 0xf6, 0xb8, 0x56, 0xf8, 0x27, 0x74,
- 0xf0, 0xf9, 0x88, 0x11, 0x56, 0xf8, 0x27, 0x72,
- 0xf0, 0xf9, 0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95,
- 0xe7, 0x20, 0xf4, 0xa9, 0xf8, 0x30, 0x08, 0x8f,
- 0xf1, 0x20, 0x27, 0x7c, 0x48, 0x11, 0xf6, 0x00,
- 0x88, 0x13, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x83,
- 0x08, 0xf8, 0x27, 0x79, 0xf0, 0x30, 0x7f, 0xff,
- 0x88, 0x13, 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00,
- 0xf5, 0xab, 0xf8, 0x30, 0x08, 0x8f, 0x6d, 0x91,
- 0x48, 0x11, 0xf0, 0x30, 0x01, 0xff, 0x88, 0x11,
- 0xf4, 0x95, 0xe7, 0x20, 0xf7, 0xa9, 0xf8, 0x30,
- 0x08, 0x74, 0x6d, 0x89, 0x48, 0x11, 0xf0, 0x30,
- 0x01, 0xff, 0xf0, 0xe7, 0xf4, 0x95, 0x48, 0x08,
- 0x4e, 0xf8, 0x27, 0x74, 0x48, 0x08, 0xf1, 0xf9,
- 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0xe1,
- 0x27, 0x7c, 0x27, 0x7a, 0x60, 0xf8, 0x27, 0x7b,
- 0xff, 0xff, 0xf8, 0x30, 0x08, 0xab, 0x48, 0x08,
- 0x4e, 0xf8, 0x27, 0x72, 0x76, 0xf8, 0x27, 0x7b,
- 0xff, 0xff, 0x76, 0xf8, 0x27, 0x79, 0xff, 0xff,
- 0xf2, 0x73, 0x08, 0xd9, 0xf4, 0x95, 0xe8, 0x00,
- 0x44, 0xf8, 0x27, 0x73, 0x40, 0xf8, 0x27, 0x75,
- 0x82, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0x77, 0x10,
- 0x80, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x08, 0xd8,
- 0xf6, 0xb8, 0x10, 0xf8, 0x27, 0x73, 0xf0, 0x00,
- 0x80, 0x00, 0x48, 0x08, 0x4e, 0xf8, 0x27, 0x74,
- 0x48, 0x08, 0xf0, 0xf9, 0x88, 0x11, 0xf4, 0x95,
- 0xf4, 0x95, 0x71, 0xe1, 0x27, 0x7c, 0x27, 0x7a,
- 0xf7, 0xb8, 0x57, 0xf8, 0x27, 0x74, 0xf0, 0x62,
- 0xff, 0xff, 0xf0, 0x40, 0xff, 0x80, 0xf2, 0x80,
- 0x4e, 0xf8, 0x27, 0x74, 0xe8, 0x00, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 0xee, 0xfb,
- 0x11, 0xf8, 0x27, 0x71, 0x09, 0xf8, 0x27, 0x73,
- 0x89, 0x11, 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95,
- 0xf6, 0xa9, 0xf8, 0x20, 0x08, 0xed, 0xf2, 0x73,
- 0x09, 0x0e, 0xf4, 0x95, 0xe8, 0x00, 0xf6, 0x20,
- 0x76, 0x00, 0x00, 0x41, 0xf0, 0x74, 0x12, 0xee,
- 0x88, 0x16, 0xf4, 0x95, 0xf7, 0xb8, 0x6d, 0x96,
- 0x10, 0xf8, 0x00, 0x16, 0xf8, 0x47, 0x09, 0x0a,
- 0xe7, 0x61, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
- 0x00, 0x80, 0x76, 0x02, 0x00, 0xff, 0x76, 0x03,
- 0x00, 0x00, 0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95,
- 0xe8, 0x00, 0x6c, 0xe9, 0xff, 0xff, 0x08, 0xfb,
- 0x73, 0x16, 0x00, 0x0e, 0xf0, 0x66, 0x00, 0x41,
- 0xee, 0x05, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00,
- 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x13,
- 0xf6, 0xb8, 0x77, 0x11, 0x7f, 0xff, 0x57, 0xf8,
- 0x27, 0x72, 0x48, 0x11, 0xf2, 0x80, 0xf0, 0x00,
- 0x80, 0x00, 0x88, 0x11, 0xf6, 0x40, 0xf0, 0xe0,
- 0xf1, 0xf1, 0xe8, 0x01, 0xf2, 0x80, 0x80, 0xf8,
- 0x27, 0x78, 0x77, 0x12, 0x80, 0x00, 0x57, 0xf8,
- 0x27, 0x72, 0x48, 0x12, 0xf2, 0x80, 0x88, 0x12,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x82, 0x09, 0x38,
- 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
- 0xf0, 0x73, 0x09, 0x3d, 0xf0, 0x20, 0x80, 0x01,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0x70, 0x81,
- 0x00, 0x13, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0xf0, 0x30, 0x7f, 0xff, 0x11, 0xf8, 0x29, 0x86,
- 0xf5, 0x20, 0xf3, 0x30, 0x7f, 0xff, 0x89, 0x11,
- 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9,
- 0xf8, 0x20, 0x09, 0x54, 0xf2, 0x73, 0x09, 0x67,
- 0xf4, 0x95, 0xe8, 0x02, 0x6f, 0xf8, 0x27, 0x7a,
- 0x0d, 0x20, 0xf3, 0x30, 0x7f, 0xff, 0x89, 0x11,
- 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9,
- 0xf8, 0x20, 0x09, 0x64, 0xf2, 0x73, 0x09, 0x67,
- 0xf4, 0x95, 0xe8, 0x01, 0x80, 0xf8, 0x27, 0x7b,
- 0xe8, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0x11, 0xf8, 0x29, 0x86, 0xf5, 0x20, 0xf3, 0x30,
- 0x7f, 0xff, 0x89, 0x11, 0xf4, 0x95, 0x77, 0x10,
- 0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x09, 0x7a,
- 0xf2, 0x73, 0x09, 0x8d, 0xf4, 0x95, 0xe8, 0x02,
- 0x6f, 0xf8, 0x27, 0x7a, 0x0d, 0x20, 0xf3, 0x30,
- 0x7f, 0xff, 0x89, 0x11, 0xf4, 0x95, 0x77, 0x10,
- 0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x09, 0x8a,
- 0xf2, 0x73, 0x09, 0x8d, 0xf4, 0x95, 0xe8, 0x01,
- 0x80, 0xf8, 0x27, 0x79, 0xe8, 0x00, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02,
- 0x00, 0x12, 0x88, 0x11, 0xf6, 0xb8, 0x57, 0xf8,
- 0x27, 0x72, 0xf0, 0x20, 0x7f, 0xff, 0xf2, 0x80,
- 0xf0, 0x00, 0x80, 0x00, 0x80, 0x81, 0x57, 0xf8,
- 0x27, 0x72, 0xe8, 0x01, 0xf3, 0xf1, 0xf2, 0x80,
- 0x80, 0xf8, 0x27, 0x78, 0x77, 0x11, 0x80, 0x00,
- 0x48, 0x11, 0x57, 0xf8, 0x27, 0x72, 0xf2, 0x80,
- 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81,
- 0x09, 0xb5, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08,
- 0x00, 0x01, 0xf0, 0x73, 0x09, 0xba, 0xf0, 0x20,
- 0x80, 0x01, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
- 0x45, 0xf8, 0x27, 0x71, 0x43, 0xf8, 0x27, 0x73,
- 0x83, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0xe7, 0x20,
- 0xf6, 0xa9, 0xf8, 0x30, 0x09, 0xc9, 0xf2, 0x73,
- 0x09, 0xe4, 0x77, 0x12, 0x00, 0x00, 0x57, 0xf8,
- 0x27, 0x72, 0xf0, 0x20, 0x7f, 0xff, 0xf2, 0x80,
- 0x49, 0x12, 0xf5, 0x00, 0xf3, 0x00, 0x80, 0x00,
- 0x61, 0xf8, 0x00, 0x0b, 0x80, 0x00, 0xf8, 0x30,
- 0x09, 0xdc, 0xf1, 0x20, 0x80, 0x00, 0xf5, 0x20,
- 0x89, 0x12, 0xf4, 0x95, 0x48, 0x12, 0x6f, 0xf8,
- 0x27, 0x73, 0x0d, 0x00, 0xf4, 0x95, 0x49, 0x0b,
- 0x4f, 0xf8, 0x27, 0x72, 0x8a, 0x11, 0xfe, 0x00,
- 0x48, 0x12, 0xf4, 0x95, 0x4a, 0x11, 0x4a, 0x16,
- 0x4a, 0x17, 0xee, 0xfc, 0xf4, 0x95, 0x71, 0x08,
- 0x00, 0x16, 0x88, 0x17, 0xf0, 0x74, 0x08, 0x30,
- 0x48, 0x18, 0x70, 0x00, 0x00, 0x16, 0xf2, 0x74,
- 0x09, 0x8f, 0xf0, 0x00, 0x00, 0x02, 0x88, 0x11,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81, 0x0a, 0x0a,
- 0xf2, 0x74, 0x08, 0xdb, 0xf4, 0x95, 0x48, 0x16,
- 0x48, 0x18, 0x70, 0x00, 0x00, 0x16, 0xf2, 0x74,
- 0x09, 0x8f, 0xf0, 0x00, 0x00, 0x02, 0x88, 0x11,
- 0x10, 0x02, 0x70, 0x01, 0x00, 0x11, 0x80, 0x00,
- 0xf2, 0x74, 0x06, 0xce, 0xf4, 0x95, 0x48, 0x17,
- 0x49, 0x11, 0x48, 0x17, 0xf6, 0x00, 0x88, 0x17,
- 0xe7, 0x60, 0xf5, 0xa9, 0xf8, 0x20, 0x0a, 0x2d,
- 0x48, 0x16, 0xf6, 0x20, 0x88, 0x11, 0x48, 0x18,
- 0x70, 0x00, 0x00, 0x11, 0xf2, 0x74, 0x09, 0x8f,
- 0xf0, 0x00, 0x00, 0x02, 0x88, 0x11, 0x70, 0x01,
- 0x00, 0x11, 0x10, 0x02, 0x80, 0x00, 0xf2, 0x74,
- 0x06, 0xce, 0xf4, 0x95, 0x48, 0x17, 0xee, 0x04,
- 0x48, 0x16, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11,
- 0xfc, 0x00, 0xee, 0xfd, 0xe8, 0x00, 0x4e, 0xf8,
- 0x27, 0x70, 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x72,
- 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x74, 0xe8, 0x00,
- 0x4e, 0xf8, 0x27, 0x76, 0x76, 0xf8, 0x27, 0x79,
- 0xff, 0xff, 0x76, 0xf8, 0x27, 0x7a, 0x00, 0x00,
- 0x76, 0xf8, 0x27, 0x7b, 0xff, 0xff, 0x76, 0xf8,
- 0x27, 0x78, 0x00, 0x00, 0xe8, 0x00, 0x75, 0xf8,
- 0x00, 0x08, 0x00, 0x01, 0x76, 0x00, 0x00, 0x00,
- 0x76, 0x01, 0x02, 0x00, 0xf2, 0x74, 0x12, 0xdc,
- 0xf0, 0x20, 0x27, 0x7c, 0xee, 0x03, 0xfc, 0x00,
- 0x4a, 0x11, 0xee, 0xfc, 0xf4, 0x95, 0x4e, 0x00,
- 0x77, 0x12, 0x7f, 0xff, 0xf6, 0xb8, 0x49, 0x12,
- 0xf1, 0x80, 0xf3, 0x00, 0x80, 0x00, 0x89, 0x12,
- 0xf0, 0xe0, 0xf1, 0xf1, 0x4f, 0x02, 0xe9, 0x01,
- 0xf4, 0x95, 0x48, 0x0b, 0xf5, 0x40, 0x56, 0x02,
- 0xf1, 0x80, 0x81, 0xf8, 0x27, 0x78, 0x77, 0x11,
- 0x80, 0x00, 0x56, 0x00, 0x49, 0x11, 0xf1, 0x80,
- 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81,
- 0x0a, 0x81, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08,
- 0x00, 0x01, 0xf0, 0x73, 0x0a, 0x86, 0xf0, 0x20,
- 0x80, 0x01, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
- 0x10, 0x82, 0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00,
- 0x4a, 0x11, 0xee, 0xfe, 0xf4, 0x95, 0x4e, 0x00,
- 0x77, 0x11, 0x7f, 0xff, 0xf6, 0xb8, 0x49, 0x11,
- 0xf1, 0x80, 0xf3, 0x00, 0x80, 0x00, 0x89, 0x11,
- 0xf0, 0xe0, 0xf1, 0xf1, 0xe8, 0x01, 0xf2, 0x80,
- 0x80, 0xf8, 0x27, 0x78, 0x56, 0x00, 0xf1, 0x20,
- 0x80, 0x00, 0xf1, 0x80, 0xf4, 0x95, 0x49, 0x0b,
- 0xf8, 0x4d, 0x0a, 0xab, 0xf0, 0x20, 0x80, 0x01,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0xf0, 0x73,
- 0x0a, 0xaf, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08,
- 0x00, 0x01, 0xee, 0x02, 0x48, 0x11, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x12, 0x13, 0x02,
- 0x77, 0x11, 0x00, 0x00, 0xf8, 0x4d, 0x0a, 0xcb,
- 0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a, 0xf4, 0x95,
- 0xf0, 0x72, 0x0a, 0xca, 0x48, 0x11, 0x1c, 0xf8,
- 0x29, 0x7e, 0x88, 0x11, 0x11, 0xf8, 0x29, 0x7e,
- 0xf2, 0x00, 0x00, 0x01, 0x80, 0xf8, 0x29, 0x7e,
- 0x81, 0x92, 0x48, 0x11, 0x8a, 0x11, 0xfc, 0x00,
- 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x11,
- 0x88, 0x12, 0xf6, 0xb8, 0xf0, 0x20, 0x7f, 0xff,
- 0x57, 0xf8, 0x27, 0x70, 0xf2, 0x80, 0xf0, 0x00,
- 0x80, 0x00, 0x80, 0x82, 0x57, 0xf8, 0x27, 0x70,
- 0xe8, 0x01, 0xf3, 0xf1, 0xf2, 0x80, 0x80, 0xf8,
- 0x27, 0x78, 0x77, 0x12, 0x80, 0x00, 0x48, 0x12,
- 0x57, 0xf8, 0x27, 0x70, 0xf2, 0x80, 0x88, 0x12,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x82, 0x0a, 0xf4,
- 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01,
- 0xf0, 0x73, 0x0a, 0xf9, 0xf0, 0x20, 0x80, 0x01,
- 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0x45, 0xf8,
- 0x27, 0x75, 0xe7, 0x10, 0x43, 0xf8, 0x27, 0x71,
- 0x83, 0xf8, 0x00, 0x12, 0x6d, 0xe8, 0x00, 0x04,
- 0x6d, 0x8a, 0xf6, 0xaa, 0xf8, 0x30, 0x0b, 0x0a,
- 0xf2, 0x73, 0x0b, 0x25, 0x77, 0x11, 0x00, 0x00,
- 0x57, 0xf8, 0x27, 0x70, 0xf0, 0x20, 0x7f, 0xff,
- 0xf2, 0x80, 0x49, 0x11, 0xf5, 0x00, 0xf3, 0x00,
- 0x80, 0x00, 0x61, 0xf8, 0x00, 0x0b, 0x80, 0x00,
- 0xf8, 0x30, 0x0b, 0x1d, 0xf1, 0x20, 0x80, 0x00,
- 0xf5, 0x20, 0x89, 0x11, 0xf4, 0x95, 0x48, 0x11,
- 0x6f, 0xf8, 0x27, 0x71, 0x0d, 0x00, 0xf4, 0x95,
- 0x49, 0x0b, 0x4f, 0xf8, 0x27, 0x70, 0x48, 0x11,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16,
- 0x4a, 0x17, 0xee, 0xf0, 0x88, 0x17, 0x10, 0x17,
- 0x80, 0x05, 0x10, 0x16, 0x80, 0x06, 0x10, 0x15,
- 0x80, 0x07, 0x71, 0x14, 0x00, 0x11, 0x10, 0x05,
- 0xf0, 0x30, 0x00, 0x01, 0x88, 0x10, 0x10, 0x06,
- 0xf0, 0x30, 0x00, 0x01, 0x80, 0x08, 0x49, 0x11,
- 0x10, 0x05, 0xf6, 0x01, 0x80, 0x09, 0x10, 0x06,
- 0x61, 0xf8, 0x00, 0x08, 0x00, 0x01, 0xf8, 0x20,
- 0x0b, 0x4b, 0x10, 0x09, 0xf0, 0x00, 0x00, 0x01,
- 0x80, 0x09, 0x71, 0x08, 0x00, 0x12, 0xf4, 0xaa,
- 0xf8, 0x30, 0x0b, 0x54, 0x10, 0x09, 0xf0, 0x00,
- 0x00, 0x01, 0x80, 0x09, 0x12, 0x09, 0x49, 0x11,
- 0xf4, 0x7f, 0x80, 0x09, 0xf6, 0x20, 0x80, 0x0a,
- 0x56, 0xf8, 0x27, 0x70, 0x4e, 0x0c, 0x10, 0x09,
- 0x80, 0x00, 0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce,
- 0xf0, 0x00, 0x00, 0x04, 0x88, 0x16, 0xf4, 0x95,
- 0xf4, 0x95, 0x6c, 0x86, 0x0b, 0x6d, 0xf2, 0x73,
- 0x0c, 0x59, 0xf4, 0x95, 0xe8, 0x00, 0xf6, 0xb8,
- 0xf4, 0x95, 0x56, 0x0c, 0xf0, 0xf9, 0x88, 0x12,
- 0xf4, 0x95, 0xf4, 0x95, 0x70, 0xe2, 0x27, 0x7c,
- 0x29, 0x86, 0xe8, 0x00, 0x80, 0x0e, 0x48, 0x11,
- 0xf8, 0x45, 0x0b, 0xcc, 0x77, 0x10, 0x00, 0x01,
- 0xf4, 0xa9, 0xf8, 0x30, 0x0b, 0x89, 0x6c, 0xe1,
- 0xff, 0xfd, 0x0b, 0x8b, 0x10, 0xe7, 0x00, 0x02,
- 0x80, 0x0e, 0xf0, 0x73, 0x0b, 0x8b, 0x10, 0x87,
- 0x80, 0x0e, 0xe7, 0x10, 0xf5, 0xae, 0xf8, 0x20,
- 0x0b, 0xb2, 0x70, 0x00, 0x00, 0x17, 0x70, 0x01,
- 0x00, 0x16, 0x10, 0x04, 0xf0, 0x74, 0x06, 0xce,
- 0x48, 0x17, 0x49, 0x16, 0xf6, 0x00, 0x88, 0x17,
- 0x48, 0x11, 0xf6, 0x20, 0x88, 0x11, 0x10, 0x09,
- 0xf6, 0x20, 0x80, 0x00, 0x48, 0x18, 0xf2, 0x74,
- 0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x16,
- 0x10, 0x04, 0x70, 0x00, 0x00, 0x17, 0x70, 0x01,
- 0x00, 0x11, 0xf0, 0x74, 0x06, 0xce, 0x48, 0x11,
- 0x00, 0x04, 0x80, 0x04, 0xf0, 0x73, 0x0b, 0xbc,
- 0x70, 0x00, 0x00, 0x17, 0x70, 0x01, 0x00, 0x11,
- 0x10, 0x04, 0xf0, 0x74, 0x06, 0xce, 0x48, 0x11,
- 0x00, 0x04, 0x80, 0x04, 0x49, 0x11, 0x48, 0x16,
- 0xf6, 0x20, 0x88, 0x16, 0xf4, 0x95, 0xf4, 0x95,
- 0x6c, 0x86, 0x0b, 0xcc, 0x10, 0x0a, 0x80, 0x00,
- 0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00,
- 0x00, 0x04, 0x88, 0x16, 0x12, 0x0a, 0xf8, 0x45,
- 0x0c, 0x33, 0x71, 0x0a, 0x00, 0x10, 0xf4, 0xae,
- 0xf8, 0x30, 0x0c, 0x1c, 0x48, 0x16, 0xf0, 0xe1,
- 0x88, 0x11, 0x12, 0x08, 0xf8, 0x45, 0x0b, 0xdb,
- 0x6d, 0x89, 0x12, 0x07, 0xf8, 0x45, 0x0b, 0xe9,
- 0x10, 0x07, 0x80, 0x00, 0x70, 0x02, 0x00, 0x11,
- 0x10, 0x06, 0x80, 0x01, 0x10, 0x04, 0xf0, 0x74,
- 0x06, 0xdc, 0xf0, 0x73, 0x0b, 0xef, 0x48, 0x11,
- 0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04, 0xf0, 0x74,
- 0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0, 0x81, 0x0e,
- 0x10, 0x06, 0x49, 0x11, 0xf6, 0x00, 0x80, 0x06,
- 0x10, 0x05, 0xf6, 0x20, 0x88, 0x11, 0xf0, 0x00,
- 0x00, 0x01, 0x48, 0x08, 0x6f, 0x00, 0x0c, 0x9f,
- 0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00,
- 0x00, 0x04, 0x12, 0x07, 0xf8, 0x45, 0x0c, 0x11,
- 0x10, 0x07, 0x80, 0x00, 0x70, 0x02, 0x00, 0x11,
- 0x10, 0x06, 0x80, 0x01, 0x10, 0x04, 0xf0, 0x74,
- 0x06, 0xdc, 0xf0, 0x73, 0x0c, 0x17, 0x48, 0x11,
- 0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04, 0xf0, 0x74,
- 0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0, 0x81, 0x0e,
- 0xf0, 0x73, 0x0c, 0x33, 0x12, 0x07, 0xf8, 0x45,
- 0x0c, 0x2a, 0x10, 0x07, 0x80, 0x00, 0x10, 0x06,
- 0x80, 0x01, 0x10, 0x05, 0x80, 0x02, 0x10, 0x04,
- 0xf0, 0x74, 0x06, 0xdc, 0xf0, 0x73, 0x0c, 0x30,
- 0x12, 0x05, 0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04,
- 0xf0, 0x74, 0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0,
- 0x81, 0x0e, 0x76, 0x00, 0x00, 0x01, 0x48, 0x18,
- 0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04,
- 0x71, 0x04, 0x00, 0x11, 0x70, 0x81, 0x29, 0x86,
- 0x10, 0x0e, 0x1c, 0xf8, 0x29, 0x86, 0x80, 0x0e,
- 0x76, 0x00, 0x00, 0x01, 0x48, 0x18, 0xf2, 0x74,
- 0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04, 0x10, 0x0e,
- 0x71, 0x04, 0x00, 0x11, 0x80, 0x81, 0x10, 0xf8,
- 0x29, 0x86, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x30,
- 0x7f, 0xff, 0x80, 0xf8, 0x29, 0x86, 0x10, 0x09,
- 0xf0, 0x00, 0x00, 0x02, 0x80, 0x09, 0xee, 0x10,
- 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00,
- 0x10, 0xf8, 0x27, 0x75, 0x08, 0xf8, 0x27, 0x71,
- 0xf0, 0x10, 0x00, 0x01, 0x48, 0x08, 0xfc, 0x00,
- 0x4a, 0x11, 0x4a, 0x16, 0xee, 0xff, 0xf4, 0x95,
- 0x71, 0x04, 0x00, 0x16, 0xf0, 0x00, 0x00, 0x01,
- 0x48, 0x08, 0x4e, 0xf8, 0x29, 0x7c, 0x6d, 0xee,
- 0xff, 0xfd, 0x48, 0x16, 0xf8, 0x45, 0x0c, 0x99,
- 0x56, 0xf8, 0x29, 0x7c, 0xf0, 0x74, 0x0a, 0x5a,
- 0x88, 0x11, 0x10, 0xf8, 0x29, 0x7d, 0xf0, 0x00,
- 0x00, 0x01, 0x48, 0x08, 0x4e, 0xf8, 0x29, 0x7c,
- 0x10, 0xf8, 0x29, 0x82, 0xf0, 0x00, 0x00, 0x01,
- 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xa9,
- 0xfa, 0x30, 0x0c, 0x96, 0x80, 0xf8, 0x29, 0x82,
- 0x56, 0xf8, 0x29, 0x80, 0xf0, 0x00, 0x00, 0x01,
- 0x4e, 0xf8, 0x29, 0x80, 0x73, 0x11, 0x29, 0x82,
- 0x6c, 0xee, 0xff, 0xff, 0x0c, 0x76, 0xee, 0x01,
- 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0x76, 0xf8, 0x29, 0x84, 0x00, 0x00, 0x76, 0xf8,
- 0x29, 0x85, 0x00, 0x01, 0xe8, 0x00, 0x4e, 0xf8,
- 0x2a, 0x0c, 0x76, 0xf8, 0x29, 0x86, 0x00, 0x00,
- 0x76, 0xf8, 0x29, 0x87, 0x00, 0x00, 0x77, 0x11,
- 0x29, 0x88, 0x76, 0x81, 0xaa, 0xaa, 0x76, 0xe1,
- 0x00, 0x01, 0xaa, 0xaa, 0x76, 0xe1, 0x00, 0x02,
- 0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0xee, 0xfc, 0xf4, 0x95, 0x71, 0x06, 0x00, 0x14,
- 0x71, 0x07, 0x00, 0x13, 0x71, 0x08, 0x00, 0x12,
- 0x71, 0x09, 0x00, 0x15, 0x77, 0x10, 0x00, 0xff,
- 0xf4, 0xaa, 0xf8, 0x30, 0x0d, 0x44, 0x49, 0x13,
- 0x53, 0xf8, 0x2a, 0x0c, 0x4f, 0xf8, 0x2a, 0x0c,
- 0x73, 0x12, 0x00, 0x0e, 0xf1, 0x66, 0x00, 0x0d,
- 0x89, 0x11, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x01,
- 0x71, 0xe1, 0x24, 0x00, 0x00, 0x11, 0xf4, 0xa9,
- 0xf8, 0x30, 0x0d, 0x17, 0x77, 0x10, 0x00, 0x02,
- 0xf4, 0xa9, 0xf8, 0x30, 0x0c, 0xec, 0x77, 0x11,
- 0x29, 0x8a, 0x76, 0x81, 0x00, 0x00, 0xe8, 0x00,
- 0x77, 0x14, 0x00, 0x00, 0x77, 0x13, 0x00, 0x00,
- 0xf0, 0x73, 0x0d, 0x48, 0x6c, 0x83, 0x0c, 0xfa,
- 0x77, 0x11, 0x29, 0x8a, 0x48, 0x12, 0xf0, 0xe8,
- 0xf0, 0x40, 0x80, 0x00, 0x80, 0x81, 0xe8, 0x00,
- 0x77, 0x14, 0x00, 0x00, 0xf0, 0x73, 0x0d, 0x48,
- 0x49, 0x13, 0xf3, 0x40, 0x80, 0x00, 0x81, 0xf8,
- 0x29, 0x8a, 0x61, 0xf8, 0x00, 0x15, 0x00, 0x01,
- 0xf8, 0x20, 0x0d, 0x07, 0x69, 0xf8, 0x29, 0x8a,
- 0x40, 0x00, 0x61, 0xf8, 0x00, 0x14, 0x00, 0x01,
- 0xf8, 0x20, 0x0d, 0x0f, 0x69, 0xf8, 0x29, 0x8a,
- 0x20, 0x00, 0x77, 0x11, 0x29, 0x8a, 0x49, 0x12,
- 0xf3, 0xe8, 0x1b, 0x81, 0x81, 0x81, 0xf0, 0x73,
- 0x0d, 0x48, 0x11, 0xf8, 0x29, 0x84, 0xf8, 0x4c,
- 0x0d, 0x37, 0x77, 0x11, 0x29, 0x88, 0x76, 0x81,
- 0xaa, 0xaa, 0x11, 0xf8, 0x29, 0x85, 0xf3, 0x10,
- 0x00, 0x01, 0xf3, 0x40, 0xaa, 0x00, 0x81, 0xe1,
- 0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x80, 0x01,
- 0x70, 0x02, 0x00, 0x14, 0x70, 0x03, 0x00, 0x13,
- 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95, 0x48, 0x11,
- 0x71, 0xf8, 0x29, 0x85, 0x29, 0x84, 0xf0, 0x73,
- 0x0d, 0x73, 0x76, 0x00, 0x00, 0x00, 0x80, 0x01,
- 0x76, 0x02, 0x00, 0x00, 0x70, 0x03, 0x00, 0x13,
- 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95, 0xe8, 0x00,
- 0xf0, 0x73, 0x0d, 0x73, 0x77, 0x11, 0x29, 0x8a,
- 0x70, 0x81, 0x00, 0x13, 0x11, 0xf8, 0x29, 0x84,
- 0xf8, 0x4c, 0x0d, 0x68, 0x77, 0x11, 0x29, 0x88,
- 0x76, 0x81, 0xaa, 0xaa, 0x11, 0xf8, 0x29, 0x85,
- 0xf3, 0x10, 0x00, 0x01, 0xf3, 0x40, 0xaa, 0x00,
- 0x81, 0xe1, 0x00, 0x01, 0x76, 0x00, 0x00, 0x03,
- 0x80, 0x01, 0x70, 0x02, 0x00, 0x14, 0x70, 0x03,
- 0x00, 0x13, 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95,
- 0x48, 0x11, 0x71, 0xf8, 0x29, 0x85, 0x29, 0x84,
- 0xf0, 0x73, 0x0d, 0x73, 0x76, 0x00, 0x00, 0x01,
- 0x80, 0x01, 0x70, 0x02, 0x00, 0x14, 0x70, 0x03,
- 0x00, 0x13, 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95,
- 0x48, 0x11, 0x6b, 0xf8, 0x29, 0x84, 0xff, 0xff,
- 0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0xf5, 0x40, 0xf4, 0x95, 0x48, 0x0b, 0xf4, 0x78,
- 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0xe1,
- 0xff, 0xb9, 0x0d, 0x88, 0xf2, 0x73, 0x0d, 0xa5,
- 0xf4, 0x95, 0xe8, 0x60, 0xf2, 0x00, 0x00, 0x06,
- 0x61, 0xf8, 0x00, 0x11, 0x00, 0x20, 0xf8, 0x30,
- 0x0d, 0x98, 0x61, 0xf8, 0x00, 0x0b, 0x00, 0x01,
- 0xf8, 0x20, 0x0d, 0xa3, 0xf2, 0x00, 0x00, 0x07,
- 0xf0, 0x73, 0x0d, 0xa3, 0x61, 0xf8, 0x00, 0x0b,
- 0x00, 0x01, 0xf8, 0x20, 0x0d, 0xa1, 0xf2, 0x73,
- 0x0d, 0xa3, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00,
- 0x00, 0x02, 0x48, 0x08, 0xf4, 0x7f, 0x8a, 0x11,
- 0xfc, 0x00, 0xee, 0xff, 0xf0, 0x74, 0x07, 0xfd,
- 0xf0, 0x74, 0x07, 0x44, 0xf0, 0x74, 0x0d, 0xb4,
- 0xf0, 0x74, 0x02, 0x05, 0xf0, 0x74, 0x04, 0x60,
- 0xf0, 0x73, 0x0d, 0xaa, 0xee, 0xfd, 0x10, 0xf8,
- 0x2a, 0xa3, 0xf8, 0x44, 0x0d, 0xcb, 0x10, 0xf8,
- 0x2a, 0xa4, 0xf8, 0x45, 0x0d, 0xd7, 0x76, 0x00,
- 0x02, 0x00, 0xf2, 0x74, 0x09, 0xe8, 0xf0, 0x20,
- 0x22, 0x00, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x00,
- 0x76, 0xf8, 0x2a, 0xa7, 0x00, 0x00, 0xf0, 0x73,
- 0x0d, 0xd7, 0x76, 0x00, 0x02, 0x00, 0xf2, 0x74,
- 0x09, 0xe8, 0xf0, 0x20, 0x20, 0x00, 0x76, 0xf8,
- 0x2a, 0xa3, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa7,
- 0x00, 0x01, 0xf0, 0x74, 0x0c, 0x5e, 0xf0, 0xe0,
- 0xf0, 0x10, 0x3a, 0x98, 0xf8, 0x47, 0x0d, 0xe1,
- 0x76, 0xf8, 0x27, 0x6e, 0x00, 0x00, 0xee, 0x03,
- 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 0x77, 0x11,
- 0x20, 0x00, 0x76, 0x00, 0xaa, 0xaa, 0x76, 0x01,
- 0x02, 0x00, 0xf2, 0x74, 0x06, 0x6c, 0xf4, 0x95,
- 0x48, 0x11, 0x76, 0x00, 0x55, 0x55, 0x76, 0x01,
- 0x02, 0x00, 0x48, 0x11, 0xf2, 0x74, 0x06, 0x6c,
- 0xf0, 0x00, 0x02, 0x00, 0x76, 0xf8, 0x2a, 0xa3,
- 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x00,
- 0xe8, 0x00, 0x4e, 0x00, 0xfb, 0x80, 0x15, 0x3e,
- 0xf4, 0x95, 0xe8, 0x04, 0x80, 0xf8, 0x2a, 0xa5,
- 0x76, 0x00, 0x2a, 0xa8, 0xf9, 0x80, 0x14, 0x87,
- 0x76, 0x00, 0x2a, 0xad, 0xfb, 0x80, 0x13, 0x62,
- 0xf4, 0x95, 0xe8, 0x02, 0x10, 0xf8, 0x2a, 0xa5,
- 0xf9, 0x80, 0x14, 0x63, 0xfb, 0x80, 0x16, 0x66,
- 0xf4, 0x95, 0xe8, 0x1c, 0xfb, 0x80, 0x16, 0x87,
- 0xf4, 0x95, 0xe8, 0x1c, 0xe8, 0x01, 0x4e, 0x00,
- 0xfb, 0x80, 0x17, 0xd6, 0xf4, 0x95, 0xe8, 0x00,
- 0x80, 0xf8, 0x2a, 0xa6, 0x76, 0x00, 0x2a, 0xb7,
- 0xf9, 0x80, 0x16, 0xaa, 0x10, 0xf8, 0x2a, 0xa6,
- 0xf9, 0x80, 0x17, 0x5c, 0x10, 0xf8, 0x2a, 0xa6,
- 0xf9, 0x80, 0x17, 0x6f, 0xee, 0x02, 0x8a, 0x11,
- 0xfc, 0x00, 0xf4, 0x95, 0x4a, 0x08, 0x4a, 0x09,
- 0x4a, 0x0a, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8,
- 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07,
- 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc,
- 0x10, 0xf8, 0x2a, 0xa7, 0xf8, 0x44, 0x0e, 0x4b,
- 0x76, 0xf8, 0x2a, 0xa3, 0x00, 0x01, 0xf0, 0x73,
- 0x0e, 0x4e, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x01,
- 0x8a, 0x1d, 0x8a, 0x07, 0x8a, 0x0a, 0x8a, 0x09,
- 0x8a, 0x08, 0xf4, 0xeb, 0x4a, 0x11, 0x4a, 0x16,
- 0x4a, 0x17, 0xee, 0xfe, 0x88, 0x0e, 0x71, 0x08,
- 0x00, 0x16, 0x71, 0x06, 0x00, 0x17, 0x11, 0x07,
- 0xf0, 0x66, 0x00, 0x0d, 0xf0, 0x00, 0x25, 0xa0,
- 0x88, 0x11, 0x76, 0x01, 0x00, 0x06, 0x81, 0x00,
- 0xf2, 0x74, 0x06, 0xce, 0xf0, 0x00, 0x00, 0x01,
- 0x76, 0x01, 0x00, 0x06, 0x70, 0x00, 0x00, 0x16,
- 0x48, 0x11, 0xf2, 0x74, 0x06, 0xce, 0xf0, 0x00,
- 0x00, 0x07, 0x70, 0x81, 0x00, 0x17, 0xee, 0x02,
- 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00,
- 0x4a, 0x11, 0x88, 0x0e, 0x71, 0x02, 0x00, 0x12,
- 0x11, 0x03, 0xf0, 0x66, 0x00, 0x0d, 0xf0, 0x00,
- 0x24, 0x00, 0x88, 0x11, 0xf4, 0x95, 0x70, 0x81,
- 0x00, 0x12, 0x6e, 0xe2, 0xff, 0xfe, 0x0e, 0x8d,
- 0xf4, 0x95, 0xe8, 0x00, 0xe8, 0x01, 0x80, 0xe1,
- 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0xff,
- 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x76, 0xe1,
- 0x00, 0x0b, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0c,
- 0x00, 0x00, 0x81, 0xe1, 0x00, 0x01, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfc, 0x88, 0x0e,
- 0xf4, 0x95, 0xf1, 0x66, 0x00, 0x0d, 0xf3, 0x00,
- 0x24, 0x00, 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95,
- 0x76, 0xe1, 0x00, 0x0c, 0x00, 0x00, 0x76, 0xe1,
- 0x00, 0x0b, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02,
- 0x00, 0x01, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01,
- 0x00, 0x00, 0x80, 0x02, 0x76, 0x03, 0x00, 0x00,
- 0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95, 0xe8, 0x00,
- 0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0x88, 0x19, 0xf4, 0x95, 0x73, 0x19, 0x00, 0x0e,
- 0xf1, 0x66, 0x00, 0x0d, 0xf2, 0x00, 0x24, 0x00,
- 0x77, 0x15, 0x25, 0xa0, 0x77, 0x14, 0x00, 0x00,
- 0x77, 0x1a, 0x00, 0x1f, 0xf0, 0x72, 0x0f, 0x14,
- 0xf6, 0xb8, 0x49, 0x19, 0x09, 0x85, 0xf8, 0x4c,
- 0x0f, 0x13, 0xf1, 0x00, 0x00, 0x05, 0x89, 0x11,
- 0x49, 0x15, 0xf3, 0x00, 0x00, 0x01, 0x89, 0x13,
- 0x49, 0x15, 0xf3, 0x00, 0x00, 0x07, 0x89, 0x12,
- 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
- 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
- 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
- 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
- 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13,
- 0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x11,
- 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81, 0x0f, 0x13,
- 0x6d, 0x94, 0x6d, 0xed, 0x00, 0x0d, 0x48, 0x14,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16,
- 0x4a, 0x17, 0xee, 0xf8, 0x88, 0x17, 0x10, 0x0d,
- 0x80, 0x04, 0x10, 0x0c, 0x80, 0x05, 0x71, 0x0e,
- 0x00, 0x16, 0x73, 0x17, 0x00, 0x0e, 0xf0, 0x66,
- 0x00, 0x0d, 0xf0, 0x00, 0x24, 0x00, 0x88, 0x11,
- 0x10, 0xf8, 0x27, 0x63, 0xf8, 0x45, 0x0f, 0x32,
- 0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17,
- 0x10, 0xf8, 0x27, 0x60, 0xf8, 0x44, 0x0f, 0x3d,
- 0x60, 0xe1, 0x00, 0x02, 0x00, 0x01, 0xf8, 0x20,
- 0x0f, 0x6d, 0xf0, 0x73, 0x11, 0x33, 0x10, 0x04,
- 0x80, 0x00, 0x10, 0x05, 0xf0, 0x74, 0x06, 0x9f,
- 0x11, 0x04, 0xf3, 0x00, 0x00, 0x01, 0x81, 0x04,
- 0x6d, 0x8e, 0x77, 0x10, 0x00, 0x01, 0x71, 0xe1,
- 0x00, 0x02, 0x00, 0x12, 0xf4, 0xaa, 0xf8, 0x30,
- 0x0f, 0x62, 0x77, 0x10, 0x00, 0x02, 0xf4, 0xaa,
- 0xf8, 0x30, 0x0f, 0x6d, 0x45, 0xe1, 0x00, 0x0b,
- 0x88, 0x10, 0x43, 0xe1, 0x00, 0x0c, 0x83, 0xf8,
- 0x00, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xaa,
- 0xf8, 0x30, 0x0f, 0x6d, 0xf0, 0x73, 0x0f, 0x96,
- 0xf5, 0x00, 0x81, 0x04, 0x49, 0x16, 0xf5, 0x20,
- 0x89, 0x16, 0x76, 0xe1, 0x00, 0x0c, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x48, 0x16,
- 0xf8, 0x45, 0x11, 0x33, 0xf7, 0xb8, 0x71, 0xe1,
- 0x00, 0x02, 0x00, 0x12, 0x10, 0xf8, 0x00, 0x12,
- 0xf0, 0x10, 0x00, 0x03, 0xf8, 0x46, 0x0f, 0x8c,
- 0x10, 0xf8, 0x00, 0x12, 0xf0, 0x10, 0x00, 0x03,
- 0xf8, 0x45, 0x10, 0x16, 0x77, 0x10, 0x00, 0x01,
- 0xf4, 0xaa, 0xf8, 0x30, 0x0f, 0x9c, 0x77, 0x10,
- 0x00, 0x02, 0xf4, 0xaa, 0xf8, 0x30, 0x0f, 0xa8,
- 0xf0, 0x73, 0x0f, 0x96, 0x77, 0x10, 0x00, 0x04,
- 0xf4, 0xaa, 0xf8, 0x30, 0x10, 0xb7, 0x77, 0x10,
- 0x00, 0x05, 0xf4, 0xaa, 0xf8, 0x30, 0x10, 0xbc,
- 0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17,
- 0xf0, 0x73, 0x11, 0x31, 0x76, 0xe1, 0x00, 0x0c,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x76, 0xe1,
- 0x00, 0x02, 0x00, 0x02, 0x11, 0xe1, 0x00, 0x0c,
- 0xe8, 0x03, 0xf6, 0x20, 0x89, 0x12, 0xf4, 0x95,
- 0x77, 0x10, 0x00, 0x03, 0xf5, 0xaa, 0xf8, 0x30,
- 0x0f, 0xb6, 0x6b, 0xf8, 0x27, 0x6f, 0x00, 0x01,
- 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95, 0xf5, 0xae,
- 0xf8, 0x20, 0x0f, 0xbd, 0x48, 0x16, 0x80, 0x06,
- 0x88, 0x13, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x03,
- 0xf6, 0xab, 0xf8, 0x20, 0x0f, 0xc8, 0x6b, 0xf8,
- 0x27, 0x6f, 0x00, 0x01, 0x12, 0x06, 0xf8, 0x45,
- 0x10, 0x00, 0x10, 0xe1, 0x00, 0x04, 0x80, 0x00,
- 0x10, 0x05, 0x80, 0x01, 0x10, 0x04, 0x80, 0x02,
- 0x10, 0x06, 0x80, 0x03, 0x48, 0x11, 0xf2, 0x74,
- 0x07, 0x1e, 0xf0, 0x00, 0x00, 0x05, 0x10, 0x06,
- 0x00, 0xe1, 0x00, 0x04, 0x80, 0xe1, 0x00, 0x04,
- 0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1,
- 0x00, 0x0c, 0x88, 0x12, 0x11, 0x06, 0x10, 0x04,
- 0xf6, 0x00, 0x80, 0x04, 0x48, 0x16, 0xf6, 0x20,
- 0x88, 0x16, 0x89, 0x13, 0xf4, 0x95, 0x77, 0x10,
- 0x00, 0x03, 0xf6, 0xab, 0xf8, 0x20, 0x0f, 0xf5,
- 0x6b, 0xf8, 0x27, 0x6f, 0x00, 0x01, 0x77, 0x10,
- 0x00, 0x0c, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x13,
- 0xf6, 0xab, 0xf8, 0x20, 0x10, 0x00, 0x6b, 0xf8,
- 0x27, 0x6f, 0x00, 0x01, 0x6c, 0xe2, 0xff, 0xfd,
- 0x11, 0x31, 0xf6, 0xb8, 0x6f, 0xe1, 0x00, 0x05,
- 0x0c, 0x48, 0x6f, 0xe1, 0x00, 0x06, 0x0c, 0x18,
- 0xf0, 0x30, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x03,
- 0x80, 0xe1, 0x00, 0x0b, 0x76, 0xe1, 0x00, 0x02,
- 0x00, 0x03, 0x48, 0x16, 0xf8, 0x45, 0x11, 0x33,
- 0x71, 0xe1, 0x00, 0x0c, 0x00, 0x12, 0x10, 0xe1,
- 0x00, 0x0b, 0x49, 0x12, 0xf6, 0x20, 0x88, 0x13,
- 0xe8, 0x0c, 0xf6, 0x20, 0x88, 0x10, 0xf4, 0x95,
- 0xf4, 0x95, 0xf5, 0xab, 0xf8, 0x20, 0x10, 0x27,
- 0x48, 0x13, 0x80, 0x06, 0x88, 0x10, 0xf4, 0x95,
- 0xf4, 0x95, 0xf5, 0xae, 0xf8, 0x20, 0x10, 0x30,
- 0x70, 0x06, 0x00, 0x16, 0x12, 0x06, 0xf8, 0x45,
- 0x10, 0x5f, 0x10, 0xe1, 0x00, 0x04, 0x80, 0x00,
- 0x10, 0x05, 0x80, 0x01, 0x10, 0x04, 0x80, 0x02,
- 0x10, 0x06, 0x80, 0x03, 0x48, 0x11, 0xf2, 0x74,
- 0x07, 0x1e, 0xf0, 0x00, 0x00, 0x05, 0x10, 0x06,
- 0x00, 0xe1, 0x00, 0x04, 0x80, 0xe1, 0x00, 0x04,
- 0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1,
- 0x00, 0x0c, 0x88, 0x12, 0x11, 0x06, 0x10, 0x04,
- 0xf6, 0x00, 0x80, 0x04, 0x48, 0x16, 0xf6, 0x20,
- 0x88, 0x16, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x0c,
- 0x71, 0xe1, 0x00, 0x04, 0x00, 0x13, 0xf6, 0xab,
- 0xf8, 0x20, 0x10, 0x5f, 0x6b, 0xf8, 0x27, 0x6f,
- 0x00, 0x01, 0x77, 0x10, 0x00, 0x0c, 0xf6, 0xaa,
- 0xf8, 0x20, 0x10, 0x6b, 0xf2, 0x74, 0x0e, 0x9f,
- 0xf4, 0x95, 0x48, 0x17, 0x71, 0xe1, 0x00, 0x0c,
- 0x00, 0x12, 0x77, 0x10, 0x00, 0x0c, 0xf4, 0xaa,
- 0xf8, 0x30, 0x10, 0x7c, 0x77, 0x10, 0x00, 0x0c,
- 0x71, 0xe1, 0x00, 0x0b, 0x00, 0x13, 0xf6, 0xab,
- 0xf8, 0x30, 0x10, 0xb4, 0xe7, 0x30, 0xf7, 0xaa,
- 0xf8, 0x30, 0x10, 0xb4, 0xf2, 0x74, 0x0e, 0xc1,
- 0xf4, 0x95, 0x48, 0x17, 0x88, 0x12, 0xf4, 0x95,
- 0xf4, 0x95, 0x6c, 0x82, 0x10, 0x8d, 0x76, 0xe1,
- 0x00, 0x04, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02,
- 0x00, 0x05, 0xf0, 0x73, 0x10, 0xb4, 0x76, 0xe1,
- 0x00, 0x02, 0x00, 0x04, 0x77, 0x10, 0x00, 0x0c,
- 0x71, 0xe1, 0x00, 0x0b, 0x00, 0x12, 0xf5, 0xaa,
- 0xf8, 0x20, 0x10, 0x9a, 0xf0, 0x73, 0x10, 0x9c,
- 0x77, 0x12, 0x00, 0x0c, 0x76, 0x00, 0x00, 0x00,
- 0x70, 0x01, 0x00, 0x12, 0x70, 0x02, 0x00, 0x17,
- 0x76, 0x03, 0x00, 0x01, 0x48, 0x11, 0xf2, 0x74,
- 0x0c, 0xb9, 0xf0, 0x00, 0x00, 0x05, 0x76, 0xe1,
- 0x00, 0x04, 0x00, 0x00, 0x77, 0x10, 0x00, 0x0c,
- 0x71, 0xe1, 0x00, 0x0b, 0x00, 0x12, 0xf6, 0xaa,
- 0xf8, 0x20, 0x11, 0x1c, 0x48, 0x16, 0xf8, 0x45,
- 0x11, 0x33, 0x60, 0xe1, 0x00, 0x02, 0x00, 0x05,
- 0xf8, 0x20, 0x10, 0xdf, 0x10, 0xe1, 0x00, 0x0b,
- 0x08, 0xe1, 0x00, 0x0c, 0x11, 0xe1, 0x00, 0x04,
- 0xf8, 0x4d, 0x10, 0xc7, 0x6b, 0xf8, 0x27, 0x6f,
- 0x00, 0x01, 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95,
- 0xf5, 0xae, 0xf8, 0x20, 0x10, 0xcf, 0x48, 0x16,
- 0xf4, 0x95, 0x48, 0x08, 0xf8, 0x45, 0x11, 0x16,
- 0x6f, 0xe1, 0x00, 0x0c, 0x0d, 0x00, 0x81, 0xe1,
- 0x00, 0x0c, 0x11, 0x04, 0xf5, 0x00, 0x81, 0x04,
- 0x49, 0x16, 0xf5, 0x20, 0x89, 0x16, 0xf0, 0x73,
- 0x11, 0x0e, 0x10, 0xe1, 0x00, 0x0b, 0x71, 0xe1,
- 0x00, 0x0c, 0x00, 0x12, 0x88, 0x10, 0xf4, 0x95,
- 0xf4, 0x95, 0xf6, 0xaa, 0xf8, 0x30, 0x11, 0x16,
- 0x49, 0x12, 0xf6, 0x20, 0x88, 0x10, 0xf4, 0x95,
- 0xf4, 0x95, 0xf5, 0xae, 0xf8, 0x20, 0x10, 0xf3,
- 0x48, 0x16, 0x80, 0x06, 0x48, 0x08, 0xf8, 0x45,
- 0x11, 0x16, 0x10, 0x04, 0x70, 0x02, 0x00, 0x17,
- 0x80, 0x00, 0x76, 0x03, 0x00, 0x00, 0x10, 0x06,
- 0x80, 0x01, 0x10, 0x05, 0xf0, 0x74, 0x0c, 0xb9,
- 0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1,
- 0x00, 0x0c, 0x11, 0x06, 0x10, 0x04, 0xf6, 0x00,
- 0x80, 0x04, 0x48, 0x16, 0xf6, 0x20, 0x88, 0x16,
- 0x10, 0xe1, 0x00, 0x0c, 0x08, 0xe1, 0x00, 0x0b,
- 0xf8, 0x45, 0x11, 0x1c, 0xf0, 0x73, 0x11, 0x31,
- 0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17,
- 0xf0, 0x73, 0x11, 0x33, 0x76, 0xe1, 0x00, 0x0c,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0x02, 0x00, 0x01, 0x10, 0x04,
- 0x80, 0x00, 0x10, 0x05, 0xf0, 0x74, 0x06, 0x9f,
- 0x88, 0x12, 0xf4, 0x95, 0x77, 0x10, 0x00, 0xff,
- 0xf4, 0xaa, 0xf8, 0x30, 0x11, 0x33, 0x6c, 0x86,
- 0x0f, 0x70, 0xee, 0x08, 0x8a, 0x17, 0x8a, 0x16,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfc,
- 0xf4, 0x95, 0x71, 0x06, 0x00, 0x12, 0x88, 0x11,
- 0x73, 0x12, 0x00, 0x0e, 0xf1, 0x66, 0x00, 0x0d,
- 0xf3, 0x00, 0x24, 0x00, 0x89, 0x14, 0x13, 0x81,
- 0xf7, 0x7a, 0xf3, 0x30, 0x00, 0x01, 0x81, 0xf8,
- 0x27, 0x60, 0x13, 0xe1, 0x00, 0x01, 0xf7, 0x7c,
- 0xf3, 0x30, 0x00, 0x03, 0x81, 0xf8, 0x27, 0x61,
- 0xe9, 0x0f, 0x19, 0xe1, 0x00, 0x01, 0x81, 0xf8,
- 0x27, 0x62, 0x71, 0xe4, 0x00, 0x03, 0x00, 0x13,
- 0xf6, 0xb8, 0x49, 0x13, 0xf3, 0x00, 0x00, 0x01,
- 0xf3, 0x30, 0x00, 0x0f, 0x49, 0x0b, 0x09, 0xf8,
- 0x27, 0x62, 0xf8, 0x4d, 0x11, 0x75, 0x77, 0x10,
- 0x00, 0xff, 0xf4, 0xab, 0xf8, 0x30, 0x11, 0x75,
- 0x57, 0xf8, 0x27, 0x6c, 0xf3, 0x00, 0x00, 0x01,
- 0x4f, 0xf8, 0x27, 0x6c, 0x76, 0xf8, 0x27, 0x63,
- 0x00, 0x01, 0xf0, 0x73, 0x11, 0x78, 0x76, 0xf8,
- 0x27, 0x63, 0x00, 0x00, 0x70, 0xe4, 0x00, 0x03,
- 0x27, 0x62, 0x76, 0xf8, 0x27, 0x64, 0x00, 0x00,
- 0x11, 0xf8, 0x27, 0x61, 0x61, 0xf8, 0x00, 0x0b,
- 0x00, 0x02, 0xf8, 0x20, 0x11, 0x8d, 0xe9, 0x01,
- 0x6f, 0xe1, 0x00, 0x02, 0x0f, 0x18, 0x81, 0xf8,
- 0x27, 0x64, 0x11, 0xf8, 0x27, 0x61, 0x61, 0xf8,
- 0x00, 0x0b, 0x00, 0x01, 0xf8, 0x20, 0x11, 0xa9,
- 0x10, 0xf8, 0x27, 0x64, 0xf1, 0x00, 0x00, 0x04,
- 0x89, 0x13, 0xe9, 0xb8, 0xf5, 0x20, 0x81, 0xf8,
- 0x27, 0x65, 0x60, 0x84, 0x00, 0x02, 0xf8, 0x20,
- 0x11, 0xa9, 0x70, 0x00, 0x00, 0x11, 0x70, 0x01,
- 0x00, 0x13, 0x70, 0x02, 0x27, 0x65, 0xf2, 0x74,
- 0x0f, 0x18, 0xf4, 0x95, 0x48, 0x12, 0xee, 0x04,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16,
- 0x4a, 0x17, 0xee, 0xfc, 0xe8, 0x00, 0x4e, 0xf8,
- 0x27, 0x66, 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x68,
- 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x6c, 0xe8, 0x00,
- 0x4e, 0xf8, 0x27, 0x6a, 0x77, 0x12, 0x27, 0x40,
- 0x77, 0x11, 0x24, 0x00, 0x77, 0x1a, 0x00, 0x1f,
- 0xf0, 0x72, 0x11, 0xdb, 0x70, 0x92, 0x00, 0x11,
- 0x76, 0xe1, 0x00, 0x01, 0xff, 0xff, 0x76, 0x81,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0x03, 0x00, 0xff, 0x76, 0xe1,
- 0x00, 0x0c, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00,
- 0x6d, 0xe9, 0x00, 0x0d, 0xf0, 0x20, 0x25, 0xa0,
- 0xf1, 0x00, 0x00, 0x07, 0x89, 0x11, 0xf1, 0x00,
- 0x00, 0x01, 0x81, 0x02, 0x88, 0x16, 0xf4, 0x95,
- 0x77, 0x17, 0x00, 0x20, 0x76, 0x86, 0x00, 0xff,
- 0x76, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0x06,
- 0x10, 0x02, 0xf0, 0x74, 0x06, 0x6c, 0x76, 0x00,
- 0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0xf2, 0x74,
- 0x06, 0x6c, 0xf4, 0x95, 0x48, 0x11, 0x10, 0x02,
- 0xf0, 0x00, 0x00, 0x0d, 0x80, 0x02, 0x6d, 0xe9,
- 0x00, 0x0d, 0x6d, 0xee, 0x00, 0x0d, 0x6c, 0xef,
- 0xff, 0xff, 0x11, 0xe8, 0xf0, 0x74, 0x0c, 0x9d,
- 0xee, 0x04, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11,
- 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17,
- 0xee, 0xfa, 0x88, 0x11, 0x10, 0x0a, 0x49, 0x11,
- 0xf8, 0x4d, 0x12, 0x9f, 0x48, 0x08, 0xf8, 0x45,
- 0x12, 0x9f, 0x80, 0x04, 0x12, 0x81, 0xf5, 0x78,
- 0x89, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0xe2,
- 0xff, 0xb9, 0x12, 0x8a, 0x61, 0xf8, 0x00, 0x08,
- 0x00, 0x80, 0xf8, 0x30, 0x12, 0x8a, 0x13, 0xe1,
- 0x00, 0x01, 0xf0, 0xe8, 0xf7, 0x78, 0xf1, 0xa0,
- 0xf2, 0x30, 0x1f, 0xff, 0x88, 0x17, 0xf4, 0x95,
- 0x77, 0x12, 0x24, 0x00, 0x77, 0x16, 0x00, 0x00,
- 0x77, 0x13, 0x00, 0x20, 0xf6, 0xb8, 0x48, 0x17,
- 0x08, 0xe2, 0x00, 0x01, 0xf8, 0x45, 0x12, 0x42,
- 0x6d, 0xea, 0x00, 0x0d, 0x6d, 0x96, 0x6c, 0xeb,
- 0xff, 0xff, 0x12, 0x34, 0xf0, 0x73, 0x12, 0x90,
- 0x56, 0xf8, 0x27, 0x6a, 0xf0, 0x00, 0x00, 0x01,
- 0x4e, 0xf8, 0x27, 0x6a, 0x60, 0x82, 0x00, 0x01,
- 0xf8, 0x30, 0x12, 0x54, 0x70, 0x00, 0x00, 0x16,
- 0xf2, 0x74, 0x11, 0x38, 0xf4, 0x95, 0x48, 0x11,
- 0xf0, 0x73, 0x12, 0x90, 0x70, 0x00, 0x00, 0x16,
- 0xf2, 0x74, 0x11, 0x38, 0xf4, 0x95, 0x48, 0x11,
- 0x72, 0x10, 0x2a, 0x9e, 0xf4, 0x95, 0xf4, 0xaf,
- 0xf8, 0x30, 0x12, 0x6e, 0x76, 0x00, 0x00, 0x00,
- 0x76, 0x01, 0x00, 0xbc, 0x70, 0x02, 0x00, 0x16,
- 0x76, 0x03, 0x00, 0x00, 0xf2, 0x74, 0x0c, 0xb9,
- 0xf4, 0x95, 0x48, 0x11, 0xf0, 0x73, 0x12, 0x90,
- 0x10, 0xf8, 0x27, 0x6e, 0xf8, 0x44, 0x12, 0x90,
- 0x76, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0xbc,
- 0x70, 0x02, 0x00, 0x16, 0x76, 0x03, 0x00, 0x00,
- 0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95, 0x48, 0x11,
- 0xf0, 0x74, 0x0c, 0x5e, 0xf0, 0xe0, 0xf0, 0x10,
- 0x13, 0x88, 0xf8, 0x42, 0x12, 0x90, 0x76, 0xf8,
- 0x27, 0x6e, 0x00, 0x01, 0xf0, 0x73, 0x12, 0x90,
- 0x56, 0xf8, 0x27, 0x66, 0xf0, 0x00, 0x00, 0x01,
- 0x4e, 0xf8, 0x27, 0x66, 0x6d, 0xe9, 0x00, 0x5e,
- 0x56, 0xf8, 0x27, 0x68, 0xf0, 0x00, 0x00, 0x01,
- 0x4e, 0xf8, 0x27, 0x68, 0x71, 0x04, 0x00, 0x12,
- 0x6e, 0xea, 0xff, 0xff, 0x12, 0x18, 0x70, 0x04,
- 0x00, 0x12, 0xee, 0x06, 0x8a, 0x17, 0x8a, 0x16,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe,
- 0x88, 0x0e, 0xf4, 0x95, 0xf0, 0x66, 0x00, 0x0d,
- 0xf0, 0x00, 0x25, 0xa0, 0x88, 0x11, 0xf4, 0x95,
- 0xf4, 0x95, 0x76, 0x81, 0x00, 0xff, 0x76, 0x00,
- 0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0xf2, 0x74,
- 0x06, 0x6c, 0xf0, 0x00, 0x00, 0x01, 0x76, 0x00,
- 0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0x48, 0x11,
- 0xf2, 0x74, 0x06, 0x6c, 0xf0, 0x00, 0x00, 0x07,
- 0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11,
- 0x88, 0x0e, 0xf4, 0x95, 0xf0, 0x66, 0x00, 0x0d,
- 0xf0, 0x00, 0x24, 0x00, 0x88, 0x11, 0xf4, 0x95,
- 0xf4, 0x95, 0x76, 0xe1, 0x00, 0x01, 0xff, 0xff,
- 0x76, 0x81, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0x03, 0x00, 0xff,
- 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95,
- 0x13, 0x03, 0x88, 0x11, 0xfa, 0x4d, 0x12, 0xec,
- 0x71, 0x02, 0x00, 0x12, 0xf3, 0x10, 0x00, 0x01,
- 0x89, 0x1a, 0xf4, 0x95, 0xf0, 0x72, 0x12, 0xeb,
- 0x70, 0x91, 0x00, 0x12, 0x8a, 0x11, 0xfc, 0x00,
- 0xf4, 0x95, 0x4a, 0x0b, 0x4a, 0x0c, 0x4a, 0x0d,
- 0xf7, 0xb8, 0xee, 0xfe, 0x10, 0xf8, 0x00, 0x08,
- 0x11, 0x06, 0xf1, 0xc0, 0x83, 0x00, 0xf4, 0x85,
- 0x11, 0x06, 0xf7, 0x85, 0x81, 0x06, 0xf6, 0xb8,
- 0xec, 0x0f, 0x1e, 0x06, 0x61, 0x00, 0x80, 0x00,
- 0xf8, 0x20, 0x13, 0x05, 0xf4, 0x84, 0xee, 0x02,
- 0x8a, 0x0d, 0x8a, 0x0c, 0x8a, 0x0b, 0xfc, 0x00,
- 0xf4, 0x95, 0x4a, 0x0b, 0x4a, 0x0c, 0x4a, 0x0d,
- 0xee, 0xfe, 0xf7, 0xb8, 0x80, 0x00, 0x10, 0xf8,
- 0x00, 0x08, 0xf4, 0x85, 0x11, 0x06, 0xf7, 0x85,
- 0x81, 0x06, 0xf6, 0xb8, 0xec, 0x0f, 0x1e, 0x06,
- 0xf0, 0xf0, 0x61, 0x00, 0x80, 0x00, 0xf8, 0x20,
- 0x13, 0x20, 0xf4, 0x84, 0xee, 0x02, 0x8a, 0x0d,
- 0x8a, 0x0c, 0x8a, 0x0b, 0xfc, 0x00, 0x4a, 0x11,
- 0x77, 0x11, 0x00, 0x7b, 0x76, 0x81, 0x2e, 0xec,
- 0x77, 0x11, 0x00, 0x7b, 0xee, 0xff, 0x71, 0x81,
- 0x00, 0x11, 0xee, 0x01, 0x76, 0xe1, 0x00, 0x01,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0x06, 0x00, 0x00, 0x76, 0xe1,
- 0x00, 0x62, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x76,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0x92, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0x94, 0x00, 0x00, 0x76, 0xe1,
- 0x00, 0xb0, 0x00, 0x00, 0x76, 0xe1, 0x00, 0xb3,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0xbe, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0xbf, 0x00, 0x00, 0x76, 0xe1,
- 0x00, 0xc1, 0x00, 0x00, 0x76, 0xe1, 0x00, 0xc3,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0xc5, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0xc7, 0x00, 0x00, 0x76, 0x81,
- 0x00, 0x00, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
- 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xff,
- 0xf4, 0x95, 0x71, 0x06, 0x00, 0x16, 0xfb, 0x80,
- 0x16, 0xa2, 0x88, 0x17, 0xf4, 0x95, 0xf7, 0xb8,
- 0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x02,
- 0xfa, 0x46, 0x13, 0x88, 0x77, 0x11, 0x00, 0x00,
- 0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x02,
- 0xf8, 0x45, 0x13, 0xf9, 0x10, 0xf8, 0x00, 0x17,
- 0xf8, 0x45, 0x14, 0x39, 0x10, 0xf8, 0x00, 0x17,
- 0xf0, 0x10, 0x00, 0x01, 0xf8, 0x45, 0x14, 0x1f,
- 0xf0, 0x73, 0x14, 0x52, 0x10, 0xf8, 0x00, 0x17,
- 0xf0, 0x10, 0x00, 0x03, 0xf8, 0x45, 0x13, 0xd3,
- 0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x06,
- 0xf8, 0x44, 0x14, 0x52, 0x77, 0x12, 0x00, 0x7b,
- 0x71, 0x82, 0x00, 0x14, 0x61, 0xe4, 0x00, 0x07,
- 0x00, 0x40, 0xf8, 0x30, 0x14, 0x52, 0x49, 0x14,
- 0x48, 0x17, 0xf6, 0x00, 0x88, 0x12, 0xf4, 0x95,
- 0x77, 0x13, 0x00, 0x55, 0x77, 0x11, 0x00, 0x57,
- 0x6d, 0xea, 0x00, 0x3b, 0xe5, 0x01, 0x10, 0xe6,
- 0x00, 0x06, 0x80, 0x81, 0x48, 0x14, 0x00, 0xf8,
- 0x00, 0x17, 0x88, 0x12, 0xf4, 0x95, 0x77, 0x11,
- 0x00, 0x55, 0x10, 0xe2, 0x00, 0x40, 0x80, 0x81,
- 0x77, 0x11, 0x00, 0x57, 0x10, 0xe6, 0x00, 0x07,
- 0x80, 0x81, 0x77, 0x11, 0x00, 0x55, 0x10, 0xe2,
- 0x00, 0x45, 0x80, 0x81, 0x10, 0xe6, 0x00, 0x08,
- 0x77, 0x11, 0x00, 0x57, 0x80, 0x81, 0x77, 0x11,
- 0x00, 0x55, 0x10, 0xe2, 0x00, 0x4a, 0x80, 0x81,
- 0x77, 0x11, 0x00, 0x57, 0x10, 0xe6, 0x00, 0x09,
- 0x80, 0x81, 0xf2, 0x73, 0x14, 0x52, 0x77, 0x11,
- 0x03, 0xc0, 0x77, 0x12, 0x00, 0x7b, 0x10, 0x82,
- 0xf0, 0x00, 0x00, 0x07, 0x88, 0x13, 0xf4, 0x95,
- 0xf4, 0x95, 0x96, 0x1b, 0xf8, 0x30, 0x14, 0x52,
- 0x10, 0xe3, 0x00, 0x35, 0x77, 0x12, 0x00, 0x55,
- 0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6,
- 0x00, 0x04, 0x80, 0x82, 0x77, 0x12, 0x00, 0x55,
- 0x10, 0xe3, 0x00, 0x37, 0x80, 0x82, 0x77, 0x12,
- 0x00, 0x57, 0x10, 0xe6, 0x00, 0x05, 0x80, 0x82,
- 0x48, 0x11, 0xf0, 0x40, 0x00, 0x10, 0xf2, 0x73,
- 0x14, 0x50, 0xf0, 0x40, 0x00, 0x20, 0x77, 0x12,
- 0x00, 0x7b, 0x10, 0x82, 0xf0, 0x00, 0x00, 0x07,
- 0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x96, 0x0d,
- 0xf8, 0x30, 0x14, 0x52, 0x10, 0xe2, 0x00, 0x34,
- 0x77, 0x13, 0x00, 0x55, 0x80, 0x83, 0x77, 0x13,
- 0x00, 0x57, 0x10, 0xe6, 0x00, 0x02, 0x80, 0x83,
- 0x10, 0xe2, 0x00, 0x36, 0x77, 0x12, 0x00, 0x55,
- 0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6,
- 0x00, 0x03, 0x80, 0x82, 0x48, 0x11, 0xf0, 0x40,
- 0x00, 0x04, 0xf2, 0x73, 0x14, 0x50, 0xf0, 0x40,
- 0x00, 0x08, 0x77, 0x12, 0x00, 0x7b, 0x10, 0x82,
- 0xf0, 0x00, 0x00, 0x07, 0x88, 0x12, 0xf4, 0x95,
- 0xf4, 0x95, 0x96, 0x0e, 0xf8, 0x30, 0x14, 0x52,
- 0x10, 0xe2, 0x00, 0x33, 0x77, 0x12, 0x00, 0x55,
- 0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6,
- 0x00, 0x01, 0x80, 0x82, 0x48, 0x11, 0xf2, 0x73,
- 0x14, 0x50, 0xf0, 0x40, 0x00, 0x02, 0x77, 0x12,
- 0x00, 0x7b, 0x10, 0x82, 0xf0, 0x00, 0x00, 0x07,
- 0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x96, 0x0f,
- 0xf8, 0x30, 0x14, 0x52, 0x10, 0xe2, 0x00, 0x32,
- 0x77, 0x12, 0x00, 0x55, 0x77, 0x13, 0x00, 0x57,
- 0x80, 0x82, 0x48, 0x11, 0xe7, 0x62, 0xf0, 0x40,
- 0x00, 0x01, 0xe5, 0x01, 0x88, 0x11, 0xf4, 0x95,
- 0x77, 0x12, 0x00, 0x7b, 0x48, 0x11, 0x71, 0x82,
- 0x00, 0x12, 0x1a, 0xe2, 0x00, 0x07, 0x80, 0xe2,
- 0x00, 0x07, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01,
- 0x8a, 0x17, 0x48, 0x11, 0x8a, 0x16, 0x8a, 0x11,
- 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0x77, 0x0e,
- 0x00, 0x05, 0x77, 0x12, 0x00, 0x55, 0xe8, 0x04,
- 0xf6, 0xb8, 0x28, 0xe1, 0x00, 0x02, 0xee, 0xff,
- 0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0xf0, 0x20,
- 0x80, 0x00, 0xee, 0x01, 0x1a, 0x82, 0x77, 0x12,
- 0x00, 0x57, 0x80, 0x82, 0xe8, 0x01, 0x32, 0xe1,
- 0x00, 0x02, 0xf5, 0x82, 0x77, 0x11, 0x00, 0x54,
- 0xf6, 0x93, 0x18, 0x81, 0x77, 0x11, 0x00, 0x54,
- 0xf2, 0xa0, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95,
- 0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95,
- 0x71, 0x04, 0x00, 0x11, 0xfb, 0x80, 0x16, 0xa2,
- 0x88, 0x16, 0xf4, 0x95, 0x77, 0x12, 0x00, 0x55,
- 0x10, 0xe6, 0x00, 0x03, 0x80, 0x82, 0x77, 0x12,
- 0x00, 0x56, 0x10, 0xe1, 0x00, 0x02, 0x77, 0x13,
- 0x00, 0x56, 0x80, 0x82, 0x77, 0x12, 0x00, 0x56,
- 0x10, 0xe1, 0x00, 0x03, 0x80, 0x82, 0x10, 0xe1,
- 0x00, 0x04, 0x77, 0x12, 0x00, 0x56, 0x80, 0x82,
- 0x77, 0x12, 0x00, 0x56, 0x10, 0xe1, 0x00, 0x01,
- 0x80, 0x82, 0xe7, 0x12, 0xe5, 0x01, 0xf9, 0x80,
- 0x16, 0x9a, 0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4,
- 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xf9,
- 0x77, 0x11, 0x00, 0x7b, 0x76, 0x00, 0x00, 0x16,
- 0x76, 0x01, 0x00, 0x17, 0x76, 0x02, 0x00, 0x1a,
- 0x76, 0x03, 0x00, 0x1b, 0x76, 0x04, 0x00, 0x1c,
- 0x76, 0x05, 0x00, 0x1d, 0x71, 0x81, 0x00, 0x17,
- 0x71, 0xe7, 0x00, 0x06, 0x00, 0x11, 0x10, 0x81,
- 0xf8, 0x44, 0x14, 0xdf, 0xf9, 0x80, 0x16, 0x53,
- 0xf6, 0xb8, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x20,
- 0xff, 0xff, 0xf6, 0xb8, 0xfb, 0x80, 0x16, 0x08,
- 0xf0, 0x20, 0xff, 0xff, 0x77, 0x11, 0x00, 0x7b,
- 0x71, 0x81, 0x00, 0x17, 0x76, 0xe7, 0x00, 0x06,
- 0x00, 0x01, 0x48, 0x17, 0x77, 0x16, 0x00, 0x00,
- 0x77, 0x10, 0x00, 0x04, 0x77, 0x15, 0x00, 0x03,
- 0x77, 0x14, 0x00, 0x02, 0x77, 0x13, 0x00, 0x01,
- 0xf0, 0x00, 0x00, 0x39, 0x76, 0xe7, 0x00, 0x08,
- 0x00, 0x1f, 0x76, 0xe7, 0x00, 0x07, 0x00, 0x00,
- 0x88, 0x0e, 0x77, 0x1a, 0x00, 0x05, 0x48, 0x17,
- 0xf0, 0x00, 0x00, 0x09, 0x88, 0x12, 0x48, 0x18,
- 0x88, 0x19, 0xe8, 0x00, 0xf0, 0x72, 0x15, 0x2c,
- 0x73, 0x19, 0x00, 0x11, 0x76, 0x82, 0x00, 0x00,
- 0x11, 0x91, 0x73, 0x11, 0x00, 0x19, 0x70, 0xe2,
- 0x00, 0x03, 0x00, 0x16, 0x70, 0xe2, 0x00, 0x04,
- 0x00, 0x13, 0x70, 0xe2, 0x00, 0x05, 0x00, 0x14,
- 0x81, 0xe2, 0x00, 0x01, 0x70, 0xe2, 0x00, 0x06,
- 0x00, 0x15, 0x70, 0xe2, 0x00, 0x07, 0x00, 0x10,
- 0x80, 0xe2, 0x00, 0x02, 0x73, 0x0e, 0x00, 0x11,
- 0xf1, 0x00, 0x00, 0x1e, 0x6d, 0xee, 0x00, 0x05,
- 0x6d, 0xeb, 0x00, 0x05, 0x6d, 0xec, 0x00, 0x05,
- 0x6d, 0xed, 0x00, 0x05, 0x6d, 0xe8, 0x00, 0x05,
- 0xf0, 0x00, 0x00, 0x01, 0x81, 0x91, 0x6d, 0xea,
- 0x00, 0x08, 0x73, 0x11, 0x00, 0x0e, 0xee, 0x07,
- 0x76, 0xe7, 0x00, 0x41, 0x00, 0x24, 0x76, 0xe7,
- 0x00, 0x46, 0x00, 0x25, 0x76, 0xe7, 0x00, 0x4b,
- 0x00, 0x26, 0x76, 0xe7, 0x00, 0x50, 0x00, 0x27,
- 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4,
- 0x4a, 0x11, 0x4a, 0x16, 0xee, 0xfe, 0x88, 0x11,
- 0x56, 0x06, 0x4e, 0x00, 0xf9, 0x80, 0x16, 0xa2,
- 0xf7, 0xb8, 0x10, 0xf8, 0x00, 0x11, 0xf0, 0x10,
- 0xff, 0xff, 0xfa, 0x45, 0x15, 0x60, 0x77, 0x16,
- 0xff, 0xff, 0x77, 0x12, 0x00, 0x7b, 0x49, 0x11,
- 0x10, 0x82, 0xf6, 0x03, 0xf0, 0x00, 0x00, 0x09,
- 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81,
- 0xf8, 0x44, 0x15, 0x71, 0xf2, 0x73, 0x15, 0x71,
- 0xf4, 0x95, 0xe7, 0x16, 0x77, 0x11, 0x00, 0x7b,
- 0x10, 0x81, 0xf0, 0x00, 0x00, 0x09, 0x88, 0x11,
- 0xf4, 0x95, 0x77, 0x12, 0x00, 0x06, 0x10, 0x81,
- 0xf8, 0x45, 0x15, 0x5c, 0x6e, 0xea, 0xff, 0xff,
- 0x15, 0x69, 0x6d, 0xe9, 0x00, 0x08, 0x76, 0x86,
- 0x00, 0x01, 0xe9, 0x01, 0x56, 0x00, 0xf1, 0x80,
- 0x10, 0xf8, 0x00, 0x0b, 0xf8, 0x45, 0x15, 0x7e,
- 0xfb, 0x80, 0x15, 0x85, 0xf4, 0x95, 0x48, 0x16,
- 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x02, 0x48, 0x16,
- 0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11,
- 0xee, 0xff, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11,
- 0xf4, 0x95, 0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9,
- 0xf8, 0x30, 0x15, 0xc4, 0x10, 0xe1, 0x00, 0x03,
- 0x77, 0x12, 0x00, 0x55, 0x80, 0x82, 0x77, 0x12,
- 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12,
- 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12,
- 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12,
- 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12,
- 0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1,
- 0x00, 0x02, 0xf0, 0x00, 0x00, 0x08, 0x32, 0xf8,
- 0x00, 0x08, 0x77, 0x12, 0x00, 0x54, 0xe8, 0x01,
- 0xf4, 0x82, 0xf4, 0x93, 0x18, 0x82, 0x77, 0x12,
- 0x00, 0x54, 0xf0, 0x40, 0x00, 0x00, 0x80, 0x82,
- 0x10, 0xe1, 0x00, 0x01, 0xf9, 0x80, 0x16, 0x76,
- 0x10, 0xe1, 0x00, 0x01, 0xf9, 0x80, 0x16, 0x66,
- 0xf0, 0x73, 0x16, 0x03, 0x77, 0x11, 0x00, 0x7b,
- 0x71, 0x81, 0x00, 0x11, 0x71, 0xe1, 0x00, 0x07,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1,
- 0x00, 0x09, 0xf9, 0x80, 0x15, 0x85, 0x77, 0x11,
- 0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1,
- 0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00,
- 0x00, 0x08, 0x77, 0x11, 0x00, 0x7b, 0x71, 0x81,
- 0x00, 0x11, 0x10, 0xe1, 0x00, 0x09, 0xfb, 0x80,
- 0x15, 0x85, 0xf0, 0x00, 0x00, 0x10, 0x77, 0x11,
- 0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1,
- 0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00,
- 0x00, 0x18, 0x77, 0x11, 0x00, 0x7b, 0x71, 0x81,
- 0x00, 0x11, 0x10, 0xe1, 0x00, 0x09, 0xfb, 0x80,
- 0x15, 0x85, 0xf0, 0x00, 0x00, 0x20, 0x77, 0x11,
- 0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1,
- 0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00,
- 0x00, 0x28, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01,
- 0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff,
- 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95,
- 0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30,
- 0x16, 0x41, 0x77, 0x11, 0x00, 0x55, 0x76, 0x81,
- 0x00, 0x1e, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81,
- 0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0xf2, 0x73,
- 0x16, 0x4e, 0x76, 0x81, 0x00, 0x00, 0x77, 0x11,
- 0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x71, 0xe1,
- 0x00, 0x07, 0x00, 0x12, 0x76, 0x82, 0x00, 0x00,
- 0x10, 0xe1, 0x00, 0x39, 0xf9, 0x80, 0x16, 0x08,
- 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11,
- 0xf4, 0xe4, 0x4a, 0x11, 0x77, 0x11, 0x00, 0x7b,
- 0x10, 0x81, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x11,
- 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xfa, 0x44,
- 0x16, 0x63, 0xf4, 0x95, 0xee, 0xff, 0x76, 0x81,
- 0x00, 0x01, 0xee, 0x01, 0x8a, 0x11, 0xf4, 0xe4,
- 0xf0, 0x10, 0x00, 0x10, 0x4a, 0x11, 0x32, 0xf8,
- 0x00, 0x08, 0xee, 0xff, 0x77, 0x11, 0x00, 0x01,
- 0xe8, 0x01, 0xee, 0x01, 0xf4, 0x82, 0x1a, 0x81,
- 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
- 0xf0, 0x10, 0x00, 0x10, 0x4a, 0x11, 0x32, 0xf8,
- 0x00, 0x08, 0xee, 0xff, 0xe8, 0x01, 0x77, 0x11,
- 0x00, 0x00, 0xf4, 0x82, 0xee, 0x01, 0xf4, 0x93,
- 0x18, 0x81, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95,
- 0xf4, 0xe4, 0x4a, 0x11, 0xf0, 0x10, 0x00, 0x10,
- 0x77, 0x11, 0x00, 0x00, 0x32, 0xf8, 0x00, 0x08,
- 0xee, 0xff, 0x11, 0x81, 0xe8, 0x01, 0xee, 0x01,
- 0x77, 0x11, 0x00, 0x00, 0xf4, 0x82, 0xf2, 0xa0,
- 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
- 0xf2, 0x73, 0x16, 0x9e, 0xf6, 0xbb, 0xf4, 0x95,
- 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xe4,
- 0xf2, 0x73, 0x16, 0xa6, 0xf7, 0xbb, 0xf4, 0x95,
- 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xe4,
- 0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95, 0x71, 0x04,
- 0x00, 0x16, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11,
- 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x0e, 0x10, 0xe6, 0x00, 0x0e,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x80, 0x82,
- 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x0d, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12,
- 0x10, 0xe6, 0x00, 0x0d, 0x80, 0x82, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0c,
- 0x10, 0xe6, 0x00, 0x0c, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x0b, 0x10, 0xe6,
- 0x00, 0x0b, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12,
- 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x0a, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x10, 0xe6, 0x00, 0x0a, 0x80, 0x82,
- 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x09, 0x10, 0xe6, 0x00, 0x09, 0x71, 0xe1,
- 0x00, 0x06, 0x00, 0x12, 0x80, 0x82, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x08,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x10, 0xe6,
- 0x00, 0x08, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x07, 0x10, 0xe6,
- 0x00, 0x07, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12,
- 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x06, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x10, 0xe6, 0x00, 0x06, 0x80, 0x82,
- 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x05, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12,
- 0x10, 0xe6, 0x00, 0x05, 0x80, 0x82, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x04,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x10, 0xe6,
- 0x00, 0x04, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x03, 0x71, 0xe1,
- 0x00, 0x06, 0x00, 0x12, 0x10, 0xe6, 0x00, 0x03,
- 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x02, 0x10, 0xe6, 0x00, 0x02,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x80, 0x82,
- 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x01, 0x10, 0xe6, 0x00, 0x01, 0x71, 0xe1,
- 0x00, 0x06, 0x00, 0x12, 0x80, 0x82, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x00,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x13, 0xe7, 0x62,
- 0xe5, 0x01, 0xf9, 0x80, 0x16, 0x9a, 0x8a, 0x16,
- 0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11,
- 0xf4, 0x95, 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05,
- 0x00, 0x12, 0xee, 0xff, 0x76, 0x82, 0x00, 0x00,
- 0xee, 0x01, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x11,
- 0x69, 0x81, 0x00, 0x01, 0x8a, 0x11, 0xf4, 0x95,
- 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0xf4, 0x95,
- 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0xee, 0xff, 0x76, 0x82, 0x00, 0x01, 0xee, 0x01,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x11, 0x69, 0x81,
- 0x00, 0x01, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
- 0x4a, 0x11, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81,
- 0xf0, 0x00, 0x00, 0x94, 0x88, 0x11, 0xf4, 0x95,
- 0xf4, 0x95, 0x10, 0x81, 0xfa, 0x44, 0x17, 0x9c,
- 0xf4, 0x95, 0xee, 0xff, 0xf9, 0x80, 0x16, 0x53,
- 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 0xf0, 0x00,
- 0x00, 0x94, 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95,
- 0x76, 0x81, 0x00, 0x01, 0xee, 0x01, 0x76, 0xe1,
- 0x00, 0x01, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02,
- 0x00, 0x21, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x20,
- 0x76, 0xe1, 0x00, 0x04, 0x00, 0x23, 0x76, 0xe1,
- 0x00, 0x05, 0x00, 0x22, 0x76, 0xe1, 0x00, 0x06,
- 0x00, 0x38, 0x76, 0xe1, 0x00, 0x07, 0x00, 0x39,
- 0x76, 0xe1, 0x00, 0x08, 0x00, 0x15, 0x76, 0xe1,
- 0x00, 0x09, 0x00, 0x14, 0x76, 0xe1, 0x00, 0x0a,
- 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x41,
- 0x76, 0xe1, 0x00, 0x0c, 0x00, 0x40, 0x76, 0xe1,
- 0x00, 0x0d, 0x00, 0x43, 0x76, 0xe1, 0x00, 0x0e,
- 0x00, 0x42, 0x76, 0xe1, 0x00, 0x0f, 0x00, 0x48,
- 0x76, 0xe1, 0x00, 0x10, 0x00, 0x49, 0x76, 0xe1,
- 0x00, 0x11, 0x00, 0x1b, 0x76, 0xe1, 0x00, 0x12,
- 0x00, 0x1a, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4,
- 0x4a, 0x11, 0xee, 0xfd, 0x88, 0x11, 0x56, 0x06,
- 0x4e, 0x00, 0xf9, 0x80, 0x16, 0xa2, 0x77, 0x12,
- 0x00, 0x7b, 0x77, 0x0e, 0x00, 0x09, 0x10, 0x82,
- 0x28, 0xf8, 0x00, 0x11, 0xf0, 0x00, 0x00, 0x95,
- 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81,
- 0xf8, 0x45, 0x17, 0xf0, 0xf2, 0x73, 0x17, 0xfd,
- 0x77, 0x11, 0xff, 0xff, 0x76, 0x81, 0x00, 0x01,
- 0xe9, 0x01, 0x56, 0x00, 0xf1, 0x80, 0x10, 0xf8,
- 0x00, 0x0b, 0xf8, 0x45, 0x17, 0xfd, 0xfb, 0x80,
- 0x18, 0x10, 0xf4, 0x95, 0x48, 0x11, 0xf9, 0x80,
- 0x16, 0x9a, 0xee, 0x03, 0x48, 0x11, 0x8a, 0x11,
- 0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11,
- 0xf4, 0x95, 0xee, 0xff, 0x71, 0xe1, 0x00, 0x01,
- 0x00, 0x11, 0xee, 0x01, 0x10, 0x81, 0x8a, 0x11,
- 0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff,
- 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95,
- 0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30,
- 0x18, 0xc3, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x01,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x02, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x03,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x04, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x05,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x06, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x01, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x07,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
- 0x20, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x08, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x09,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x0a, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0b,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x0c, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1,
- 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0d,
- 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82,
- 0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12,
- 0x76, 0x82, 0x00, 0x0e, 0x71, 0xe1, 0x00, 0x06,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1,
- 0x00, 0x07, 0xf9, 0x80, 0x16, 0x76, 0x10, 0xe1,
- 0x00, 0x08, 0xf9, 0x80, 0x16, 0x76, 0x10, 0xe1,
- 0x00, 0x07, 0xf9, 0x80, 0x16, 0x66, 0x10, 0xe1,
- 0x00, 0x08, 0xf9, 0x80, 0x16, 0x66, 0xf0, 0x73,
- 0x18, 0xd1, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81,
- 0xfb, 0x80, 0x18, 0x10, 0xf0, 0x00, 0x00, 0x95,
- 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 0xfb, 0x80,
- 0x18, 0x10, 0xf0, 0x00, 0x00, 0x9e, 0xf9, 0x80,
- 0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11, 0xf4, 0xe4,
- 0x4a, 0x11, 0x88, 0x11, 0xee, 0xff, 0xf4, 0x95,
- 0x10, 0x04, 0x71, 0xe1, 0x00, 0x03, 0x00, 0x11,
- 0xee, 0x01, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95,
- 0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95,
- 0x71, 0x04, 0x00, 0x16, 0xfb, 0x80, 0x16, 0xa2,
- 0x88, 0x11, 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x02,
- 0x00, 0x12, 0x76, 0x82, 0x00, 0x10, 0x10, 0xe6,
- 0x00, 0x01, 0x71, 0xe1, 0x00, 0x03, 0x00, 0x12,
- 0x80, 0x82, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x12,
- 0x10, 0xe6, 0x00, 0x02, 0x80, 0x82, 0xe7, 0x62,
- 0x71, 0xe1, 0x00, 0x02, 0x00, 0x13, 0xe5, 0x01,
- 0xf9, 0x80, 0x16, 0x9a, 0x8a, 0x16, 0x8a, 0x11,
- 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0xee, 0xff,
- 0xee, 0x01, 0x10, 0xe1, 0x00, 0x01, 0x8a, 0x11,
- 0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x77, 0x11,
- 0x00, 0x7b, 0x10, 0x81, 0xf0, 0x00, 0x00, 0xb3,
- 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81,
- 0xfa, 0x44, 0x19, 0x2a, 0xf4, 0x95, 0xee, 0xff,
- 0xf9, 0x80, 0x16, 0x53, 0x77, 0x11, 0x00, 0x7b,
- 0x10, 0x81, 0xf0, 0x00, 0x00, 0xb3, 0x88, 0x11,
- 0xf4, 0x95, 0xf4, 0x95, 0x76, 0x81, 0x00, 0x01,
- 0xee, 0x01, 0x76, 0xe1, 0x00, 0x01, 0x00, 0x00,
- 0x76, 0xe1, 0x00, 0x02, 0x00, 0x13, 0x76, 0xe1,
- 0x00, 0x03, 0x00, 0x26, 0x76, 0xe1, 0x00, 0x04,
- 0x00, 0x25, 0x76, 0xe1, 0x00, 0x05, 0x00, 0x24,
- 0x76, 0xe1, 0x00, 0x06, 0x00, 0x00, 0x76, 0xe1,
- 0x00, 0x07, 0x00, 0x17, 0x76, 0xe1, 0x00, 0x08,
- 0x00, 0x32, 0x76, 0xe1, 0x00, 0x09, 0x00, 0x31,
- 0x76, 0xe1, 0x00, 0x0a, 0x00, 0x30, 0x8a, 0x11,
- 0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16,
- 0x4a, 0x17, 0xee, 0xff, 0xf4, 0x95, 0x71, 0x06,
- 0x00, 0x17, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11,
- 0xf4, 0x95, 0xf7, 0xb8, 0x10, 0xf8, 0x00, 0x11,
- 0xf0, 0x10, 0xff, 0xff, 0xfa, 0x45, 0x19, 0x73,
- 0x77, 0x16, 0xff, 0xff, 0x77, 0x12, 0x00, 0x7b,
- 0x77, 0x0e, 0x00, 0x05, 0x10, 0x82, 0x28, 0xf8,
- 0x00, 0x11, 0xf0, 0x00, 0x00, 0xb4, 0x88, 0x11,
- 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xf8, 0x44,
- 0x19, 0x84, 0xf2, 0x73, 0x19, 0x84, 0xf4, 0x95,
- 0xe7, 0x16, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81,
- 0xf0, 0x00, 0x00, 0xb4, 0x88, 0x11, 0xf4, 0x95,
- 0x77, 0x12, 0x00, 0x02, 0x10, 0x81, 0xf8, 0x45,
- 0x19, 0x6f, 0x6e, 0xea, 0xff, 0xff, 0x19, 0x7c,
- 0x6d, 0xe9, 0x00, 0x05, 0x61, 0xf8, 0x00, 0x17,
- 0x00, 0x01, 0xfa, 0x20, 0x19, 0x8f, 0x76, 0x86,
- 0x00, 0x01, 0xfb, 0x80, 0x19, 0x97, 0xf4, 0x95,
- 0x48, 0x16, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01,
- 0x8a, 0x17, 0x48, 0x16, 0x8a, 0x16, 0x8a, 0x11,
- 0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff, 0xfb, 0x80,
- 0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95, 0x77, 0x10,
- 0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30, 0x19, 0xcc,
- 0x71, 0xe1, 0x00, 0x02, 0x00, 0x12, 0x69, 0x82,
- 0x00, 0x10, 0x71, 0xe1, 0x00, 0x02, 0x00, 0x12,
- 0x68, 0x82, 0xf7, 0xff, 0x71, 0xe1, 0x00, 0x02,
- 0x00, 0x12, 0x68, 0x82, 0xfb, 0xff, 0x71, 0xe1,
- 0x00, 0x02, 0x00, 0x12, 0x68, 0x82, 0xff, 0xf0,
- 0x71, 0xe1, 0x00, 0x03, 0x00, 0x12, 0x76, 0x82,
- 0xff, 0xff, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x12,
- 0x76, 0x82, 0xff, 0xff, 0x71, 0xe1, 0x00, 0x02,
- 0x00, 0x12, 0x69, 0x82, 0x00, 0x20, 0x71, 0xe1,
- 0x00, 0x02, 0x00, 0x11, 0xf2, 0x73, 0x19, 0xda,
- 0x68, 0x81, 0xff, 0xef, 0x77, 0x11, 0x00, 0x7b,
- 0x10, 0x81, 0xfb, 0x80, 0x19, 0x97, 0xf0, 0x00,
- 0x00, 0xb4, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81,
- 0xfb, 0x80, 0x19, 0x97, 0xf0, 0x00, 0x00, 0xb9,
- 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11,
- 0xf4, 0xe4, 0x00, 0xa4, 0x00, 0x00, 0x19, 0xdf,
- 0x00, 0x01, 0x2a, 0xe6, 0x00, 0x00, 0x00, 0x01,
- 0x2a, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x2a, 0x12,
- 0x0c, 0x01, 0xc3, 0x4f, 0x00, 0x00, 0x00, 0x01,
- 0x2a, 0x15, 0x00, 0x00, 0x00, 0x02, 0x2a, 0x16,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x2a, 0x5d,
- 0x00, 0x43, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79,
- 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68,
- 0x00, 0x74, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65,
- 0x00, 0x63, 0x00, 0x68, 0x00, 0x6e, 0x00, 0x6f,
- 0x00, 0x54, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6e,
- 0x00, 0x64, 0x00, 0x20, 0x00, 0x41, 0x00, 0x47,
- 0x00, 0x00, 0x00, 0x04, 0x2a, 0x76, 0x00, 0x30,
- 0x00, 0x2e, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0c,
- 0x2a, 0x7a, 0x00, 0x46, 0x00, 0x65, 0x00, 0x62,
- 0x00, 0x20, 0x00, 0x32, 0x00, 0x37, 0x00, 0x20,
- 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31,
- 0x00, 0x00, 0x00, 0x09, 0x2a, 0x86, 0x00, 0x31,
- 0x00, 0x34, 0x00, 0x3a, 0x00, 0x33, 0x00, 0x35,
- 0x00, 0x3a, 0x00, 0x33, 0x00, 0x33, 0x00, 0x00,
- 0x00, 0x0f, 0x2a, 0x8f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x2a, 0x9e, 0x00, 0x00,
- 0x00, 0x01, 0x2a, 0x9f, 0x00, 0x00, 0x00, 0x01,
- 0x2a, 0xa0, 0x00, 0x00, 0x00, 0x01, 0x2a, 0xa1,
- 0x00, 0x00, 0x00, 0x01, 0x2a, 0xa2, 0x00, 0x00,
- 0x00, 0x01, 0x29, 0x7e, 0x00, 0x00, 0x00, 0x02,
- 0x29, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x29, 0x82, 0xff, 0xff, 0x00, 0x01, 0x2a, 0xa7,
- 0x00, 0x00, 0x00, 0x05, 0x2a, 0xa8, 0x71, 0x41,
- 0x20, 0x00, 0x20, 0x00, 0x00, 0x23, 0x04, 0x00,
- 0x00, 0x0a, 0x2a, 0xad, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0f, 0x2a, 0xb7, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x40, 0x00, 0xa0, 0x82, 0x40,
- 0x00, 0x08, 0x30, 0x7f, 0x00, 0x80, 0x01, 0x80,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x27, 0x6e, 0x00, 0x00,
- 0x00, 0x01, 0x27, 0x6f, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x09, 0x00, 0x00, 0x1a, 0x83, 0x04, 0xe8,
- 0x04, 0xcf, 0x04, 0xc5, 0x04, 0xba, 0x04, 0xb0,
- 0x04, 0xac, 0x04, 0x9c, 0x04, 0x8c, 0x04, 0x81,
- 0x00, 0x78, 0x00, 0x00, 0x01, 0x00, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xaa, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x02, 0x23, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x05, 0xe5, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x02, 0xb5, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x0e, 0x33, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73,
- 0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0x00, 0x00,
-};
-
diff --git a/firmware/Makefile b/firmware/Makefile
index 2f6a6e2..30b6ef4 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -17,6 +17,7 @@ fw-shipped-$(CONFIG_SMCTR_FIRMWARE) += tr_smctr.bin
fw-shipped-$(CONFIG_USB_KAWETH_FIRMWARE) += kaweth/new_code.bin \
kaweth/new_code_fix.bin kaweth/trigger_code.bin \
kaweth/trigger_code_fix.bin
+fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET_FIRMWARE) += ttusb-budget-dspbootcode.bin
firmware-y := $(fw-external-y) $(fw-shipped-y)
firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
diff --git a/firmware/ttusb-budget-dspbootcode.bin.ihex b/firmware/ttusb-budget-dspbootcode.bin.ihex
new file mode 100644
index 0000000..b4b2247
--- /dev/null
+++ b/firmware/ttusb-budget-dspbootcode.bin.ihex
@@ -0,0 +1,820 @@
+:1000000008AA001800030800001000000180185F13
+:100010000000018077182AEB6BF8001803FF68F8DE
+:100020000018FFFEF7B8F7BEF6B9F4A0F6B7F6B5BC
+:10003000F6B6F02019DFF1000001F84D01ABF6B87B
+:10004000F02019DFF07301A57EF80012F000000126
+:1000500047F800117E9200F80011F00000017EF8D0
+:100060000011F00000016C89019AF7B8EEFCF02055
+:10007000FFFFF1000001F84D01BFF27301B94E021C
+:10008000F495F5E356027E001100FA4C01B76B03BC
+:100090000001F6B8EE04F0740DA7F07401C54A1122
+:1000A0004A1672112AE610F80011FA4501DBF495A0
+:1000B000EEFF4811F0002AC68816F495F49510EE6C
+:1000C000FFFFF4E36CE9FFFF01D510F82AE7F845DC
+:1000D00001E210F82AE7F4E3F07401FFEE018A165A
+:1000E0008A11FC00F7B8E9204A1109F82AE6F84E0F
+:1000F00001F3F27301FDF495E80172112AE649114A
+:1001000080E12AC6F3000001E80081F82AE68A119E
+:10011000FC00F495F073020010F82A0FFC004A115D
+:10012000F074020280F82A107308000940F82A15BA
+:1001300082F80011F495771003E8F5A9F830022150
+:1001400071F82A102A1556F82A0CF0E34EF82A16F0
+:10015000E8004EF82A0C8A11FC004A064A074A1D9C
+:1001600068F800077D3F69F80007400068F8001D47
+:10017000FFFC6BF82A0F00018A1D8A078A06F4EB40
+:10018000EEFD76F82A0F000076000000FB80194C87
+:10019000F495E80080F82A11F980190780F82A0EF2
+:1001A000F980166676002A1210F82A11F98018E3F1
+:1001B00010F82A0EF980166610F82A0EF9801687B4
+:1001C000EE03FC004A11F6B8F495F020800011F817
+:1001D0002A5AF84D029311F82A9FF84C027C7712A4
+:1001E0002A39491201F82A9F8911F495F4957181F1
+:1001F00000116CE1FFAB02936BF82A9F0001E90547
+:1002000001E2000381F82AA0F073029572112A9F7F
+:10021000F49510E12A396BF82A9F000111F82A9F02
+:1002200009F82AA0F84C029376F82A5A000076F8CA
+:100230002A9F000076F82AA000008811F495481142
+:100240008A11FC004A11EEFE10F82A5AF84402B254
+:1002500076F82A5A0001F07402588811F495771044
+:100260008000F4A9F83002B24811F03000FF80009D
+:1002700010F82A5BF98018D6EE028A11FC00F4957A
+:100280004A084A094A0A4A0B4A0C4A0D4A104A11BE
+:100290004A124A134A144A154A164A174A174A1963
+:1002A0004A0E4A064A074A1A4A1D4A1B4A1C68F85F
+:1002B00000077D3F69F80007400068F8001DFFFC5B
+:1002C000481868F80018FFFEF495F4954A08EEFD0A
+:1002D000F07402588811F49577108000F4A9F83072
+:1002E00002EF4811F03000FF800010F82A5BF9801F
+:1002F00018D6EE038A18F4958A1C8A1B8A1D8A1A5E
+:100300008A078A068A0E8A198A178A178A168A1510
+:100310008A148A138A128A118A108A0D8A0C8A0B0F
+:100320008A0A8A098A08F4EB4A1177112A397681F8
+:10033000005577122A1810E2000180E1000110E256
+:10034000000280E1000276E10003000076E1000493
+:1003500000AAF07402988A11FC004A118811F495E1
+:10036000F49510816FF82A9E0C88E8FF18E10001CF
+:100370001AF82A9EF0301FFF80F82A9E8A11FC008E
+:100380004A1177112A397681005577122A1811E21D
+:10039000000181E1000111E2000281E1000276E149
+:1003A0000003000248086FE100040C98F03000FFE1
+:1003B00080E1000576E1000600AAF07402988A1137
+:1003C000FC004A1177112A397681005577122A18D4
+:1003D00010E2000180E1000110E2000280E1000271
+:1003E00076E1000300044811F00000048812F4953F
+:1003F00077132A76E900E598F3000001F6B8480B78
+:1004000008F82A3CF8430371768200AAF074029837
+:100410008A11FC004A11EEF08811F495F49571816F
+:10042000001471E1000100154911F3000002891167
+:10043000E7826DEA0004E7836DEB000A771A000596
+:10044000F07203AA1181F2E88082E9FF19E100014C
+:10045000F1A0819211E1000CF2E88083E9FF19E13B
+:10046000000DF1A081936DE9000248184918700051
+:100470000015F0000004F300000A80018102F2740C
+:100480000E54F4954814EE108A11FC004A11F074D1
+:100490000C5E80F82A5C77122A3976820055771133
+:1004A0002A1810E1000180E2000110E1000280E260
+:1004B000000276E20003001CF6B856F82A16F0F0A7
+:1004C000F0F880E2000756F82A16F1F0E8FFF28013
+:1004D00080E2000656F82A16F1F8E8FFF28080E282
+:1004E000000557F82A16E8FFF28080E2000456F86B
+:1004F000276CF0F0F0F880E2000B56F8276CF1F072
+:10050000E8FFF28080E2000A56F8276CF1F8E8FF75
+:10051000F28080E20009E8FF57F8276CF28080E261
+:10052000000856F8276AF0F0F0F880E2000F56F85D
+:10053000276AF1F0E8FFF28080E2000E56F8276AA1
+:10054000F1F8E8FFF28080E2000D57F8276AE8FF33
+:10055000F28080E2000C76E20013000076E20012E6
+:1005600000006FF82A5C0C5880E20011E8FF18F8D0
+:100570002A5C80E2001076E20017000076E20016A6
+:1005800000006FF82A9E0C5880E20015E8FF18F86A
+:100590002A9E80E2001476E2001B000076E2001A38
+:1005A000000076E20019000070E20018276E76E283
+:1005B000001F000076E2001E000076E2001D000031
+:1005C00076E2001C000076E2002000AAF074029897
+:1005D0008A11FC004A11EEFE10F82A38F84504EDA5
+:1005E00077122A1810E200028811F495771000089B
+:1005F0006DE9FFDFF6A9F8200475F073047DF010B3
+:100600000021F0001A8348087EF80008F4E2F07434
+:10061000030AF07304EA4812F2740323F0000004A2
+:10062000F2740336F495E800F07304EA77112A189F
+:10063000E8FF6FE100040D4818E10005F274096954
+:10064000F495F2A0F0740336F07304EA77112A18D7
+:10065000E8FF6FE100040D4818E10005F27409415C
+:10066000F495F2A0F0740336F07304EAF0740357C3
+:10067000F07304EA10F82A1CF07412A4F274033622
+:10068000F495E800F07304EA4812F2740380F00075
+:100690000004F2740336F495E800F07304EA10F8ED
+:1006A0002A1CF07412C5F2740336F495E800F07356
+:1006B00004EA77112A18E8FF6FE100060D4818E1F7
+:1006C000000771E100050012F2A070000012800125
+:1006D00010E10004F0740E7AF2740336F495E80029
+:1006E000F07304EAF07403BC76F82A380000EE02D6
+:1006F0008A11FC004A1177112A3976810055771248
+:100700002A1810E2000180E1000110E2000280E1FD
+:10071000000276E1000300094811F000000488128D
+:10072000F49577132A86E900E598F3000001F6B8FE
+:10073000480B08F82A3CF843050A768200AAF074B0
+:1007400002988A11FC004A1177112A3976810055E6
+:1007500077132A1810E3000180E1000110E3000282
+:1007600080E1000213E3000381E1000348117711E7
+:100770000000F84D0544F000000488124813F00012
+:1007800000048813F495F495E5986D91F6B8481136
+:1007900008F82A3CF843053AF0202A394911F500B7
+:1007A0008911F495F49576E1000400AAF07402989A
+:1007B0008A11FC004A1177112A3976810055771287
+:1007C0002A1810E2000180E1000110E2000280E13D
+:1007D000000276E10003000C4811F00000048812CA
+:1007E000F49577132A7AE900E598F3000001F6B84A
+:1007F000480B08F82A3CF843056A768200AAF07490
+:1008000002988A11FC004A1177112A397681005525
+:1008100077122A1810E2000180E1000110E20002C4
+:1008200080E1000276E1000300194811F0000004A5
+:100830008812F49577132A5DE900E598F30000012A
+:10084000F6B8480B08F82A3CF8430593768200AACC
+:10085000F07402988A11FC004A11881110F82A38A5
+:10086000F84405E310F82AA1F84405BA6CE1FF56F4
+:1008700005E372122AA1F49570E22A1800116BF8B0
+:100880002AA10001F07305E372122AA1F49570E227
+:100890002A18001110F82AA1F00000018812F4951E
+:1008A000F4956EE2FFFC05D173122AA14811F00005
+:1008B000000580F82AA210F82AA108F82AA2F84414
+:1008C00005E36CE1FFAB05DD76F82A38000176F828
+:1008D0002AA1000076F82AA200008A11FC00F495F3
+:1008E0004A084A094A0A4A0B4A0C4A0D4A104A1158
+:1008F0004A124A134A144A154A164A174A174A19FD
+:100900004A0E4A064A074A1A4A1D4A1B4A1C68F8F8
+:1009100000077D3F69F80007400068F8001DFFFCF4
+:10092000481868F80018FFFEF495F4954A08EEFFA1
+:1009300010F82A5BF9801804F07405A2EE018A18F9
+:10094000F4958A1C8A1B8A1D8A1A8A078A068A0ECF
+:100950008A198A178A178A168A158A148A138A129C
+:100960008A118A108A0D8A0C8A0B8A0A8A098A08D7
+:10097000F4EBEEFD76F82A38000076F82A5A0000EB
+:10098000E8014E00FB8017D6F495E80180F82A5B59
+:1009900076002A8FF98016AA10F82A5BF980175C76
+:1009A00010F82A5BF980176FFB801666F495E81A39
+:1009B000FB801687F495E81AFB801666F495E81B11
+:1009C000FB801687F495E81BEE03FC004A11F495B2
+:1009D00013028811E800F84D066AF3100001891A25
+:1009E000F495F07206691C918A11FC004A11881175
+:1009F00012031102F8450679F0100001881AF495E7
+:100A0000F072067881918A11FC004A11F495710206
+:100A10000011110361F800110001F8300691F6B8D9
+:100A20006FF800110C1F8811F3E8E8FF1881F1A09E
+:100A30008181F073069DF6B86FF800110C1F8811C4
+:100A4000F33000FFF020FF001881F1A081818A11AE
+:100A5000FC004A11F495110261F8000B0001F82026
+:100A600006B1490BF61F8811F495F4951081F273C5
+:100A700006B8F03000FF490BF61F8811F495F49585
+:100A80001281F4788A11FC004A11F4957102001267
+:100A900013038811E800F84D06CCF3100001891A01
+:100AA000F495F07206CB1192F2C081918A11FC008C
+:100AB0008812120271010013F84506DBF0100001E4
+:100AC000881AF495F07206DAE598FC004A11EEFEF9
+:100AD0008811110410067105001261F8001200015E
+:100AE000F82006EAF0000001F6B8F00000016FF807
+:100AF00000120F1F48088100F47F8001F27406BACB
+:100B0000F4954811EE028A11FC004A11EEFE88129B
+:100B1000110410067105001361F800130001F8209C
+:100B20000709F0000001F00000018811F6B86FF825
+:100B300000130F1F81004811F47F8001F27406CE6C
+:100B4000F49548124811F030FFFEEE028A11FC00C5
+:100B50004A114A164A17EEFCF495800271080016F5
+:100B60001009710B00178003710A00114817F8452E
+:100B7000073F700000111003F074069F80017000A1
+:100B800000161002F074067B6D916D966CEFFFFFFE
+:100B9000072FEE048A178A168A11FC004A11EEFE0E
+:100BA00010F82AE808F82AE9F845076476000001F9
+:100BB00062F82AE9005EF274120BF0003040721104
+:100BC0002AE97710000FF5A9F82007616BF82AE9E8
+:100BD0000001F073076476F82AE90000EE028A113A
+:100BE000FC004A118811E80075F800080008E800C8
+:100BF00075F800080009F6B8F495F020FC3F75F888
+:100C00000008000DF0200C3075F80008000C76F894
+:100C10002AE8000076F82AE900006C81079276F84D
+:100C20002AEA0000FB801676F495E810E80075F8D3
+:100C300000080000F07307A876F82AEA0001FB809C
+:100C40001666F495E810FB801687F495E810E80026
+:100C500075F800080000F6B8F495F020FFFF75F86D
+:100C6000000800008A11FC00F4954A084A094A0A63
+:100C70004A064A074A1D68F800077D3F69F80007E1
+:100C8000400068F8001DFFFC10F82AEAF84507E16B
+:100C900010F82AE8F0000001F030000F80F82AE890
+:100CA00010F82AE8F84407D6F6B8F495F020FC3F8F
+:100CB00075F80008000DF0200C3075F80008000CE5
+:100CC000E80075F800080000F6B8F495F020FFFF82
+:100CD00075F8000800008A1D8A078A068A0A8A09B0
+:100CE0008A08F4EBEEFFF2740767F495E801EE0171
+:100CF000FC004A074A1D68F800077D3F69F80007B5
+:100D0000400068F8001DFFFC8A1D8A07F4EB4A11B9
+:100D10007711002876812400E80075F800080001AA
+:100D2000F2740767F495E8007711001D6881007F71
+:100D3000F6B8F495F020FF807711001DF030010027
+:100D40001A818081F0740A33F07411ACF980132594
+:100D5000F9801653F9801782F074062FF98014B2C7
+:100D6000F9801910F0740DE3F07407E8F07402369E
+:100D70008A11FC004A1160F8277BFFFFF830083920
+:100D800071F8277B277960F82779FFFFF83008B2E0
+:100D900010F8298608F82779F0307FFF8811F4953C
+:100DA00077104000F6A9F830085810F8277908F8AD
+:100DB000277AF0307FFF8811F49577104000F6A96C
+:100DC000F820086376F82779FFFF76F8277BFFFF86
+:100DD000F7B8F27308D9F020FFFFF6B856F8277479
+:100DE000F0F9881156F82772F0F98812F495F49505
+:100DF000E720F4A9F830088FF120277C4811F6008D
+:100E00008813F495F495108308F82779F0307FFF64
+:100E10008813F49577104000F5ABF830088F6D918A
+:100E20004811F03001FF8811F495E720F7A9F83058
+:100E300008746D894811F03001FFF0E7F495480817
+:100E40004EF827744808F1F98911F495F49571E189
+:100E5000277C277A60F8277BFFFFF83008AB48082B
+:100E60004EF8277276F8277BFFFF76F82779FFFF89
+:100E7000F27308D9F495E80044F8277340F8277511
+:100E800082F80011F49577108000F6A9F82008D8B0
+:100E9000F6B810F82773F000800048084EF8277461
+:100EA0004808F0F98811F495F49571E1277C277AC8
+:100EB000F7B857F82774F062FFFFF040FF80F28028
+:100EC0004EF82774E8008A11FC004A114A16EEFB1E
+:100ED00011F8277109F8277389118810F495F49592
+:100EE000F6A9F82008EDF273090EF495E800F62053
+:100EF00076000041F07412EE8816F495F7B86D96FE
+:100F000010F80016F847090AE7617600000076013C
+:100F10000080760200FF76030000F2740CB9F495AD
+:100F2000E8006CE9FFFF08FB7316000EF066004155
+:100F3000EE058A168A11FC004A11F495710200131D
+:100F4000F6B877117FFF57F827724811F280F0004A
+:100F500080008811F640F0E0F1F1E801F28080F8BD
+:100F600027787712800057F827724812F28088128B
+:100F7000F495F4956C820938E80075F800080001D2
+:100F8000F073093DF020800175F8000800017081C0
+:100F900000138A11FC004A11F0307FFF11F82986F6
+:100FA000F520F3307FFF8911F49577104000F6A902
+:100FB000F8200954F2730967F495E8026FF8277A6C
+:100FC0000D20F3307FFF8911F49577104000F6A9CA
+:100FD000F8200964F2730967F495E80180F8277B2B
+:100FE000E8008A11FC004A1111F82986F520F33037
+:100FF0007FFF8911F49577104000F6A9F820097A4F
+:10100000F273098DF495E8026FF8277A0D20F3301A
+:101010007FFF8911F49577104000F6A9F820098A1E
+:10102000F273098DF495E80180F82779E8008A11B8
+:10103000FC004A11F495710200128811F6B857F8B5
+:101040002772F0207FFFF280F0008000808157F847
+:101050002772E801F3F1F28080F827787711800099
+:10106000481157F82772F2808811F495F4956C8135
+:1010700009B5E80075F800080001F07309BAF0201E
+:10108000800175F80008000145F8277143F82773BF
+:1010900083F80011F495E720F6A9F83009C9F27336
+:1010A00009E47712000057F82772F0207FFFF280E2
+:1010B0004912F500F300800061F8000B8000F83061
+:1010C00009DCF1208000F5208912F49548126FF8B0
+:1010D00027730D00F495490B4FF827728A11FE0013
+:1010E0004812F4954A114A164A17EEFCF495710815
+:1010F00000168817F0740830481870000016F27453
+:10110000098FF00000028811F495F4956C810A0AA9
+:10111000F27408DBF4954816481870000016F27453
+:10112000098FF00000028811100270010011800088
+:10113000F27406CEF495481749114817F60088173F
+:10114000E760F5A9F8200A2D4816F62088114818FE
+:1011500070000011F274098FF00000028811700114
+:10116000001110028000F27406CEF4954817EE04C8
+:1011700048168A178A168A11FC00EEFDE8004EF820
+:101180002770E8004EF82772E8004EF82774E80050
+:101190004EF8277676F82779FFFF76F8277A000051
+:1011A00076F8277BFFFF76F827780000E80075F8CF
+:1011B000000800017600000076010200F27412DCE3
+:1011C000F020277CEE03FC004A11EEFCF4954E0063
+:1011D00077127FFFF6B84912F180F3008000891280
+:1011E000F0E0F1F14F02E901F495480BF5405602A9
+:1011F000F18081F827787711800056004911F1803D
+:101200008911F495F4956C810A81E80075F800085D
+:101210000001F0730A86F020800175F800080001D3
+:101220001082EE048A11FC004A11EEFEF4954E0085
+:1012300077117FFFF6B84911F180F3008000891122
+:10124000F0E0F1F1E801F28080F827785600F12013
+:101250008000F180F495490BF84D0AABF020800135
+:1012600075F800080001F0730AAFE80075F800088F
+:101270000001EE0248118A11FC004A118812130283
+:1012800077110000F84D0ACBF3100001891AF4958C
+:10129000F0720ACA48111CF8297E881111F8297EBB
+:1012A000F200000180F8297E819248118A11FC0029
+:1012B0004A11F495710200118812F6B8F0207FFFF0
+:1012C00057F82770F280F0008000808257F827706E
+:1012D000E801F3F1F28080F8277877128000481255
+:1012E00057F82770F2808812F495F4956C820AF40E
+:1012F000E80075F800080001F0730AF9F020800199
+:1013000075F80008000145F82775E71043F82771C4
+:1013100083F800126DE800046D8AF6AAF8300B0A13
+:10132000F2730B257711000057F82770F0207FFF2C
+:10133000F2804911F500F300800061F8000B800095
+:10134000F8300B1DF1208000F5208911F49548112B
+:101350006FF827710D00F495490B4FF8277048116D
+:101360008A11FC004A114A164A17EEF08817101726
+:1013700080051016800610158007711400111005E5
+:10138000F030000188101006F0300001800849118B
+:101390001005F6018009100661F800080001F82028
+:1013A0000B4B1009F0000001800971080012F4AA2B
+:1013B000F8300B541009F00000018009120949119E
+:1013C000F47F8009F620800A56F827704E0C100929
+:1013D00080004818F2740ACEF00000048816F495D4
+:1013E000F4956C860B6DF2730C59F495E800F6B821
+:1013F000F495560CF0F98812F495F49570E2277C78
+:101400002986E800800E4811F8450BCC77100001C2
+:10141000F4A9F8300B896CE1FFFD0B8B10E700029B
+:10142000800EF0730B8B1087800EE710F5AEF8205E
+:101430000BB270000017700100161004F07406CE95
+:1014400048174916F60088174811F6208811100928
+:10145000F62080004818F2740ACEF00000048816C6
+:1014600010047000001770010011F07406CE4811CE
+:1014700000048004F0730BBC7000001770010011B1
+:101480001004F07406CE4811000480044911481677
+:10149000F6208816F495F4956C860BCC100A800023
+:1014A0004818F2740ACEF00000048816120AF845B3
+:1014B0000C33710A0010F4AEF8300C1C4816F0E141
+:1014C00088111208F8450BDB6D891207F8450BE906
+:1014D0001007800070020011100680011004F074E3
+:1014E00006DCF0730BEF48116F000C9F1004F074D2
+:1014F0000AB3110EF1C0810E10064911F6008006E4
+:101500001005F6208811F000000148086F000C9FBC
+:101510004818F2740ACEF00000041207F8450C11C6
+:101520001007800070020011100680011004F07492
+:1015300006DCF0730C1748116F000C9F1004F07458
+:101540000AB3110EF1C0810EF0730C331207F84587
+:101550000C2A10078000100680011005800210047C
+:10156000F07406DCF0730C3012056F000C9F100451
+:10157000F0740AB3110EF1C0810E76000001481814
+:10158000F2740ACEF0000004710400117081298603
+:10159000100E1CF82986800E760000014818F2749F
+:1015A0000ACEF0000004100E71040011808110F8C2
+:1015B0002986F0000001F0307FFF80F829861009AD
+:1015C000F00000028009EE108A178A168A11FC00CA
+:1015D00010F8277508F82771F01000014808FC0082
+:1015E0004A114A16EEFFF49571040016F00000014E
+:1015F00048084EF8297C6DEEFFFD4816F8450C9919
+:1016000056F8297CF0740A5A881110F8297DF000E8
+:10161000000148084EF8297C10F82982F0000001EA
+:101620008810F495F495F4A9FA300C9680F8298284
+:1016300056F82980F00000014EF8298073112982A4
+:101640006CEEFFFF0C76EE018A168A11FC004A113F
+:1016500076F82984000076F829850001E8004EF824
+:101660002A0C76F82986000076F829870000771181
+:1016700029887681AAAA76E10001AAAA76E1000269
+:1016800000008A11FC004A11EEFCF495710600146A
+:10169000710700137108001271090015771000FF1F
+:1016A000F4AAF8300D44491353F82A0C4FF82A0CC9
+:1016B0007312000EF166000D8911F4957710000188
+:1016C00071E124000011F4A9F8300D177710000221
+:1016D000F4A9F8300CEC7711298A76810000E80033
+:1016E0007714000077130000F0730D486C830CFA38
+:1016F0007711298A4812F0E8F04080008081E800E4
+:1017000077140000F0730D484913F340800081F80E
+:10171000298A61F800150001F8200D0769F8298A67
+:10172000400061F800140001F8200D0F69F8298AC3
+:1017300020007711298A4912F3E81B818181F07317
+:101740000D4811F82984F84C0D37771129887681D6
+:10175000AAAA11F82985F3100001F340AA0081E13B
+:101760000001760000028001700200147003001373
+:10177000F2740B28F495481171F829852984F073C7
+:101780000D737600000080017602000070030013E4
+:10179000F2740B28F495E800F0730D737711298A21
+:1017A0007081001311F82984F84C0D68771129888D
+:1017B0007681AAAA11F82985F3100001F340AA0046
+:1017C00081E10001760000038001700200147003C3
+:1017D0000013F2740B28F495481171F829852984B7
+:1017E000F0730D7376000001800170020014700325
+:1017F0000013F2740B28F49548116BF82984FFFF4D
+:10180000EE048A11FC004A11F540F495480BF47877
+:101810008811F495F4956CE1FFB90D88F2730DA56C
+:10182000F495E860F200000661F800110020F8303D
+:101830000D9861F8000B0001F8200DA3F2000007DD
+:10184000F0730DA361F8000B0001F8200DA1F273F5
+:101850000DA3F0000001F00000024808F47F8A1197
+:10186000FC00EEFFF07407FDF0740744F0740DB453
+:10187000F0740205F0740460F0730DAAEEFD10F828
+:101880002AA3F8440DCB10F82AA4F8450DD776000A
+:101890000200F27409E8F020220076F82AA4000081
+:1018A00076F82AA70000F0730DD776000200F274D4
+:1018B00009E8F020200076F82AA3000076F82AA78D
+:1018C0000001F0740C5EF0E0F0103A98F8470DE17A
+:1018D00076F8276E0000EE03FC004A11EEFE771149
+:1018E00020007600AAAA76010200F274066CF49534
+:1018F000481176005555760102004811F274066CC5
+:10190000F000020076F82AA3000076F82AA400006E
+:10191000E8004E00FB80153EF495E80480F82AA507
+:1019200076002AA8F980148776002AADFB8013621E
+:10193000F495E80210F82AA5F9801463FB80166676
+:10194000F495E81CFB801687F495E81CE8014E002E
+:10195000FB8017D6F495E80080F82AA676002AB70F
+:10196000F98016AA10F82AA6F980175C10F82AA6A2
+:10197000F980176FEE028A11FC00F4954A084A09B3
+:101980004A0A4A074A1D68F800077D3F69F80007C0
+:10199000400068F8001DFFFC10F82AA7F8440E4B21
+:1019A00076F82AA30001F0730E4E76F82AA40001FF
+:1019B0008A1D8A078A0A8A098A08F4EB4A114A169C
+:1019C0004A17EEFE880E71080016710600171107FF
+:1019D000F066000DF00025A0881176010006810058
+:1019E000F27406CEF00000017601000670000016C9
+:1019F0004811F27406CEF000000770810017EE0265
+:101A00008A178A168A11FC004A11880E7102001288
+:101A10001103F066000DF00024008811F495708128
+:101A200000126EE2FFFE0E8DF495E800E80180E101
+:101A3000000276E1000300FF76E10004000076E199
+:101A4000000B000076E1000C000081E100018A112A
+:101A5000FC004A11EEFC880EF495F166000DF300CF
+:101A600024008911F495F49576E1000C000076E1EC
+:101A7000000B000076E10002000176000000760114
+:101A80000000800276030000F2740CB9F495E800BF
+:101A9000EE048A11FC004A118819F4957319000E9E
+:101AA000F166000DF2002400771525A077140000E0
+:101AB000771A001FF0720F14F6B849190985F84C0F
+:101AC0000F13F100000589114915F3000001891376
+:101AD0004915F3000007891211931D91199289107D
+:101AE000F495F4956C800F1311931D911992891040
+:101AF000F495F4956C800F1311931D911992891030
+:101B0000F495F4956C800F1311931D91199289101F
+:101B1000F495F4956C800F1311931D91199289100F
+:101B2000F495F4956C800F1311931D9119928911FE
+:101B3000F495F4956C810F136D946DED000D4814C0
+:101B40008A11FC004A114A164A17EEF88817100D40
+:101B50008004100C8005710E00167317000EF066DD
+:101B6000000DF0002400881110F82763F8450F32AB
+:101B7000F2740E9FF495481710F82760F8440F3D53
+:101B800060E100020001F8200F6DF07311331004C2
+:101B900080001005F074069F1104F3000001810419
+:101BA0006D8E7710000171E100020012F4AAF83086
+:101BB0000F6277100002F4AAF8300F6D45E1000BB8
+:101BC000881043E1000C83F80012F495F495F4AA10
+:101BD000F8300F6DF0730F96F50081044916F5206B
+:101BE000891676E1000C000076E10004000048163A
+:101BF000F8451133F7B871E10002001210F8001235
+:101C0000F0100003F8460F8C10F80012F0100003DB
+:101C1000F845101677100001F4AAF8300F9C7710E1
+:101C20000002F4AAF8300FA8F0730F9677100004A2
+:101C3000F4AAF83010B777100005F4AAF83010BCF9
+:101C4000F2740E9FF4954817F073113176E1000C91
+:101C5000000076E1000B000076E10004000076E170
+:101C60000002000211E1000CE803F6208912F4954D
+:101C700077100003F5AAF8300FB66BF8276F000154
+:101C80008810F495F495F5AEF8200FBD481680063F
+:101C90008813F49577100003F6ABF8200FC86BF8A3
+:101CA000276F00011206F845100010E100048000C3
+:101CB0001005800110048002100680034811F274A0
+:101CC000071EF0000005100600E1000480E100049A
+:101CD000100600E1000C80E1000C881211061004CF
+:101CE000F60080044816F62088168913F4957710BC
+:101CF0000003F6ABF8200FF56BF8276F00017710A3
+:101D0000000C71E100040013F6ABF82010006BF832
+:101D1000276F00016CE2FFFD1131F6B86FE100059D
+:101D20000C486FE100060C18F0300FFFF0000003C4
+:101D300080E1000B76E1000200034816F8451133FC
+:101D400071E1000C001210E1000B4912F62088131B
+:101D5000E80CF6208810F495F495F5ABF8201027E0
+:101D6000481380068810F495F495F5AEF8201030ED
+:101D7000700600161206F845105F10E1000480009E
+:101D80001005800110048002100680034811F274CF
+:101D9000071EF0000005100600E1000480E10004C9
+:101DA000100600E1000C80E1000C881211061004FE
+:101DB000F60080044816F6208816F4957710000C7B
+:101DC00071E100040013F6ABF820105F6BF8276F89
+:101DD00000017710000CF6AAF820106BF2740E9F29
+:101DE000F495481771E1000C00127710000CF4AA6A
+:101DF000F830107C7710000C71E1000B0013F6AB8B
+:101E0000F83010B4E730F7AAF83010B4F2740EC10D
+:101E1000F49548178812F495F4956C82108D76E14C
+:101E20000004000076E100020005F07310B476E1D2
+:101E3000000200047710000C71E1000B0012F5AAFB
+:101E4000F820109AF073109C7712000C76000000B6
+:101E50007001001270020017760300014811F2743D
+:101E60000CB9F000000576E1000400007710000CCA
+:101E700071E1000B0012F6AAF820111C4816F84573
+:101E8000113360E100020005F82010DF10E1000BC3
+:101E900008E1000C11E10004F84D10C76BF8276F42
+:101EA00000018810F495F495F5AEF82010CF48168F
+:101EB000F4954808F84511166FE1000C0D0081E11A
+:101EC000000C1104F50081044916F5208916F07301
+:101ED000110E10E1000B71E1000C00128810F49556
+:101EE000F495F6AAF83011164912F6208810F495E8
+:101EF000F495F5AEF82010F3481680064808F8452A
+:101F000011161004700200178000760300001006FE
+:101F100080011005F0740CB9100600E1000C80E19E
+:101F2000000C11061004F60080044816F6208816EE
+:101F300010E1000C08E1000BF845111CF0731131A1
+:101F4000F2740E9FF4954817F073113376E1000C8C
+:101F5000000076E1000B000076E1000200011004B1
+:101F600080001005F074069F8812F495771000FF2A
+:101F7000F4AAF83011336C860F70EE088A178A16AF
+:101F80008A11FC004A11EEFCF495710600128811CA
+:101F90007312000EF166000DF30024008914138102
+:101FA000F77AF330000181F8276013E10001F77C34
+:101FB000F330000381F82761E90F19E1000181F88E
+:101FC000276271E400030013F6B84913F30000011F
+:101FD000F330000F490B09F82762F84D117577109F
+:101FE00000FFF4ABF830117557F8276CF3000001CF
+:101FF0004FF8276C76F827630001F073117876F8B4
+:102000002763000070E40003276276F8276400006D
+:1020100011F8276161F8000B0002F820118DE90129
+:102020006FE100020F1881F8276411F8276161F849
+:10203000000B0001F82011A910F82764F10000043A
+:102040008913E9B8F52081F8276560840002F8203B
+:1020500011A9700000117001001370022765F2745D
+:102060000F18F4954812EE048A11FC004A114A1622
+:102070004A17EEFCE8004EF82766E8004EF827689D
+:10208000E8004EF8276CE8004EF8276A77122740E0
+:1020900077112400771A001FF07211DB7092001183
+:1020A00076E10001FFFF7681000076E1000200008A
+:1020B00076E1000300FF76E1000C000076E1000B02
+:1020C000000076E1000400006DE9000DF02025A07D
+:1020D000F10000078911F100000181028816F495D2
+:1020E00077170020768600FF760000007601000654
+:1020F0001002F074066C7600000076010006F2749F
+:10210000066CF49548111002F000000D80026DE994
+:10211000000D6DEE000D6CEFFFFF11E8F0740C9DEB
+:10212000EE048A178A168A11FC004A114A164A17C9
+:10213000EEFA8811100A4911F84D129F4808F84527
+:10214000129F80041281F5788912F495F4956CE25F
+:10215000FFB9128A61F800080080F830128A13E192
+:102160000001F0E8F778F1A0F2301FFF8817F4952E
+:10217000771224007716000077130020F6B848176E
+:1021800008E20001F84512426DEA000D6D966CEB15
+:10219000FFFF1234F073129056F8276AF000000126
+:1021A0004EF8276A60820001F83012547000001661
+:1021B000F2741138F4954811F07312907000001603
+:1021C000F2741138F495481172102A9EF495F4AF08
+:1021D000F830126E76000000760100BC7002001626
+:1021E00076030000F2740CB9F4954811F073129064
+:1021F00010F8276EF844129076000000760100BCBB
+:102200007002001676030000F2740CB9F4954811C0
+:10221000F0740C5EF0E0F0101388F842129076F83B
+:10222000276E0001F073129056F82766F000000147
+:102230004EF827666DE9005E56F82768F000000149
+:102240004EF82768710400126EEAFFFF121870043E
+:102250000012EE068A178A168A11FC004A11EEFE59
+:10226000880EF495F066000DF00025A08811F49515
+:10227000F495768100FF7600000076010006F27486
+:10228000066CF0000001760000007601000648119F
+:10229000F274066CF0000007EE028A11FC004A118D
+:1022A000880EF495F066000DF00024008811F49576
+:1022B000F49576E10001FFFF7681000076E10002EF
+:1022C000000076E1000300FF8A11FC004A11F4953A
+:1022D00013038811FA4D12EC71020012F310000181
+:1022E000891AF495F07212EB709100128A11FC00B9
+:1022F000F4954A0B4A0C4A0DF7B8EEFE10F80008A8
+:102300001106F1C08300F4851106F7858106F6B841
+:10231000EC0F1E0661008000F8201305F484EE0225
+:102320008A0D8A0C8A0BFC00F4954A0B4A0C4A0D64
+:10233000EEFEF7B8800010F80008F4851106F78566
+:102340008106F6B8EC0F1E06F0F061008000F82060
+:102350001320F484EE028A0D8A0C8A0BFC004A11C9
+:102360007711007B76812EEC7711007BEEFF718177
+:102370000011EE0176E10001000076E100040000AA
+:1023800076E10006000076E10062000076E100766A
+:10239000000076E10092000076E10094000076E112
+:1023A00000B0000076E100B3000076E100BE00005E
+:1023B00076E100BF000076E100C1000076E100C3D5
+:1023C000000076E100C5000076E100C700007681DC
+:1023D00000008A11F495F4E44A114A164A17EEFFF8
+:1023E000F49571060016FB8016A28817F495F7B8CD
+:1023F00010F80017F0100002FA4613887711000059
+:1024000010F80017F0100002F84513F910F8001743
+:10241000F845143910F80017F0100001F845141FA2
+:10242000F073145210F80017F0100003F84513D39E
+:1024300010F80017F0100006F84414527712007BD1
+:102440007182001461E400070040F830145249140E
+:102450004817F6008812F495771300557711005746
+:102460006DEA003BE50110E600068081481400F8A3
+:1024700000178812F4957711005510E20040808112
+:102480007711005710E6000780817711005510E2A0
+:102490000045808110E60008771100578081771190
+:1024A000005510E2004A80817711005710E60009BC
+:1024B0008081F2731452771103C07712007B10826F
+:1024C000F00000078813F495F495961BF830145229
+:1024D00010E300357712005580827712005710E61E
+:1024E000000480827712005510E300378082771253
+:1024F000005710E6000580824811F0400010F2738A
+:102500001450F04000207712007B1082F00000078A
+:102510008812F495F495960DF830145210E20034B8
+:102520007713005580837713005710E600028083ED
+:1025300010E200367712005580827712005710E6BD
+:10254000000380824811F0400004F2731450F04000
+:1025500000087712007B1082F00000078812F495C3
+:10256000F495960EF830145210E2003377120055AD
+:1025700080827712005710E6000180824811F273C2
+:102580001450F04000027712007B1082F000000728
+:102590008812F495F495960FF830145210E2003238
+:1025A000771200557713005780824811E762F04098
+:1025B0000001E5018811F4957712007B48117182C2
+:1025C00000121AE2000780E20007F980169AEE0175
+:1025D0008A1748118A168A11F4E44A118811770E75
+:1025E000000577120055E804F6B828E10002EEFF76
+:1025F000808277120057F0208000EE011A82771255
+:1026000000578082E80132E10002F5827711005420
+:10261000F693188177110054F2A080818A11F49505
+:10262000F4E44A114A16F49571040011FB8016A2D5
+:102630008816F4957712005510E600038082771211
+:10264000005610E100027713005680827712005680
+:1026500010E10003808210E10004771200568082AE
+:102660007712005610E100018082E712E501F9803F
+:10267000169A8A168A11F4E44A114A164A17EEF994
+:102680007711007B76000016760100177602001A9B
+:102690007603001B7604001C7605001D718100176F
+:1026A00071E7000600111081F84414DFF980165319
+:1026B000F6B8FB801585F020FFFFF6B8FB80160802
+:1026C000F020FFFF7711007B7181001776E700068D
+:1026D00000014817771600007710000477150003F3
+:1026E0007714000277130001F000003976E7000844
+:1026F000001F76E700070000880E771A00054817CC
+:10270000F0000009881248188819E800F072152CAA
+:10271000731900117682000011917311001970E293
+:102720000003001670E20004001370E200050014BC
+:1027300081E2000170E20006001570E2000700105F
+:1027400080E20002730E0011F100001E6DEE000524
+:102750006DEB00056DEC00056DED00056DE8000505
+:10276000F000000181916DEA00087311000EEE0780
+:1027700076E70041002476E70046002576E7004B27
+:10278000002676E7005000278A178A168A11F4E49B
+:102790004A114A16EEFE881156064E00F98016A21E
+:1027A000F7B810F80011F010FFFFFA451560771622
+:1027B000FFFF7712007B49111082F603F000000939
+:1027C0008811F495F4951081F8441571F273157120
+:1027D000F495E7167711007B1081F000000988114D
+:1027E000F495771200061081F845155C6EEAFFFF3C
+:1027F00015696DE9000876860001E9015600F1804F
+:1028000010F8000BF845157EFB801585F4954816E9
+:10281000F980169AEE0248168A168A11F4E44A11D3
+:10282000EEFFFB8016A28811F4957710FFFFF4A944
+:10283000F83015C410E1000377120055808277123A
+:1028400000567682000077120056768200007712DA
+:1028500000567682000077120056768200007712CA
+:1028600000567682000010E10002F000000832F805
+:10287000000877120054E801F482F493188277126A
+:102880000054F0400000808210E10001F9801676CB
+:1028900010E10001F9801666F07316037711007BD2
+:1028A0007181001171E1000700127682000010E1D1
+:1028B0000009F98015857711007B7181001110E105
+:1028C0000009FB801585F00000087711007B7181FD
+:1028D000001110E10009FB801585F0000010771150
+:1028E000007B7181001110E10009FB801585F0006B
+:1028F00000187711007B7181001110E10009FB8045
+:102900001585F00000207711007B7181001110E126
+:102910000009FB801585F0000028F980169AEE0169
+:102920008A11F4E44A11EEFFFB8016A28811F49597
+:102930007710FFFFF4A9F830164177110055768122
+:10294000001E7711005676810000771100567681BF
+:1029500000007711005676810000771100567681CD
+:1029600000007711005676810000771100567681BD
+:1029700000007711005676810000771100567681AD
+:102980000000771100567681000077110056F2732F
+:10299000164E768100007711007B7181001171E184
+:1029A000000700127682000010E10039F980160855
+:1029B000F980169AEE018A11F4E44A117711007B2E
+:1029C0001081F00000048811F495F4951081FA4408
+:1029D0001663F495EEFF76810001EE018A11F4E4AE
+:1029E000F01000104A1132F80008EEFF77110001D4
+:1029F000E801EE01F4821A8180818A11F495F4E4F1
+:102A0000F01000104A1132F80008EEFFE8017711CB
+:102A10000000F482EE01F493188180818A11F4950C
+:102A2000F4E44A11F01000107711000032F80008A9
+:102A3000EEFF1181E801EE0177110000F482F2A0AF
+:102A400080818A11F495F4E4F273169EF6BBF49536
+:102A5000F495F495F495F4E4F27316A6F7BBF495A7
+:102A6000F495F495F495F4E44A114A16F49571043A
+:102A70000016FB8016A28811F49571E10005001282
+:102A80007682000E10E6000E71E1000600128082D0
+:102A900071E1000500127682000D71E1000600125E
+:102AA00010E6000D808271E1000500127682000CB4
+:102AB00010E6000C71E100060012808271E1000551
+:102AC00000127682000B10E6000B71E10006001286
+:102AD000808271E1000500127682000A71E1000631
+:102AE000001210E6000A808271E100050012768271
+:102AF000000910E6000971E100060012808271E110
+:102B0000000500127682000871E10006001210E64E
+:102B10000008808271E1000500127682000710E64D
+:102B2000000771E100060012808271E100050012C9
+:102B30007682000671E10006001210E6000680822F
+:102B400071E1000500127682000571E100060012B5
+:102B500010E60005808271E1000500127682000413
+:102B600071E10006001210E60004808271E10005A8
+:102B700000127682000371E10006001210E60003E5
+:102B8000808271E1000500127682000210E60002E8
+:102B900071E100060012808271E100050012768268
+:102BA000000110E6000171E100060012808271E16F
+:102BB000000500127682000071E100060013E76252
+:102BC000E501F980169A8A168A11F4E44A118811EF
+:102BD000F495F49571E100050012EEFF7682000095
+:102BE000EE0171E100060011698100018A11F4957E
+:102BF000F4E44A118811F495F49571E1000500128E
+:102C0000EEFF76820001EE0171E10006001169819C
+:102C100000018A11F495F4E44A117711007B1081C8
+:102C2000F00000948811F495F4951081FA44179CF3
+:102C3000F495EEFFF98016537711007B1081F000B8
+:102C400000948811F495F49576810001EE0176E107
+:102C50000001000076E10002002176E1000300207F
+:102C600076E10004002376E10005002276E100060B
+:102C7000003876E10007003976E10008001576E1BA
+:102C80000009001476E1000A000076E1000B004123
+:102C900076E1000C004076E1000D004376E1000E85
+:102CA000004276E1000F004876E10010004976E12D
+:102CB0000011001B76E10012001A8A11F495F4E469
+:102CC0004A11EEFD881156064E00F98016A27712C1
+:102CD000007B770E0009108228F80011F0000095A3
+:102CE0008811F495F4951081F84517F0F27317FDEB
+:102CF0007711FFFF76810001E9015600F18010F89D
+:102D0000000BF84517FDFB801810F4954811F98069
+:102D1000169AEE0348118A11F495F4E44A118811C9
+:102D2000F495EEFF71E100010011EE0110818A11AE
+:102D3000F495F4E44A11EEFFFB8016A28811F49595
+:102D40007710FFFFF4A9F83018C371E100050012F5
+:102D50007682000071E1000600127682000071E1C7
+:102D6000000500127682000171E1000600127682F1
+:102D7000000071E1000500127682000271E1000698
+:102D800000127682000071E10005001276820003D5
+:102D900071E1000600127682000071E10005001268
+:102DA0007682000471E1000600127682000071E173
+:102DB000000500127682000571E10006001276829D
+:102DC000000071E1000500127682000671E1000644
+:102DD00000127682000171E1000500127682000780
+:102DE00071E1000600127682200071E100050012F8
+:102DF0007682000871E1000600127682000071E11F
+:102E0000000500127682000971E100060012768248
+:102E1000000071E1000500127682000A71E10006EF
+:102E200000127682000071E1000500127682000B2C
+:102E300071E1000600127682000071E100050012C7
+:102E40007682000C71E1000600127682000071E1CA
+:102E5000000500127682000D71E1000600127682F4
+:102E6000000071E1000500127682000E71E100069B
+:102E700000127682000010E10007F980167610E15A
+:102E80000008F980167610E10007F980166610E157
+:102E90000008F9801666F07318D17711007B108155
+:102EA000FB801810F00000957711007B1081FB80EB
+:102EB0001810F000009EF980169AEE018A11F4E4D1
+:102EC0004A118811EEFFF495100471E1000300111E
+:102ED000EE0180818A11F495F4E44A114A16F495C2
+:102EE00071040016FB8016A28811F49571E10002AE
+:102EF00000127682001010E6000171E1000300125A
+:102F0000808271E10004001210E600028082E76214
+:102F100071E100020013E501F980169A8A168A1100
+:102F2000F4E44A118811EEFFEE0110E100018A116C
+:102F3000F495F4E44A117711007B1081F00000B39E
+:102F40008811F495F4951081FA44192AF495EEFF4E
+:102F5000F98016537711007B1081F00000B38811BF
+:102F6000F495F49576810001EE0176E10001000010
+:102F700076E10002001376E10003002676E100040A
+:102F8000002576E10005002476E10006000076E1E8
+:102F90000007001776E10008003276E100090031F1
+:102FA00076E1000A00308A11F495F4E44A114A16D9
+:102FB0004A17EEFFF49571060017FB8016A28811E0
+:102FC000F495F7B810F80011F010FFFFFA451973E7
+:102FD0007716FFFF7712007B770E0005108228F826
+:102FE0000011F00000B48811F495F4951081F844B4
+:102FF0001984F2731984F495E7167711007B108118
+:10300000F00000B48811F495771200021081F845A1
+:10301000196F6EEAFFFF197C6DE9000561F8001772
+:103020000001FA20198F76860001FB801997F4952C
+:103030004816F980169AEE018A1748168A168A11E0
+:10304000F4E44A11EEFFFB8016A28811F495771084
+:10305000FFFFF4A9F83019CC71E100020012698277
+:10306000001071E1000200126882F7FF71E10002B6
+:1030700000126882FBFF71E1000200126882FFF01B
+:1030800071E1000300127682FFFF71E1000400127B
+:103090007682FFFF71E1000200126982002071E177
+:1030A00000020011F27319DA6881FFEF7711007BDB
+:1030B0001081FB801997F00000B47711007B10811C
+:1030C000FB801997F00000B9F980169AEE018A1179
+:1030D000F4E400A4000019DF00012AE6000000016A
+:1030E0002AE7000000032A120C01C34F0000000170
+:1030F0002A15000000022A160000000000192A5DAF
+:103100000043006F0070007900720069006700687A
+:10311000007400200054006500630068006E006FBA
+:10312000005400720065006E0064002000410047FA
+:10313000000000042A760030002E00300000000C51
+:103140002A7A004600650062002000320037002025
+:103150000032003000300031000000092A860031C2
+:103160000034003A00330035003A003300330000E9
+:10317000000F2A8F00000000000000010000000185
+:10318000000000000000000000000000000000003F
+:10319000000000012A9E000000012A9F000000019B
+:1031A0002AA0000000012AA1000000012AA20000BC
+:1031B0000001297E000000022980000000000001BB
+:1031C0002982FFFF00012AA7000000052AA87141FB
+:1031D0002000200000230400000A2AAD00000000A7
+:1031E00000000000000000000000000000000000DF
+:1031F000000F2AB7000000000000004000A082403D
+:103200000008307F00800180000000000000000006
+:1032100000000001276E00000001276F0000000081
+:10322000000900001A8304E804CF04C504BA04B0FE
+:1032300004AC049C048C0481007800000100F2734B
+:1032400007EFF495F495F27307EFF495F495F273A4
+:1032500007EFF495F495F27307EFF495F495F27394
+:1032600007EFF495F495F27307EFF495F495F27384
+:1032700007EFF495F495F27307EFF495F495F27374
+:1032800007EFF495F495F27307EFF495F495F27364
+:1032900007EFF495F495F27307EFF495F495F27354
+:1032A00007EFF495F495F27307EFF495F495F27344
+:1032B00007EFF495F495F27307EFF495F495F27334
+:1032C00007AAF495F495F27307EFF495F495F27369
+:1032D00007EFF495F495F2730223F495F495F273E5
+:1032E00007EFF495F495F27307EFF495F495F27304
+:1032F00007EFF495F495F27307EFF495F495F273F4
+:1033000007EFF495F495F27307EFF495F495F273E3
+:1033100005E5F495F495F27302B5F495F495F2731E
+:103320000E33F495F495F27307EFF495F4950000DD
+:00000001FF
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCH] keyspan: use request_firmware()
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (32 preceding siblings ...)
2008-05-29 17:49 ` [PATCH] ttusb-budget: " David Woodhouse
@ 2008-05-30 11:45 ` David Woodhouse
2008-05-30 13:54 ` Hugh Blemings
2008-05-30 12:19 ` [PATCH] keyspan_pda: " David Woodhouse
34 siblings, 1 reply; 72+ messages in thread
From: David Woodhouse @ 2008-05-30 11:45 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, hugh, greg
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index 3df8a66..4a28d91 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -105,6 +105,8 @@
#include <linux/tty_flip.h>
#include <linux/module.h>
#include <linux/spinlock.h>
+#include <linux/firmware.h>
+#include <linux/ihex.h>
#include <asm/uaccess.h>
#include <linux/usb.h>
#include <linux/usb/serial.h>
@@ -1339,13 +1341,13 @@ static void keyspan_close(struct usb_serial_port *port, struct file *filp)
port->tty = NULL;
}
-
/* download the firmware to a pre-renumeration device */
static int keyspan_fake_startup (struct usb_serial *serial)
{
int response;
- const struct ezusb_hex_record *record;
+ const struct ihex_binrec *record;
char *fw_name;
+ const struct firmware *fw;
dbg("Keyspan startup version %04x product %04x",
le16_to_cpu(serial->dev->descriptor.bcdDevice),
@@ -1359,72 +1361,60 @@ static int keyspan_fake_startup (struct usb_serial *serial)
/* Select firmware image on the basis of idProduct */
switch (le16_to_cpu(serial->dev->descriptor.idProduct)) {
case keyspan_usa28_pre_product_id:
- record = &keyspan_usa28_firmware[0];
- fw_name = "USA28";
+ fw_name = "keyspan/usa28.fw";
break;
case keyspan_usa28x_pre_product_id:
- record = &keyspan_usa28x_firmware[0];
- fw_name = "USA28X";
+ fw_name = "keyspan/usa28x.fw";
break;
case keyspan_usa28xa_pre_product_id:
- record = &keyspan_usa28xa_firmware[0];
- fw_name = "USA28XA";
+ fw_name = "keyspan/usa28xa.fw";
break;
case keyspan_usa28xb_pre_product_id:
- record = &keyspan_usa28xb_firmware[0];
- fw_name = "USA28XB";
+ fw_name = "keyspan/usa28xb.fw";
break;
case keyspan_usa19_pre_product_id:
- record = &keyspan_usa19_firmware[0];
- fw_name = "USA19";
+ fw_name = "keyspan/usa19.fw";
break;
case keyspan_usa19qi_pre_product_id:
- record = &keyspan_usa19qi_firmware[0];
- fw_name = "USA19QI";
+ fw_name = "keyspan/usa19qi.fw";
break;
case keyspan_mpr_pre_product_id:
- record = &keyspan_mpr_firmware[0];
- fw_name = "MPR";
+ fw_name = "keyspan/mpr.fw";
break;
case keyspan_usa19qw_pre_product_id:
- record = &keyspan_usa19qw_firmware[0];
- fw_name = "USA19QI";
+ fw_name = "keyspan/usa19qw.fw";
break;
case keyspan_usa18x_pre_product_id:
- record = &keyspan_usa18x_firmware[0];
- fw_name = "USA18X";
+ fw_name = "keyspan/usa18x.fw";
break;
case keyspan_usa19w_pre_product_id:
- record = &keyspan_usa19w_firmware[0];
- fw_name = "USA19W";
+ fw_name = "keyspan/usa19w.fw";
break;
case keyspan_usa49w_pre_product_id:
- record = &keyspan_usa49w_firmware[0];
- fw_name = "USA49W";
+ fw_name = "keyspan/usa49w.fw";
break;
case keyspan_usa49wlc_pre_product_id:
- record = &keyspan_usa49wlc_firmware[0];
- fw_name = "USA49WLC";
+ fw_name = "keyspan/usa49wlc.fw";
break;
default:
- record = NULL;
- fw_name = "Unknown";
- break;
+ dev_err(&serial->dev->dev, "Unknown product ID (%04x)\n",
+ le16_to_cpu(serial->dev->descriptor.idProduct));
+ return 1;
}
- if (record == NULL) {
+ if (request_firmware(&fw, fw_name, &serial->dev->dev)) {
dev_err(&serial->dev->dev, "Required keyspan firmware image (%s) unavailable.\n", fw_name);
return(1);
}
@@ -1434,19 +1424,22 @@ static int keyspan_fake_startup (struct usb_serial *serial)
/* download the firmware image */
response = ezusb_set_reset(serial, 1);
- while(record->address != 0xffff) {
- response = ezusb_writememory(serial, record->address,
+ record = (const struct ihex_binrec *)fw->data;
+
+ while (record) {
+ response = ezusb_writememory(serial, be32_to_cpu(record->addr),
(unsigned char *)record->data,
- record->data_size, 0xa0);
+ record->len, 0xa0);
if (response < 0) {
dev_err(&serial->dev->dev, "ezusb_writememory failed for Keyspan"
"firmware (%d %04X %p %d)\n",
- response,
- record->address, record->data, record->data_size);
+ response, be32_to_cpu(record->addr),
+ record->data, record->len);
break;
}
- record++;
+ record = ihex_next_binrec(record);
}
+ release_firmware(fw);
/* bring device out of reset. Renumeration will occur in a
moment and the new device will bind to the real driver */
response = ezusb_set_reset(serial, 0);
@@ -2756,6 +2749,19 @@ MODULE_AUTHOR( DRIVER_AUTHOR );
MODULE_DESCRIPTION( DRIVER_DESC );
MODULE_LICENSE("GPL");
+MODULE_FIRMWARE("keyspan/usa28.fw");
+MODULE_FIRMWARE("keyspan/usa28x.fw");
+MODULE_FIRMWARE("keyspan/usa28xa.fw");
+MODULE_FIRMWARE("keyspan/usa28xb.fw");
+MODULE_FIRMWARE("keyspan/usa19.fw");
+MODULE_FIRMWARE("keyspan/usa19qi.fw");
+MODULE_FIRMWARE("keyspan/mpr.fw");
+MODULE_FIRMWARE("keyspan/usa19qw.fw");
+MODULE_FIRMWARE("keyspan/usa18x.fw");
+MODULE_FIRMWARE("keyspan/usa19w.fw");
+MODULE_FIRMWARE("keyspan/usa49w.fw");
+MODULE_FIRMWARE("keyspan/usa49wlc.fw");
+
module_param(debug, bool, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(debug, "Debug enabled or not");
diff --git a/drivers/usb/serial/keyspan.h b/drivers/usb/serial/keyspan.h
index 8d6ed02..b52fb65 100644
--- a/drivers/usb/serial/keyspan.h
+++ b/drivers/usb/serial/keyspan.h
@@ -103,90 +103,6 @@ static int keyspan_usa67_send_setup (struct usb_serial *serial,
struct usb_serial_port *port,
int reset_port);
-/* Struct used for firmware - increased size of data section
- to allow Keyspan's 'C' firmware struct to be used unmodified */
-struct ezusb_hex_record {
- __u16 address;
- __u8 data_size;
- __u8 data[64];
-};
-
-/* Conditionally include firmware images, if they aren't
- included create a null pointer instead. Current
- firmware images aren't optimised to remove duplicate
- addresses in the image itself. */
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA28
- #include "keyspan_usa28_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa28_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA28X
- #include "keyspan_usa28x_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa28x_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA28XA
- #include "keyspan_usa28xa_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa28xa_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA28XB
- #include "keyspan_usa28xb_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa28xb_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA19
- #include "keyspan_usa19_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa19_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA19QI
- #include "keyspan_usa19qi_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa19qi_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_MPR
- #include "keyspan_mpr_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_mpr_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA19QW
- #include "keyspan_usa19qw_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa19qw_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA18X
- #include "keyspan_usa18x_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa18x_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA19W
- #include "keyspan_usa19w_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa19w_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA49W
- #include "keyspan_usa49w_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa49w_firmware = NULL;
-#endif
-
-#ifdef CONFIG_USB_SERIAL_KEYSPAN_USA49WLC
- #include "keyspan_usa49wlc_fw.h"
-#else
- static const struct ezusb_hex_record *keyspan_usa49wlc_firmware = NULL;
-#endif
-
/* Values used for baud rate calculation - device specific */
#define KEYSPAN_INVALID_BAUD_RATE (-1)
#define KEYSPAN_BAUD_RATE_OK (0)
diff --git a/firmware/Makefile b/firmware/Makefile
index 30b6ef4..eb3b992 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -18,6 +18,18 @@ fw-shipped-$(CONFIG_USB_KAWETH_FIRMWARE) += kaweth/new_code.bin \
kaweth/new_code_fix.bin kaweth/trigger_code.bin \
kaweth/trigger_code_fix.bin
fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET_FIRMWARE) += ttusb-budget-dspbootcode.bin
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_MPR) += keyspan/mpr.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA18X) += keyspan/usa18x.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19) += keyspan/usa19.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19QI) += keyspan/usa19qi.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19QW) += keyspan/usa19qw.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19W) += keyspan/usa19w.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28) += keyspan/usa28.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XA) += keyspan/usa28xa.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XB) += keyspan/usa28xb.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28X) += keyspan/usa28x.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49W) += keyspan/usa49w.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49WLC) += keyspan/usa49wlc.fw
firmware-y := $(fw-external-y) $(fw-shipped-y)
firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
diff --git a/include/linux/ihex.h b/include/linux/ihex.h
new file mode 100644
index 0000000..902222f
--- /dev/null
+++ b/include/linux/ihex.h
@@ -0,0 +1,28 @@
+/*
+ * Compact binary representation of ihex records. Some devices need their
+ * firmware loaded in strange orders rather than a single big blob, but
+ * actually parsing ihex-as-text within the kernel seems silly. Thus,...
+ */
+
+#ifndef __LINUX_IHEX_H__
+#define __LINUX_IHEX_H__
+
+#include <linux/types.h>
+
+struct ihex_binrec {
+ __be32 addr;
+ uint8_t len;
+ uint8_t data[0];
+} __attribute__((aligned(4)));
+
+/* Find the next record, taking into account the 4-byte alignment */
+static inline const struct ihex_binrec *
+ihex_next_binrec(const struct ihex_binrec *rec)
+{
+ int next = ((rec->len + 4) & ~3) - 1;
+ rec = (void *)&rec->data[next];
+
+ return rec->len ? rec : NULL;
+}
+
+#endif /* __LINUX_IHEX_H__ */
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread* [PATCH] keyspan_pda: use request_firmware()
2008-05-25 10:23 [PATCHv2 00/28] Allow built-in firmware to be accessed by request_firmware() David Woodhouse
` (33 preceding siblings ...)
2008-05-30 11:45 ` [PATCH] keyspan: " David Woodhouse
@ 2008-05-30 12:19 ` David Woodhouse
34 siblings, 0 replies; 72+ messages in thread
From: David Woodhouse @ 2008-05-30 12:19 UTC (permalink / raw)
To: linux-kernel; +Cc: sam, alan, akpm, Brian Warner, greg
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
---
drivers/usb/serial/Kconfig | 17 ++++
drivers/usb/serial/keyspan_pda.c | 51 ++++++------
drivers/usb/serial/keyspan_pda_fw.h | 99 -----------------------
drivers/usb/serial/xircom_pgs_fw.h | 103 ------------------------
firmware/Makefile | 2 +
firmware/keyspan_pda/keyspan_pda.fw.ihex | 121 ++++++++++++++++++++++++++++
firmware/keyspan_pda/xircom_pgs.fw.ihex | 127 ++++++++++++++++++++++++++++++
7 files changed, 291 insertions(+), 229 deletions(-)
delete mode 100644 drivers/usb/serial/keyspan_pda_fw.h
delete mode 100644 drivers/usb/serial/xircom_pgs_fw.h
create mode 100644 firmware/keyspan_pda/keyspan_pda.fw.ihex
create mode 100644 firmware/keyspan_pda/xircom_pgs.fw.ihex
diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
index 31f9cc3..c354203 100644
--- a/drivers/usb/serial/Kconfig
+++ b/drivers/usb/serial/Kconfig
@@ -279,6 +279,7 @@ config USB_SERIAL_IUU
config USB_SERIAL_KEYSPAN_PDA
tristate "USB Keyspan PDA Single Port Serial Driver"
+ select FW_LOADER
select USB_EZUSB
help
Say Y here if you want to use a Keyspan PDA single port USB to
@@ -288,6 +289,13 @@ config USB_SERIAL_KEYSPAN_PDA
To compile this driver as a module, choose M here: the
module will be called keyspan_pda.
+config USB_SERIAL_KEYSPAN_PDA_FIRMWARE
+ bool "Include Keyspan PDA firmware in kernel"
+ help
+ This option allows you to build the required firmware for the
+ Keyspan PDA serial port into the kernel. Say 'N' and let it
+ get loaded by udev instead.
+
config USB_SERIAL_KEYSPAN
tristate "USB Keyspan USA-xxx Serial Driver"
select FW_LOADER
@@ -538,6 +546,7 @@ config USB_SERIAL_CYBERJACK
config USB_SERIAL_XIRCOM
tristate "USB Xircom / Entregra Single Port Serial Driver"
+ select FW_LOADER
select USB_EZUSB
help
Say Y here if you want to use a Xircom or Entregra single port USB to
@@ -547,6 +556,14 @@ config USB_SERIAL_XIRCOM
To compile this driver as a module, choose M here: the
module will be called keyspan_pda.
+config USB_SERIAL_XIRCOM_FIRMWARE
+ bool "Include Xircom / Entregra firmware in kernel"
+ help
+ This option allows you to build the required firmware for the
+ Xircom / Entregra serial port into the kernel. Say 'N' and let
+ it get loaded by udev instead.
+
+
config USB_SERIAL_OPTION
tristate "USB driver for GSM and CDMA modems"
help
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index ff54203..99303a5 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -76,18 +76,14 @@
#include <linux/module.h>
#include <linux/spinlock.h>
#include <linux/workqueue.h>
+#include <linux/firmware.h>
+#include <linux/ihex.h>
#include <asm/uaccess.h>
#include <linux/usb.h>
#include <linux/usb/serial.h>
static int debug;
-struct ezusb_hex_record {
- __u16 address;
- __u8 data_size;
- __u8 data[16];
-};
-
/* make a simple define to handle if we are compiling keyspan_pda or xircom support */
#if defined(CONFIG_USB_SERIAL_KEYSPAN_PDA) || defined(CONFIG_USB_SERIAL_KEYSPAN_PDA_MODULE)
#define KEYSPAN
@@ -100,14 +96,6 @@ struct ezusb_hex_record {
#undef XIRCOM
#endif
-#ifdef KEYSPAN
-#include "keyspan_pda_fw.h"
-#endif
-
-#ifdef XIRCOM
-#include "xircom_pgs_fw.h"
-#endif
-
/*
* Version Information
*/
@@ -722,38 +710,47 @@ static void keyspan_pda_close(struct usb_serial_port *port, struct file *filp)
static int keyspan_pda_fake_startup (struct usb_serial *serial)
{
int response;
- const struct ezusb_hex_record *record = NULL;
+ const char *fw_name;
+ const struct ihex_binrec *record;
+ const struct firmware *fw;
/* download the firmware here ... */
response = ezusb_set_reset(serial, 1);
+ if (0) { ; }
#ifdef KEYSPAN
- if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID)
- record = &keyspan_pda_firmware[0];
+ else if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID)
+ fw_name = "keyspan_pda/keyspan_pda.fw";
#endif
#ifdef XIRCOM
- if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
- (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID))
- record = &xircom_pgs_firmware[0];
+ else if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
+ (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID))
+ fw_name = "keyspan_pda/xircom_pgs.fw";
#endif
- if (record == NULL) {
+ else {
err("%s: unknown vendor, aborting.", __func__);
return -ENODEV;
}
+ if (request_firmware(&fw, fw_name, &serial->dev->dev)) {
+ err("failed to load firmware \"%s\"\n", fw_name);
+ return -ENOENT;
+ }
+ record = (const struct ihex_binrec *)fw->data;
- while(record->address != 0xffff) {
- response = ezusb_writememory(serial, record->address,
+ while (record) {
+ response = ezusb_writememory(serial, be32_to_cpu(record->addr),
(unsigned char *)record->data,
- record->data_size, 0xa0);
+ record->len, 0xa0);
if (response < 0) {
err("ezusb_writememory failed for Keyspan PDA "
"firmware (%d %04X %p %d)",
- response,
- record->address, record->data, record->data_size);
+ response, be32_to_cpu(record->addr),
+ record->data, record->len);
break;
}
- record++;
+ record = ihex_next_binrec(record);
}
+ release_firmware(fw);
/* bring device out of reset. Renumeration will occur in a moment
and the new device will bind to the real driver */
response = ezusb_set_reset(serial, 0);
diff --git a/drivers/usb/serial/keyspan_pda_fw.h b/drivers/usb/serial/keyspan_pda_fw.h
deleted file mode 100644
index f253acc..0000000
--- a/drivers/usb/serial/keyspan_pda_fw.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * USB Keyspan PDA Firmware
- *
- * Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Generated from keyspan_pda.s by ezusb_convert.pl
- *
- */
-
-static const struct ezusb_hex_record keyspan_pda_firmware[] = {
-{ 0x0000, 3, {0x02, 0x02, 0x00} },
-{ 0x0023, 4, {0x02, 0x05, 0x5f, 0x00} },
-{ 0x0043, 4, {0x02, 0x01, 0x00, 0x00} },
-{ 0x0030, 5, {0x00, 0x00, 0x00, 0x00, 0x00} },
-{ 0x0100, 16, {0x02, 0x02, 0x96, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
-{ 0x0110, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
-{ 0x0120, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x04, 0x61, 0x00, 0x02, 0x04, 0x89, 0x00} },
-{ 0x0200, 16, {0x75, 0x81, 0x5e, 0xe4, 0xf5, 0x32, 0xf5, 0x33, 0xf5, 0x30, 0xf5, 0x31, 0xf5, 0x34, 0xc2, 0x00} },
-{ 0x0210, 16, {0xc2, 0x01, 0xa9, 0x00, 0x74, 0xfe, 0x90, 0x10, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0xfd, 0x90} },
-{ 0x0220, 16, {0x11, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0x02, 0x90, 0x7f, 0x9d, 0xf0, 0x74, 0x00, 0x90, 0x7f} },
-{ 0x0230, 16, {0x97, 0xf0, 0x74, 0x86, 0x90, 0x7f, 0x9e, 0xf0, 0x90, 0x7f, 0x95, 0x74, 0x03, 0xf0, 0x90, 0x7f} },
-{ 0x0240, 16, {0xaf, 0xe0, 0xd2, 0xe0, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xab, 0xf0, 0x90, 0x7f, 0xae, 0xf0, 0x90} },
-{ 0x0250, 16, {0x7f, 0xac, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xad, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x74} },
-{ 0x0260, 16, {0x84, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x00, 0xf5, 0x98, 0x75, 0xc8, 0x30, 0x7b, 0x05, 0x91, 0x20} },
-{ 0x0270, 16, {0xd2, 0xca, 0x75, 0x98, 0x50, 0xd2, 0xe8, 0xd2, 0xaf, 0xd2, 0xac, 0x74, 0x00, 0xf5, 0x86, 0x90} },
-{ 0x0280, 16, {0x7f, 0xd6, 0x74, 0x02, 0xf0, 0x79, 0x2e, 0x7a, 0x00, 0x7b, 0x00, 0xdb, 0xfe, 0xda, 0xfa, 0xd9} },
-{ 0x0290, 16, {0xf6, 0x74, 0x06, 0xf0, 0x80, 0xfe, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85} },
-{ 0x02a0, 16, {0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xab, 0x74, 0x01, 0xf0, 0x90, 0x7f} },
-{ 0x02b0, 16, {0xe8, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xa3, 0xe0, 0xfc, 0xe9, 0x54, 0x60, 0xb4} },
-{ 0x02c0, 16, {0x00, 0x03, 0x02, 0x03, 0x39, 0xb4, 0x40, 0x6e, 0xba, 0x00, 0x0b, 0x12, 0x04, 0x20, 0x40, 0x03} },
-{ 0x02d0, 16, {0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x01, 0x03, 0x02, 0x04, 0x0a, 0xba, 0x02, 0x03, 0x02} },
-{ 0x02e0, 16, {0x04, 0x0a, 0xba, 0x03, 0x03, 0x02, 0x04, 0x44, 0xba, 0x04, 0x1e, 0xbb, 0x00, 0x0a, 0x90, 0x7f} },
-{ 0x02f0, 16, {0x95, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x04, 0x02, 0x90, 0x7f, 0x98, 0xe0, 0x54, 0xfd, 0xf0, 0x90} },
-{ 0x0300, 16, {0x7f, 0x95, 0xe0, 0x54, 0xfd, 0xf0, 0x02, 0x04, 0x02, 0xba, 0x05, 0x03, 0x02, 0x04, 0x0a, 0xba} },
-{ 0x0310, 16, {0x06, 0x19, 0xbb, 0x00, 0x08, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0x02, 0x03, 0xde, 0xbb, 0x01, 0x08} },
-{ 0x0320, 16, {0xe5, 0x32, 0xc3, 0x95, 0x33, 0x02, 0x03, 0xde, 0x02, 0x04, 0x0a, 0xba, 0x07, 0x05, 0x8b, 0x34} },
-{ 0x0330, 16, {0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0x02, 0x04, 0x0a, 0xba, 0x00, 0x20, 0xb9, 0x80, 0x10, 0x90} },
-{ 0x0340, 16, {0x7f, 0x00, 0xe4, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x04, 0x02, 0xb9} },
-{ 0x0350, 16, {0x82, 0x02, 0x80, 0xeb, 0xb9, 0x81, 0x02, 0x80, 0xe6, 0x02, 0x04, 0x0a, 0xba, 0x01, 0x0f, 0xbb} },
-{ 0x0360, 16, {0x00, 0x03, 0x02, 0x04, 0x0a, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x03} },
-{ 0x0370, 16, {0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x0a, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a} },
-{ 0x0380, 16, {0xba, 0x06, 0x56, 0xbc, 0x01, 0x0f, 0x90, 0x7f, 0xd4, 0x74, 0x06, 0xf0, 0x90, 0x7f, 0xd5, 0x74} },
-{ 0x0390, 16, {0x12, 0xf0, 0x02, 0x04, 0x02, 0xbc, 0x02, 0x12, 0xbb, 0x00, 0x6f, 0x90, 0x7f, 0xd4, 0x74, 0x06} },
-{ 0x03a0, 16, {0xf0, 0x90, 0x7f, 0xd5, 0x74, 0x24, 0xf0, 0x02, 0x04, 0x02, 0xbc, 0x03, 0x29, 0x74, 0x04, 0xc3} },
-{ 0x03b0, 16, {0x9b, 0x40, 0x57, 0x60, 0x55, 0xeb, 0x2b, 0x90, 0x06, 0x44, 0x25, 0x82, 0xf5, 0x82, 0x74, 0x00} },
-{ 0x03c0, 16, {0x35, 0x83, 0xf5, 0x83, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0x90, 0x7f, 0xd4, 0xe9, 0xf0, 0x90, 0x7f} },
-{ 0x03d0, 16, {0xd5, 0xea, 0xf0, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x08, 0x0f, 0x74, 0x01, 0x90, 0x7f} },
-{ 0x03e0, 16, {0x00, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xb5, 0xf0, 0x02, 0x04, 0x02, 0xba, 0x09, 0x03, 0x02, 0x04} },
-{ 0x03f0, 16, {0x02, 0xba, 0x0a, 0x05, 0x74, 0x00, 0x02, 0x03, 0xde, 0xba, 0x0b, 0x03, 0x02, 0x04, 0x02, 0x02} },
-{ 0x0400, 16, {0x04, 0x0a, 0x90, 0x7f, 0xb4, 0x74, 0x02, 0xf0, 0x80, 0x09, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01} },
-{ 0x0410, 16, {0xf0, 0x80, 0x00, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32} },
-{ 0x0420, 16, {0xeb, 0x20, 0xe7, 0x1e, 0xc3, 0x94, 0x0a, 0x50, 0x19, 0xeb, 0x23, 0x24, 0xfe, 0xf5, 0x82, 0x74} },
-{ 0x0430, 16, {0x05, 0x34, 0x00, 0xf5, 0x83, 0xe0, 0xf5, 0xcb, 0xf5, 0xcd, 0xa3, 0xe0, 0xf5, 0xca, 0xf5, 0xcc} },
-{ 0x0440, 16, {0xc3, 0x22, 0xd3, 0x22, 0xb9, 0x41, 0x11, 0xeb, 0x64, 0xff, 0x54, 0x84, 0xfb, 0x90, 0x7f, 0x98} },
-{ 0x0450, 16, {0xe0, 0x54, 0x7b, 0x4b, 0xf0, 0x02, 0x04, 0x02, 0x90, 0x7f, 0x9b, 0xe0, 0x64, 0xff, 0x02, 0x03} },
-{ 0x0460, 16, {0xde, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2} },
-{ 0x0470, 16, {0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0x12, 0x05, 0xa0, 0xd0, 0xe0, 0xd0, 0x85} },
-{ 0x0480, 16, {0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0} },
-{ 0x0490, 16, {0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xaa, 0x74, 0x04} },
-{ 0x04a0, 16, {0xf0, 0x90, 0x7f, 0xc9, 0xe0, 0xf9, 0xe4, 0xf5, 0x86, 0x90, 0x7d, 0xc0, 0x75, 0x85, 0x10, 0x85} },
-{ 0x04b0, 16, {0x32, 0x84, 0xe0, 0x05, 0x86, 0x05, 0x84, 0xf0, 0xe5, 0x84, 0xb5, 0x33, 0x02, 0x80, 0x09, 0x05} },
-{ 0x04c0, 16, {0x32, 0x05, 0x86, 0xa3, 0xd9, 0xec, 0x80, 0x00, 0x90, 0x7f, 0xc9, 0xf0, 0xb1, 0x31, 0xd0, 0xe0} },
-{ 0x04d0, 16, {0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xe4, 0xf5, 0x86, 0x90, 0x7f} },
-{ 0x04e0, 16, {0xbc, 0xe0, 0x20, 0xe1, 0x4b, 0x90, 0x7d, 0x00, 0xe5, 0x32, 0xf0, 0xa3, 0xe5, 0x33, 0xf0, 0xa3} },
-{ 0x04f0, 16, {0xe5, 0x30, 0xf0, 0xa3, 0xe5, 0x31, 0xf0, 0xa3, 0xe4, 0x30, 0x00, 0x01, 0x04, 0xf0, 0xa3, 0x05} },
-{ 0x0500, 16, {0x86, 0x90, 0x10, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6} },
-{ 0x0510, 16, {0x05, 0x86, 0x74, 0xfc, 0xf0, 0xa3, 0x05, 0x86, 0x90, 0x11, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05} },
-{ 0x0520, 16, {0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbd, 0x74, 0x26, 0xf0} },
-{ 0x0530, 16, {0x22, 0x20, 0x00, 0x13, 0xe5, 0x32, 0xb5, 0x33, 0x01, 0x22, 0x05, 0x33, 0x75, 0x83, 0x10, 0x85} },
-{ 0x0540, 16, {0x33, 0x82, 0xe0, 0xf5, 0x99, 0xd2, 0x00, 0x74, 0x00, 0xb5, 0x34, 0x01, 0x22, 0xe5, 0x33, 0xd3} },
-{ 0x0550, 16, {0x95, 0x32, 0xc3, 0x95, 0x34, 0x40, 0xf5, 0x75, 0x34, 0x00, 0xd2, 0x01, 0x02, 0x05, 0xa0, 0xc0} },
-{ 0x0560, 16, {0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x30, 0x99, 0x07, 0xc2, 0x99} },
-{ 0x0570, 16, {0xc2, 0x00, 0x12, 0x05, 0x34, 0x30, 0x98, 0x05, 0x12, 0x05, 0x8a, 0xc2, 0x98, 0xd0, 0xe0, 0xd0} },
-{ 0x0580, 16, {0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0x75, 0x83, 0x11, 0x85, 0x30, 0x82} },
-{ 0x0590, 16, {0x05, 0x82, 0xe5, 0x99, 0xf0, 0xe5, 0x82, 0xb5, 0x31, 0x01, 0x22, 0x05, 0x30, 0xb1, 0xa0, 0x22} },
-{ 0x05a0, 16, {0x90, 0x7f, 0xb8, 0xe0, 0x20, 0xe1, 0x38, 0x20, 0x01, 0x36, 0xe5, 0x30, 0xb5, 0x31, 0x01, 0x22} },
-{ 0x05b0, 16, {0xe4, 0xf5, 0x86, 0x75, 0x83, 0x11, 0x05, 0x86, 0x90, 0x7e, 0x00, 0xf0, 0xa3, 0x05, 0x86, 0x79} },
-{ 0x05c0, 16, {0x01, 0xe5, 0x30, 0xb5, 0x31, 0x02, 0x80, 0x10, 0x05, 0x31, 0x85, 0x31, 0x82, 0xe0, 0x05, 0x86} },
-{ 0x05d0, 16, {0xf0, 0xa3, 0x05, 0x86, 0x09, 0xb9, 0x40, 0xe9, 0x90, 0x7f, 0xb9, 0xe9, 0x60, 0x01, 0xf0, 0x22} },
-{ 0x05e0, 16, {0xc2, 0x01, 0xe4, 0xf5, 0x86, 0x90, 0x7e, 0x00, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x02, 0xf0, 0x90} },
-{ 0x05f0, 16, {0x7f, 0xb9, 0xf0, 0x22, 0xc2, 0x99, 0xf5, 0x99, 0x30, 0x99, 0xfd, 0xc2, 0x99, 0x22, 0xe5, 0x5e} },
-{ 0x0600, 16, {0xf6, 0x3c, 0xfd, 0x8f, 0xfe, 0xc8, 0xff, 0x64, 0xff, 0xb2, 0xff, 0xd9, 0xff, 0xed, 0xff, 0xf3} },
-{ 0x0610, 16, {0xff, 0xfa, 0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40, 0xcd, 0x06, 0x04, 0x01, 0x89, 0xab} },
-{ 0x0620, 16, {0x01, 0x02, 0x03, 0x01, 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00} },
-{ 0x0630, 16, {0x00, 0x02, 0xff, 0xff, 0xff, 0x00, 0x07, 0x05, 0x82, 0x03, 0x40, 0x00, 0x01, 0x07, 0x05, 0x02} },
-{ 0x0640, 16, {0x02, 0x40, 0x00, 0x00, 0x06, 0x4c, 0x06, 0x50, 0x06, 0x72, 0x06, 0xa0, 0x04, 0x03, 0x00, 0x00} },
-{ 0x0650, 16, {0x22, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00} },
-{ 0x0660, 16, {0x62, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00} },
-{ 0x0670, 16, {0x73, 0x00, 0x2e, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x55, 0x00} },
-{ 0x0680, 16, {0x53, 0x00, 0x42, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00} },
-{ 0x0690, 16, {0x6c, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00} },
-{ 0x06a0, 6, {0x06, 0x03, 0x34, 0x00, 0x37, 0x00} },
-{ 0xffff, 0, {0x00} }
-};
diff --git a/drivers/usb/serial/xircom_pgs_fw.h b/drivers/usb/serial/xircom_pgs_fw.h
deleted file mode 100644
index 3ff74a6..0000000
--- a/drivers/usb/serial/xircom_pgs_fw.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * USB Xircom PGS Firmware
- *
- * Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
- * Copyright (C) 2001 Cristian M. Craciunescu <cristi@dnt.ro>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Generated from xircom_pgs.S by ezusb_convert_x.pl
- */
-
-static const struct ezusb_hex_record xircom_pgs_firmware[] = {
-{ 0x0000, 3, {0x02, 0x02, 0x00} },
-{ 0x0023, 4, {0x02, 0x05, 0x9b, 0x00} },
-{ 0x0030, 5, {0x00, 0x00, 0x00, 0x00, 0x00} },
-{ 0x0043, 4, {0x02, 0x01, 0x00, 0x00} },
-{ 0x0100, 16, {0x02, 0x02, 0xba, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
-{ 0x0110, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
-{ 0x0120, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x04, 0x85, 0x00, 0x02, 0x04, 0xb9, 0x00} },
-{ 0x0200, 16, {0x75, 0x81, 0x5e, 0xe4, 0xf5, 0x32, 0xf5, 0x33, 0xf5, 0x30, 0xf5, 0x31, 0xf5, 0x34, 0xc2, 0x00} },
-{ 0x0210, 16, {0xc2, 0x01, 0xa9, 0x00, 0x74, 0xfe, 0x90, 0x10, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0xfd, 0x90} },
-{ 0x0220, 16, {0x11, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x90, 0x7f, 0x94, 0x74, 0xbf, 0xf0, 0x90, 0x7f, 0x95, 0x74} },
-{ 0x0230, 16, {0xef, 0xf0, 0x74, 0x10, 0x90, 0x7f, 0x9e, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x40} },
-{ 0x0240, 16, {0x90, 0x7f, 0x9d, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0x97, 0xf0, 0x74, 0x82, 0x90, 0x7f, 0x9e, 0xf0} },
-{ 0x0250, 16, {0x90, 0x7f, 0x95, 0x74, 0x03, 0xf0, 0x90, 0x7f, 0xaf, 0xe0, 0xd2, 0xe0, 0xf0, 0x74, 0x01, 0x90} },
-{ 0x0260, 16, {0x7f, 0xab, 0xf0, 0x90, 0x7f, 0xae, 0xf0, 0x90, 0x7f, 0xac, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xad} },
-{ 0x0270, 16, {0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x74, 0x07, 0x90, 0x7f, 0xaf, 0xf0, 0x74, 0x20, 0x90} },
-{ 0x0280, 16, {0x7f, 0x9c, 0xf0, 0x74, 0x80, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x53, 0xf5, 0x98, 0x75, 0xc8, 0x30} },
-{ 0x0290, 16, {0x7b, 0x05, 0x91, 0x44, 0xd2, 0xca, 0x75, 0x98, 0x50, 0xd2, 0xe8, 0xd2, 0xaf, 0xd2, 0xac, 0x74} },
-{ 0x02a0, 16, {0x00, 0xf5, 0x86, 0x90, 0x7f, 0xd6, 0x74, 0x02, 0xf0, 0x79, 0x2e, 0x7a, 0x00, 0x7b, 0x00, 0xdb} },
-{ 0x02b0, 16, {0xfe, 0xda, 0xfa, 0xd9, 0xf6, 0x74, 0x06, 0xf0, 0x80, 0xfe, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83} },
-{ 0x02c0, 16, {0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xab, 0x74} },
-{ 0x02d0, 16, {0x01, 0xf0, 0x90, 0x7f, 0xe8, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xa3, 0xe0, 0xfc} },
-{ 0x02e0, 16, {0xe9, 0x54, 0x60, 0xb4, 0x00, 0x03, 0x02, 0x03, 0x5d, 0xb4, 0x40, 0x6e, 0xba, 0x00, 0x0b, 0x12} },
-{ 0x02f0, 16, {0x04, 0x44, 0x40, 0x03, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0xba, 0x01, 0x03, 0x02, 0x04, 0x2e} },
-{ 0x0300, 16, {0xba, 0x02, 0x03, 0x02, 0x04, 0x2e, 0xba, 0x03, 0x03, 0x02, 0x04, 0x68, 0xba, 0x04, 0x1e, 0xbb} },
-{ 0x0310, 16, {0x00, 0x0a, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x04, 0x26, 0x90, 0x7f, 0x98, 0xe0} },
-{ 0x0320, 16, {0x54, 0xfd, 0xf0, 0x90, 0x7f, 0x95, 0xe0, 0x54, 0xfd, 0xf0, 0x02, 0x04, 0x26, 0xba, 0x05, 0x03} },
-{ 0x0330, 16, {0x02, 0x04, 0x2e, 0xba, 0x06, 0x19, 0xbb, 0x00, 0x08, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0x02, 0x04} },
-{ 0x0340, 16, {0x02, 0xbb, 0x01, 0x08, 0xe5, 0x32, 0xc3, 0x95, 0x33, 0x02, 0x04, 0x02, 0x02, 0x04, 0x2e, 0xba} },
-{ 0x0350, 16, {0x07, 0x05, 0x8b, 0x34, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0x02, 0x04, 0x2e, 0xba, 0x00, 0x20} },
-{ 0x0360, 16, {0xb9, 0x80, 0x10, 0x90, 0x7f, 0x00, 0xe4, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0} },
-{ 0x0370, 16, {0x02, 0x04, 0x26, 0xb9, 0x82, 0x02, 0x80, 0xeb, 0xb9, 0x81, 0x02, 0x80, 0xe6, 0x02, 0x04, 0x2e} },
-{ 0x0380, 16, {0xba, 0x01, 0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x2e, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x26, 0x02} },
-{ 0x0390, 16, {0x04, 0x2e, 0xba, 0x03, 0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x2e, 0xbb, 0x01, 0x03, 0x02, 0x04} },
-{ 0x03a0, 16, {0x26, 0x02, 0x04, 0x2e, 0xba, 0x06, 0x56, 0xbc, 0x01, 0x0f, 0x90, 0x7f, 0xd4, 0x74, 0x06, 0xf0} },
-{ 0x03b0, 16, {0x90, 0x7f, 0xd5, 0x74, 0x5a, 0xf0, 0x02, 0x04, 0x26, 0xbc, 0x02, 0x12, 0xbb, 0x00, 0x6f, 0x90} },
-{ 0x03c0, 16, {0x7f, 0xd4, 0x74, 0x06, 0xf0, 0x90, 0x7f, 0xd5, 0x74, 0x6c, 0xf0, 0x02, 0x04, 0x26, 0xbc, 0x03} },
-{ 0x03d0, 16, {0x29, 0x74, 0x04, 0xc3, 0x9b, 0x40, 0x57, 0x60, 0x55, 0xeb, 0x2b, 0x90, 0x06, 0x8c, 0x25, 0x82} },
-{ 0x03e0, 16, {0xf5, 0x82, 0x74, 0x00, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0x90, 0x7f, 0xd4} },
-{ 0x03f0, 16, {0xe9, 0xf0, 0x90, 0x7f, 0xd5, 0xea, 0xf0, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0xba, 0x08, 0x0f} },
-{ 0x0400, 16, {0x74, 0x01, 0x90, 0x7f, 0x00, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xb5, 0xf0, 0x02, 0x04, 0x26, 0xba} },
-{ 0x0410, 16, {0x09, 0x03, 0x02, 0x04, 0x26, 0xba, 0x0a, 0x05, 0x74, 0x00, 0x02, 0x04, 0x02, 0xba, 0x0b, 0x03} },
-{ 0x0420, 16, {0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0x90, 0x7f, 0xb4, 0x74, 0x02, 0xf0, 0x80, 0x09, 0x90, 0x7f} },
-{ 0x0430, 16, {0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x00, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0} },
-{ 0x0440, 16, {0x82, 0xd0, 0x86, 0x32, 0xeb, 0x20, 0xe7, 0x1e, 0xc3, 0x94, 0x0a, 0x50, 0x19, 0xeb, 0x23, 0x24} },
-{ 0x0450, 16, {0x46, 0xf5, 0x82, 0x74, 0x06, 0x34, 0x00, 0xf5, 0x83, 0xe0, 0xf5, 0xcb, 0xf5, 0xcd, 0xa3, 0xe0} },
-{ 0x0460, 16, {0xf5, 0xca, 0xf5, 0xcc, 0xc3, 0x22, 0xd3, 0x22, 0xb9, 0x41, 0x11, 0xeb, 0x64, 0xff, 0x54, 0x80} },
-{ 0x0470, 16, {0xfb, 0x90, 0x7f, 0x98, 0xe0, 0x54, 0x7f, 0x4b, 0xf0, 0x02, 0x04, 0x26, 0x90, 0x7f, 0x9b, 0xe0} },
-{ 0x0480, 16, {0x64, 0xff, 0x02, 0x04, 0x02, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0} },
-{ 0x0490, 16, {0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0x74, 0x20, 0x90} },
-{ 0x04a0, 16, {0x7f, 0x9c, 0xf0, 0x12, 0x05, 0xdc, 0x74, 0x20, 0x90, 0x7f, 0x9c, 0xf0, 0xd0, 0xe0, 0xd0, 0x85} },
-{ 0x04b0, 16, {0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0} },
-{ 0x04c0, 16, {0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x74, 0x10, 0x90, 0x7f, 0x9c, 0xf0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5} },
-{ 0x04d0, 16, {0x91, 0x90, 0x7f, 0xaa, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xe0, 0xf9, 0xe4, 0xf5, 0x86, 0x90} },
-{ 0x04e0, 16, {0x7d, 0xc0, 0x75, 0x85, 0x10, 0x85, 0x32, 0x84, 0xe0, 0x05, 0x86, 0x05, 0x84, 0xf0, 0xe5, 0x84} },
-{ 0x04f0, 16, {0xb5, 0x33, 0x02, 0x80, 0x09, 0x05, 0x32, 0x05, 0x86, 0xa3, 0xd9, 0xec, 0x80, 0x00, 0x90, 0x7f} },
-{ 0x0500, 16, {0xc9, 0xf0, 0xb1, 0x6d, 0x74, 0x20, 0x90, 0x7f, 0x9c, 0xf0, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84} },
-{ 0x0510, 16, {0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbc, 0xe0, 0x20, 0xe1} },
-{ 0x0520, 16, {0x4b, 0x90, 0x7d, 0x00, 0xe5, 0x32, 0xf0, 0xa3, 0xe5, 0x33, 0xf0, 0xa3, 0xe5, 0x30, 0xf0, 0xa3} },
-{ 0x0530, 16, {0xe5, 0x31, 0xf0, 0xa3, 0xe4, 0x30, 0x00, 0x01, 0x04, 0xf0, 0xa3, 0x05, 0x86, 0x90, 0x10, 0x00} },
-{ 0x0540, 16, {0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6, 0x05, 0x86, 0x74, 0xfc} },
-{ 0x0550, 16, {0xf0, 0xa3, 0x05, 0x86, 0x90, 0x11, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05} },
-{ 0x0560, 16, {0x86, 0xd9, 0xf6, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbd, 0x74, 0x26, 0xf0, 0x22, 0x20, 0x00, 0x13} },
-{ 0x0570, 16, {0xe5, 0x32, 0xb5, 0x33, 0x01, 0x22, 0x05, 0x33, 0x75, 0x83, 0x10, 0x85, 0x33, 0x82, 0xe0, 0xf5} },
-{ 0x0580, 16, {0x99, 0xd2, 0x00, 0x74, 0x00, 0xb5, 0x34, 0x01, 0x22, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0xc3, 0x95} },
-{ 0x0590, 16, {0x34, 0x40, 0xf5, 0x75, 0x34, 0x00, 0xd2, 0x01, 0x02, 0x05, 0xdc, 0xc0, 0x86, 0xc0, 0x82, 0xc0} },
-{ 0x05a0, 16, {0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x30, 0x99, 0x07, 0xc2, 0x99, 0xc2, 0x00, 0x12, 0x05} },
-{ 0x05b0, 16, {0x70, 0x30, 0x98, 0x05, 0x12, 0x05, 0xc6, 0xc2, 0x98, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0} },
-{ 0x05c0, 16, {0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0x75, 0x83, 0x11, 0x85, 0x30, 0x82, 0x05, 0x82, 0xe5, 0x99} },
-{ 0x05d0, 16, {0xf0, 0xe5, 0x82, 0xb5, 0x31, 0x01, 0x22, 0x05, 0x30, 0xb1, 0xdc, 0x22, 0x74, 0x10, 0x90, 0x7f} },
-{ 0x05e0, 16, {0x9c, 0xf0, 0x90, 0x7f, 0xb8, 0xe0, 0x20, 0xe1, 0x3e, 0x20, 0x01, 0x3c, 0xe5, 0x30, 0xb5, 0x31} },
-{ 0x05f0, 16, {0x01, 0x22, 0xe4, 0xf5, 0x86, 0x75, 0x83, 0x11, 0x05, 0x86, 0x90, 0x7e, 0x00, 0xf0, 0xa3, 0x05} },
-{ 0x0600, 16, {0x86, 0x79, 0x01, 0xe5, 0x30, 0xb5, 0x31, 0x02, 0x80, 0x10, 0x05, 0x31, 0x85, 0x31, 0x82, 0xe0} },
-{ 0x0610, 16, {0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0x09, 0xb9, 0x40, 0xe9, 0x74, 0x10, 0x90, 0x7f, 0x9c, 0xf0} },
-{ 0x0620, 16, {0x90, 0x7f, 0xb9, 0xe9, 0x60, 0x01, 0xf0, 0x22, 0xc2, 0x01, 0xe4, 0xf5, 0x86, 0x90, 0x7e, 0x00} },
-{ 0x0630, 16, {0x74, 0x01, 0xf0, 0xa3, 0x74, 0x02, 0xf0, 0x90, 0x7f, 0xb9, 0xf0, 0x22, 0xc2, 0x99, 0xf5, 0x99} },
-{ 0x0640, 16, {0x30, 0x99, 0xfd, 0xc2, 0x99, 0x22, 0xe5, 0x5e, 0xf6, 0x3c, 0xfd, 0x8f, 0xfe, 0xc8, 0xff, 0x64} },
-{ 0x0650, 16, {0xff, 0xb2, 0xff, 0xd9, 0xff, 0xed, 0xff, 0xf3, 0xff, 0xfa, 0x12, 0x01, 0x00, 0x01, 0xff, 0xff} },
-{ 0x0660, 16, {0xff, 0x40, 0xcd, 0x06, 0x04, 0x01, 0x89, 0xab, 0x01, 0x02, 0x03, 0x01, 0x09, 0x02, 0x20, 0x00} },
-{ 0x0670, 16, {0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0x00, 0x07, 0x05} },
-{ 0x0680, 16, {0x82, 0x03, 0x40, 0x00, 0x01, 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00, 0x06, 0x94, 0x06, 0x98} },
-{ 0x0690, 16, {0x06, 0xba, 0x06, 0xe8, 0x04, 0x03, 0x00, 0x00, 0x22, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00} },
-{ 0x06a0, 16, {0x45, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00, 0x62, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00} },
-{ 0x06b0, 16, {0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x73, 0x00, 0x2e, 0x03, 0x41, 0x00, 0x43, 0x00} },
-{ 0x06c0, 16, {0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x55, 0x00, 0x53, 0x00, 0x42, 0x00, 0x20, 0x00, 0x73, 0x00} },
-{ 0x06d0, 16, {0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00} },
-{ 0x06e0, 14, {0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x06, 0x03, 0x34, 0x00, 0x37, 0x00} },
-{ 0xffff, 0, {0x00} }
-};
diff --git a/firmware/Makefile b/firmware/Makefile
index eb3b992..94e4dd1 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -30,6 +30,8 @@ fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XB) += keyspan/usa28xb.fw
fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28X) += keyspan/usa28x.fw
fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49W) += keyspan/usa49w.fw
fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49WLC) += keyspan/usa49wlc.fw
+fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA_FIRMWARE) += keyspan_pda/keyspan_pda.fw
+fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM_FIRMWARE) += keyspan_pda/xircom_pgs.fw
firmware-y := $(fw-external-y) $(fw-shipped-y)
firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
diff --git a/firmware/keyspan_pda/keyspan_pda.fw.ihex b/firmware/keyspan_pda/keyspan_pda.fw.ihex
new file mode 100644
index 0000000..b7d964b
--- /dev/null
+++ b/firmware/keyspan_pda/keyspan_pda.fw.ihex
@@ -0,0 +1,121 @@
+:100000000000000003020200000000230402055F5C
+:100010000000000000000043040201000000000096
+:10002000000000300500000000000000000001009A
+:100030001002029600020000000200000002000010
+:10004000000000000000011010020000000200008B
+:10005000000200000002000000000000000001207B
+:100060001002000000020000000204610002048986
+:1000700000000000000002001075815EE4F532F51A
+:1000800033F530F531F534C20000000000000210F5
+:1000900010C201A90074FE901000F0A3D9FC74FDF9
+:1000A0009000000000000220101100F0A3D9FC74A1
+:1000B00002907F9DF07400907F00000000000230ED
+:1000C0001097F07486907F9EF0907F957403F09067
+:1000D0007F0000000000024010AFE0D2E0F07401A9
+:1000E000907FABF0907FAEF09000000000000250D7
+:1000F000107FAC7404F0907FAD7404F0907FC9F071
+:1001000074000000000002601084907F98F074007A
+:10011000F59875C8307B0591200000000000027042
+:1001200010D2CA759850D2E8D2AFD2AC7400F5861E
+:100130009000000000000280107FD67402F0792E3B
+:100140007A007B00DBFEDAFAD900000000000290A2
+:1001500010F67406F080FEC086C082C083C084C0E2
+:1001600085000000000002A010C0E0E591C2E4F5A7
+:1001700091907FAB7401F0907F000000000002B00E
+:1001800010E8E0F9A3E0FAA3E0FBA3E0FCE9546087
+:10019000B4000000000002C0100003020339B440A4
+:1001A0006EBA000B1204204003000000000002D0D1
+:1001B0001002040202040ABA010302040ABA02038A
+:1001C00002000000000002E010040ABA0303020467
+:1001D00044BA041EBB000A907F000000000002F039
+:1001E0001095E04402F0020402907F98E054FDF084
+:1001F0009000000000000300107F95E054FDF00225
+:100200000402BA050302040ABA0000000000031049
+:10021000100619BB0008E533D395320203DEBB019B
+:10022000080000000000032010E532C395330203EC
+:10023000DE02040ABA07058B340000000000033018
+:100240001002040202040A02040ABA0020B9801053
+:100250009000000000000340107F00E4F0A3F09045
+:100260007FB57402F0020402B900000000000350E0
+:1002700010820280EBB9810280E602040ABA010F03
+:10028000BB0000000000036010000302040ABB0171
+:100290000302040202040ABA030000000000037013
+:1002A000100FBB000302040ABB0103020402020494
+:1002B0000A0000000000038010BA0656BC010F902F
+:1002C0007FD47406F0907FD5740000000000039086
+:1002D0001012F0020402BC0212BB006F907FD474B3
+:1002E00006000000000003A010F0907FD57424F0F9
+:1002F000020402BC03297404C3000000000003B020
+:10030000109B40576055EB2B9006442582F5827474
+:1003100000000000000003C0103583F583E0F9A35E
+:10032000E0FA907FD4E9F0907F000000000003D055
+:1003300010D5EAF002040202040ABA080F74019010
+:100340007F000000000003E01000F07401907FB512
+:10035000F0020402BA09030204000000000003F0E6
+:100360001002BA0A0574000203DEBA0B030204028B
+:10037000020000000000040010040A907FB4740220
+:10038000F08009907FB4E0440100000000000410F8
+:1003900010F08000D0E0D085D084D083D082D08689
+:1003A000320000000000042010EB20E71EC3940A76
+:1003B0005019EB2324FEF582740000000000043085
+:1003C00010053400F583E0F5CBF5CDA3E0F5CAF5D3
+:1003D000CC0000000000044010C322D322B9411118
+:1003E000EB64FF5484FB907F9800000000000450F1
+:1003F00010E0547B4BF0020402907F9BE064FF020C
+:10040000030000000000046010DEC086C082C083CC
+:10041000C084C085C0E0E591C20000000000047007
+:1004200010E4F591907FA97404F01205A0D0E0D0FB
+:10043000850000000000048010D084D083D082D0DA
+:100440008632C086C082C083C000000000000490D5
+:100450001084C085C0E0E591C2E4F591907FAA7454
+:1004600004000000000004A010F0907FC9E0F9E44F
+:10047000F586907DC075851085000000000004B0F1
+:10048000103284E005860584F0E584B533028009E6
+:1004900005000000000004C010320586A3D9EC80DE
+:1004A00000907FC9F0B131D0E0000000000004D01E
+:1004B00010D085D084D083D082D08632E4F5869067
+:1004C0007F000000000004E010BCE020E14B907DC4
+:1004D00000E532F0A3E533F0A3000000000004F0D3
+:1004E00010E530F0A3E531F0A3E430000104F0A3FF
+:1004F000050000000000050010869010007910E053
+:10050000A30586F0A30586D9F600000000000510BB
+:1005100010058674FCF0A305869011007910E0A305
+:1005200005000000000005201086F0A30586D9F61E
+:10053000E4F586907FBD7426F000000000000530D1
+:100540001022200013E532B53301220533758310E4
+:100550008500000000000540103382E0F599D200CC
+:100560007400B5340122E533D300000000000550CB
+:10057000109532C3953440F5753400D2010205A0C0
+:10058000C0000000000005601086C082C083C084E7
+:10059000C085C0E0309907C29900000000000570D6
+:1005A00010C20012053430980512058AC298D0E0B6
+:1005B000D0000000000005801085D084D083D08258
+:1005C000D0863275831185308200000000000590CE
+:1005D000100582E599F0E582B53101220530B1A020
+:1005E00022000000000005A010907FB8E020E13854
+:1005F000200136E530B5310122000000000005B0D1
+:1006000010E4F5867583110586907E00F0A30586BB
+:1006100079000000000005C01001E530B53102800E
+:10062000100531853182E00586000000000005D00C
+:1006300010F0A3058609B940E9907FB9E96001F09F
+:1006400022000000000005E010C201E4F586907E63
+:10065000007401F0A37402F090000000000005F0A7
+:10066000107FB9F022C299F5993099FDC29922E51F
+:100670005E0000000000060010F63CFD8FFEC8FF83
+:1006800064FFB2FFD9FFEDFFF30000000000061089
+:1006900010FFFA12010001FFFFFF40CD060401899F
+:1006A000AB00000000000620100102030109022037
+:1006B0000001010080320904000000000000063043
+:1006C000100002FFFFFF000705820340000107053D
+:1006D00002000000000006401002400000064C0628
+:1006E00050067206A004030000000000000006503F
+:1006F000102203410043004D0045002000750073A7
+:100700000000000000000660106200200077006911
+:1007100000640067006500740000000000000670BF
+:100720001073002E03410043004D0045002000558A
+:1007300000000000000006801053004200200073FB
+:100740000065007200690061000000000000069072
+:10075000106C002000770069006400670065007479
+:1007600000000000000006A0060603340037000069
+:05077000000000000084
+:00000001FF
diff --git a/firmware/keyspan_pda/xircom_pgs.fw.ihex b/firmware/keyspan_pda/xircom_pgs.fw.ihex
new file mode 100644
index 0000000..50c7ce0
--- /dev/null
+++ b/firmware/keyspan_pda/xircom_pgs.fw.ihex
@@ -0,0 +1,127 @@
+:100000000000000003020200000000230402059B20
+:1000100000000000000000300500000000000000AB
+:100020000000004304020100000000000000010085
+:10003000100202BA000200000002000000020000EC
+:10004000000000000000011010020000000200008B
+:10005000000200000002000000000000000001207B
+:10006000100200000002000000020485000204B932
+:1000700000000000000002001075815EE4F532F51A
+:1000800033F530F531F534C20000000000000210F5
+:1000900010C201A90074FE901000F0A3D9FC74FDF9
+:1000A0009000000000000220101100F0A3D9FC9085
+:1000B0007F9474BFF0907F957400000000000230C0
+:1000C00010EFF07410907F9EF07400907F98F074A1
+:1000D000400000000000024010907F9DF0740090EE
+:1000E0007F97F07482907F9EF00000000000025025
+:1000F00010907F957403F0907FAFE0D2E0F0740130
+:100100009000000000000260107FABF0907FAEF026
+:10011000907FAC7404F0907FAD000000000002708E
+:10012000107404F0907FC9F07407907FAFF07420D2
+:100130009000000000000280107F9CF07480907F8F
+:1001400098F07453F59875C83000000000000290D4
+:10015000107B059144D2CA759850D2E8D2AFD2AC88
+:1001600074000000000002A01000F586907FD67495
+:1001700002F0792E7A007B00DB000000000002B064
+:1001800010FEDAFAD9F67406F080FEC086C082C08E
+:1001900083000000000002C010C084C085C0E0E5FC
+:1001A00091C2E4F591907FAB74000000000002D092
+:1001B0001001F0907FE8E0F9A3E0FAA3E0FBA3E0F0
+:1001C000FC000000000002E010E95460B4000302EB
+:1001D000035DB4406EBA000B12000000000002F094
+:1001E000100444400302042602042EBA0103020450
+:1001F0002E0000000000030010BA020302042EBA11
+:100200000303020468BA041EBB00000000000310D0
+:1002100010000A907F95E04402F0020426907F9837
+:10022000E0000000000003201054FDF0907F95E0F6
+:1002300054FDF0020426BA0503000000000003305C
+:100240001002042EBA0619BB0008E533D39532021A
+:1002500004000000000003401002BB0108E532C3A7
+:10026000953302040202042EBA000000000003507D
+:100270001007058B3402042602042E02042EBA0055
+:10028000200000000000036010B98010907F00E49F
+:10029000F0A3F0907FB57402F0000000000003703E
+:1002A00010020426B9820280EBB9810280E60204C2
+:1002B0002E0000000000038010BA010FBB000302F3
+:1002C000042EBB010302042602000000000003907C
+:1002D00010042EBA030FBB000302042EBB0103025D
+:1002E00004000000000003A0102602042EBA0656E7
+:1002F000BC010F907FD47406F0000000000003B032
+:1003000010907FD5745AF0020426BC0212BB006F15
+:1003100090000000000003C0107FD47406F0907FAE
+:10032000D5746CF0020426BC03000000000003D06A
+:1003300010297404C39B40576055EB2B90068C2505
+:1003400082000000000003E010F58274003583F5A0
+:1003500083E0F9A3E0FA907FD4000000000003F0EE
+:1003600010E9F0907FD5EAF002042602042EBA08C4
+:100370000F00000000000400107401907F00F07472
+:1003800001907FB5F0020426BA00000000000410BE
+:10039000100903020426BA0A057400020402BA0B0B
+:1003A00003000000000004201002042602042E9026
+:1003B0007FB47402F08009907F00000000000430D8
+:1003C00010B4E04401F08000D0E0D085D084D08328
+:1003D000D0000000000004401082D08632EB20E7FD
+:1003E0001EC3940A5019EB2324000000000004509F
+:1003F0001046F58274063400F583E0F5CBF5CDA305
+:10040000E00000000000046010F5CAF5CCC322D360
+:1004100022B94111EB64FF54800000000000047019
+:1004200010FB907F98E0547F4BF0020426907F9B56
+:10043000E0000000000004801064FF020402C08697
+:10044000C082C083C084C085C0000000000004904A
+:1004500010E0E591C2E4F591907FA97404F0742056
+:1004600090000000000004A0107F9CF01205DC74D6
+:1004700020907F9CF0D0E0D085000000000004B008
+:1004800010D084D083D082D08632C086C082C08310
+:10049000C0000000000004C01084C085C0E07410DB
+:1004A000907F9CF0E591C2E4F5000000000004D0CC
+:1004B0001091907FAA7404F0907FC9E0F9E4F5866A
+:1004C00090000000000004E0107DC07585108532AA
+:1004D00084E005860584F0E584000000000004F057
+:1004E00010B53302800905320586A3D9EC8000904F
+:1004F0007F0000000000050010C9F0B16D7420906D
+:100500007F9CF0D0E0D085D0840000000000051072
+:1005100010D083D082D08632E4F586907FBCE02074
+:10052000E100000000000520104B907D00E532F056
+:10053000A3E533F0A3E530F0A30000000000053090
+:1005400010E531F0A3E430000104F0A3058690101B
+:100550000000000000000540107910E0A30586F0BF
+:10056000A30586D9F6058674FC000000000005503E
+:1005700010F0A305869011007910E0A30586F0A382
+:1005800005000000000005601086D9F6E4F58690AD
+:100590007FBD7426F02220001300000000000570CB
+:1005A00010E532B53301220533758310853382E0BF
+:1005B000F5000000000005801099D2007400B534E9
+:1005C0000122E533D39532C3950000000000059069
+:1005D000103440F5753400D2010205DCC086C082BB
+:1005E000C0000000000005A01083C084C085C0E0EA
+:1005F000309907C299C2001205000000000005B042
+:1006000010703098051205C6C298D0E0D085D0840D
+:10061000D0000000000005C01083D082D086327563
+:1006200083118530820582E599000000000005D025
+:1006300010F0E582B53101220530B1DC2274109052
+:100640007F000000000005E0109CF0907FB8E020E3
+:10065000E13E20013CE530B531000000000005F02E
+:10066000100122E4F5867583110586907E00F0A3C3
+:10067000050000000000060010867901E530B53164
+:100680000280100531853182E00000000000061074
+:10069000100586F0A3058609B940E97410907F9C87
+:1006A000F00000000000062010907FB9E96001F022
+:1006B00022C201E4F586907E0000000000000630B2
+:1006C000107401F0A37402F0907FB9F022C299F582
+:1006D0009900000000000640103099FDC29922E503
+:1006E0005EF63CFD8FFEC8FF64000000000006506F
+:1006F00010FFB2FFD9FFEDFFF3FFFA12010001FF77
+:10070000FF0000000000066010FF40CD06040189D4
+:10071000AB01020301090220000000000000067086
+:100720001001010080320904000002FFFFFF0007F2
+:10073000050000000000068010820340000107054C
+:100740000202400000069406980000000000069097
+:100750001006BA06E8040300002203410043004DDE
+:1007600000000000000006A0104500200075007386
+:10077000006200200077006900000000000006B061
+:1007800010640067006500740073002E034100438D
+:1007900000000000000006C0104D0045002000557C
+:1007A000005300420020007300000000000006D04B
+:1007B0001065007200690061006C0020007700691C
+:1007C00000000000000006E00E6400670065007491
+:0D07D00000060334003700000000000000A8
+:00000001FF
--
1.5.4.5
--
dwmw2
^ permalink raw reply related [flat|nested] 72+ messages in thread