Commit 1e17d774 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge git://git.infradead.org/~dwmw2/firmware-2.6

* git://git.infradead.org/~dwmw2/firmware-2.6:
  qla1280: Fix off-by-some error in firmware loading.
  Add README.AddingFirmware file. Basically telling people not to.
  firmware: Remove newly-added slicoss and sxg firmware images
  firmware/WHENCE: Add missing origin information for Ambassador atmsar11.fw
  ALSA: wavefront - Always use request_firmware()
  Remove fdump tool for av7110 firmware
  firmware: convert av7110 driver to request_firmware()
  Partially revert "V4L/DVB (9533): cx88: Add support for TurboSight TBS8910 DVB-S PCI card"
  Revert "fix modules_install via NFS"

Add-add conflicts in firmware/WHENCE fixed manually
parents d8482238 0ce49d6d
......@@ -28,25 +28,12 @@ config DVB_AV7110
download/extract it, and then copy it to /usr/lib/hotplug/firmware
or /lib/firmware (depending on configuration of firmware hotplug).
Say Y if you own such a card and want to use it.
config DVB_AV7110_FIRMWARE
bool "Compile AV7110 firmware into the driver"
depends on DVB_AV7110 && !STANDALONE
default y if DVB_AV7110=y
help
The AV7110 firmware is normally loaded by the firmware hotplug manager.
If you want to compile the firmware into the driver you need to say
Y here and provide the correct path of the firmware. You need this
option if you want to compile the whole driver statically into the
kernel.
Alternatively, you can download the file and use the kernel's
EXTRA_FIRMWARE configuration option to build it into your
kernel image by adding the filename to the EXTRA_FIRMWARE
configuration option string.
All other people say N.
config DVB_AV7110_FIRMWARE_FILE
string "Full pathname of av7110 firmware file"
depends on DVB_AV7110_FIRMWARE
default "/usr/lib/hotplug/firmware/dvb-ttpci-01.fw"
Say Y if you own such a card and want to use it.
config DVB_AV7110_OSD
bool "AV7110 OSD support"
......
......@@ -19,12 +19,3 @@ obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o
EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core/ -Idrivers/media/dvb/frontends/
EXTRA_CFLAGS += -Idrivers/media/common/tuners
hostprogs-y := fdump
ifeq ($(CONFIG_DVB_AV7110_FIRMWARE),y)
$(obj)/av7110.o: $(obj)/av7110_firm.h
$(obj)/av7110_firm.h: $(obj)/fdump
$(obj)/fdump $(CONFIG_DVB_AV7110_FIRMWARE_FILE) dvb_ttpci_fw $@
endif
......@@ -1518,20 +1518,6 @@ static int check_firmware(struct av7110* av7110)
return 0;
}
#ifdef CONFIG_DVB_AV7110_FIRMWARE_FILE
#include "av7110_firm.h"
static void put_firmware(struct av7110* av7110)
{
av7110->bin_fw = NULL;
}
static inline int get_firmware(struct av7110* av7110)
{
av7110->bin_fw = dvb_ttpci_fw;
av7110->size_fw = sizeof(dvb_ttpci_fw);
return check_firmware(av7110);
}
#else
static void put_firmware(struct av7110* av7110)
{
vfree(av7110->bin_fw);
......@@ -1580,8 +1566,6 @@ static int get_firmware(struct av7110* av7110)
release_firmware(fw);
return ret;
}
#endif
static int alps_bsrv2_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters *params)
{
......
......@@ -198,29 +198,10 @@ static int load_dram(struct av7110 *av7110, u32 *data, int len)
/* we cannot write av7110 DRAM directly, so load a bootloader into
* the DPRAM which implements a simple boot protocol */
static u8 bootcode[] = {
0xea, 0x00, 0x00, 0x0e, 0xe1, 0xb0, 0xf0, 0x0e, 0xe2, 0x5e, 0xf0, 0x04,
0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x08, 0xe2, 0x5e, 0xf0, 0x04,
0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x04, 0x2c, 0x00, 0x00, 0x24,
0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x34,
0x00, 0x00, 0x00, 0x00, 0xa5, 0xa5, 0x5a, 0x5a, 0x00, 0x1f, 0x15, 0x55,
0x00, 0x00, 0x00, 0x09, 0xe5, 0x9f, 0xd0, 0x7c, 0xe5, 0x9f, 0x40, 0x74,
0xe3, 0xa0, 0x00, 0x00, 0xe5, 0x84, 0x00, 0x00, 0xe5, 0x84, 0x00, 0x04,
0xe5, 0x9f, 0x10, 0x70, 0xe5, 0x9f, 0x20, 0x70, 0xe5, 0x9f, 0x30, 0x64,
0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, 0xe1, 0x51, 0x00, 0x02,
0xda, 0xff, 0xff, 0xfb, 0xe5, 0x9f, 0xf0, 0x50, 0xe1, 0xd4, 0x10, 0xb0,
0xe3, 0x51, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xfc, 0xe1, 0xa0, 0x10, 0x0d,
0xe5, 0x94, 0x30, 0x04, 0xe1, 0xd4, 0x20, 0xb2, 0xe2, 0x82, 0x20, 0x3f,
0xe1, 0xb0, 0x23, 0x22, 0x03, 0xa0, 0x00, 0x02, 0xe1, 0xc4, 0x00, 0xb0,
0x0a, 0xff, 0xff, 0xf4, 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0,
0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, 0xe2, 0x52, 0x20, 0x01,
0x1a, 0xff, 0xff, 0xf9, 0xe2, 0x2d, 0xdb, 0x05, 0xea, 0xff, 0xff, 0xec,
0x2c, 0x00, 0x03, 0xf8, 0x2c, 0x00, 0x04, 0x00, 0x9e, 0x00, 0x08, 0x00,
0x2c, 0x00, 0x00, 0x74, 0x2c, 0x00, 0x00, 0xc0
};
int av7110_bootarm(struct av7110 *av7110)
{
const struct firmware *fw;
const char *fw_name = "av7110/bootcode.bin";
struct saa7146_dev *dev = av7110->dev;
u32 ret;
int i;
......@@ -261,7 +242,15 @@ int av7110_bootarm(struct av7110 *av7110)
//saa7146_setgpio(dev, DEBI_DONE_LINE, SAA7146_GPIO_INPUT);
//saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT);
mwdebi(av7110, DEBISWAB, DPRAM_BASE, bootcode, sizeof(bootcode));
ret = request_firmware(&fw, fw_name, &dev->pci->dev);
if (ret) {
printk(KERN_ERR "dvb-ttpci: Failed to load firmware \"%s\"\n",
fw_name);
return ret;
}
mwdebi(av7110, DEBISWAB, DPRAM_BASE, fw->data, fw->size);
release_firmware(fw);
iwdebi(av7110, DEBINOSWAP, AV7110_BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2);
if (saa7146_wait_for_debi_done(av7110->dev, 1)) {
......@@ -302,7 +291,7 @@ int av7110_bootarm(struct av7110 *av7110)
av7110->arm_ready = 1;
return 0;
}
MODULE_FIRMWARE("av7110/bootcode.bin");
/****************************************************************************
* DEBI command polling
......
......@@ -390,7 +390,8 @@ static inline void iwdebi(struct av7110 *av7110, u32 config, int addr, u32 val,
}
/* buffer writes */
static inline void mwdebi(struct av7110 *av7110, u32 config, int addr, u8 *val, int count)
static inline void mwdebi(struct av7110 *av7110, u32 config, int addr,
const u8 *val, int count)
{
memcpy(av7110->debi_virt, val, count);
av7110_debiwrite(av7110, config, addr, 0, count);
......
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char **argv)
{
unsigned char buf[8];
unsigned int i, count, bytes = 0;
FILE *fd_in, *fd_out;
if (argc != 4) {
fprintf(stderr, "\n\tusage: %s <ucode.bin> <array_name> <output_name>\n\n", argv[0]);
return -1;
}
fd_in = fopen(argv[1], "rb");
if (fd_in == NULL) {
fprintf(stderr, "firmware file '%s' not found\n", argv[1]);
return -1;
}
fd_out = fopen(argv[3], "w+");
if (fd_out == NULL) {
fprintf(stderr, "cannot create output file '%s'\n", argv[3]);
return -1;
}
fprintf(fd_out, "\n#include <asm/types.h>\n\nu8 %s [] = {", argv[2]);
while ((count = fread(buf, 1, 8, fd_in)) > 0) {
fprintf(fd_out, "\n\t");
for (i = 0; i < count; i++, bytes++)
fprintf(fd_out, "0x%02x, ", buf[i]);
}
fprintf(fd_out, "\n};\n\n");
fclose(fd_in);
fclose(fd_out);
return 0;
}
......@@ -1663,7 +1663,7 @@ qla1280_load_firmware_pio(struct scsi_qla_host *ha)
/* Load RISC code. */
risc_address = ha->fwstart;
fw_data = (const __le16 *)&fw->data[4];
fw_data = (const __le16 *)&fw->data[6];
risc_code_size = (fw->size - 6) / 2;
for (i = 0; i < risc_code_size; i++) {
......@@ -1722,7 +1722,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha)
/* Load RISC code. */
risc_address = ha->fwstart;
fw_data = (const __le16 *)&fw->data[4];
fw_data = (const __le16 *)&fw->data[6];
risc_code_size = (fw->size - 6) / 2;
dprintk(1, "%s: DMA RISC code (%i) words\n",
......
......@@ -3,3 +3,4 @@
*.bin
*.csp
*.dsp
ihex2fw
......@@ -41,6 +41,7 @@ fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
cxgb3/t3c_psram-1.1.0.bin \
cxgb3/t3fw-7.1.0.bin
fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin
fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
e100/d102e_ucode.bin
......@@ -59,14 +60,9 @@ fw-shipped-$(CONFIG_SND_SB16_CSP) += sb16/mulaw_main.csp sb16/alaw_main.csp \
sb16/ima_adpcm_init.csp \
sb16/ima_adpcm_playback.csp \
sb16/ima_adpcm_capture.csp
fw-shipped-$(CONFIG_SLICOSS) += slicoss/gbdownload.sys slicoss/gbrcvucode.sys \
slicoss/oasisdbgdownload.sys \
slicoss/oasisdownload.sys \
slicoss/oasisrcvucode.sys
fw-shipped-$(CONFIG_SXG) += sxg/saharadownloadB.sys \
sxg/saharadbgdownloadB.sys
fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \
yamaha/ds1e_ctrl.fw
fw-shipped-$(CONFIG_SND_WAVEFRONT) += yamaha/yss225_registers.bin
fw-shipped-$(CONFIG_TEHUTI) += tehuti/bdx.bin
fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \
tigon/tg3_tso5.bin
......@@ -123,10 +119,10 @@ quiet_cmd_ihex = IHEX $@
cmd_ihex = $(OBJCOPY) -Iihex -Obinary $< $@
quiet_cmd_ihex2fw = IHEX2FW $@
cmd_ihex2fw = $(objtree)/scripts/ihex2fw $< $@
cmd_ihex2fw = $(objtree)/$(obj)/ihex2fw $< $@
quiet_cmd_h16tofw = H16TOFW $@
cmd_h16tofw = $(objtree)/scripts/ihex2fw -w $< $@
cmd_h16tofw = $(objtree)/$(obj)/ihex2fw -w $< $@
quiet_cmd_fwbin = MK_FW $@
cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)"; \
......@@ -185,15 +181,27 @@ $(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/%
$(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %)
$(call cmd,ihex)
# Don't depend on ihex2fw if we're installing and it already exists.
# Putting it after | in the dependencies doesn't seem sufficient when
# we're installing after a cross-compile, because ihex2fw has dependencies
# on stuff like /usr/lib/gcc/ppc64-redhat-linux/4.3.0/include/stddef.h and
# thus wants to be rebuilt. Which it can't be, if the prebuilt kernel tree
# is exported read-only for someone to run 'make install'.
ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw)
ihex2fw_dep :=
else
ihex2fw_dep := $(obj)/ihex2fw
endif
# .HEX is also Intel HEX, but where the offset and length in each record
# is actually meaningful, because the firmware has to be loaded in a certain
# order rather than as a single binary blob. Thus, we convert them into our
# more compact binary representation of ihex records (<linux/ihex.h>)
$(obj)/%.fw: $(obj)/%.HEX | $(objtree)/$(obj)/$$(dir %)
$(obj)/%.fw: $(obj)/%.HEX $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %)
$(call cmd,ihex2fw)
# .H16 is our own modified form of Intel HEX, with 16-bit length for records.
$(obj)/%.fw: $(obj)/%.H16 | $(objtree)/$(obj)/$$(dir %)
$(obj)/%.fw: $(obj)/%.H16 $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %)
$(call cmd,h16tofw)
$(firmware-dirs):
......@@ -210,3 +218,5 @@ targets := $(fw-shipped-) $(patsubst $(obj)/%,%, \
# Without this, built-in.o won't be created when it's empty, and the
# final vmlinux link will fail.
obj-n := dummy
hostprogs-y := ihex2fw
DO NOT ADD FIRMWARE TO THIS DIRECTORY.
======================================
This directory is only here to contain firmware images extracted from old
device drivers which predate the common use of request_firmware().
As we update those drivers to use request_firmware() and keep a clean
separation between code and firmware, we put the extracted firmware
here.
This directory is _NOT_ for adding arbitrary new firmware images. The
place to add those is the separate linux-firmware repository:
git://git.kernel.org/pub/scm/linux/kernel/git/dwmw2/linux-firmware.git
That repository contains all these firmware images which have been
extracted from older drivers, as well various new firmware images which
we were never permitted to include in a GPL'd work, but which we _have_
been permitted to redistribute under separate cover.
To submit firmware to that repository, please send either a git binary
diff or preferably a git pull request to:
David Woodhouse <dwmw2@infradead.org>
Your commit should include an update to the WHENCE file clearly
identifying the licence under which the firmware is available, and
that it is redistributable. If the licence is long and involved, it's
permitted to include it in a separate file and refer to it from the
WHENCE file.
Ideally, your commit should contain a Signed-Off-By: from someone
authoritative on the licensing of the firmware in question (i.e. from
within the company that owns the code).
......@@ -8,6 +8,24 @@ kernel.
--------------------------------------------------------------------------
Driver: ambassador -- Madge Ambassador (Collage PCI 155 Server) ATM NIC.
File: firmware/atmsar11.fw
Licence: Allegedly GPLv2+, but no source visible. Marked:
Madge Ambassador ATM Adapter microcode.
Copyright (C) 1995-1999 Madge Networks Ltd.
This microcode data is placed under the terms of the GNU General
Public License. The GPL is contained in /usr/doc/copyright/GPL on a
Debian system and in the file COPYING in the Linux kernel source.
We would prefer you not to distribute modified versions without
consultation and not to ask for assembly/other microcode source.
--------------------------------------------------------------------------
Driver: korg1212 -- Korg 1212 IO audio device
File: korg/k1212.dsp
......@@ -390,59 +408,6 @@ Found in hex form in kernel source.
--------------------------------------------------------------------------
Driver: SLICOSS - Alacritech IS-NIC products
File: slicoss/gbdownload.sys.ihex
File: slicoss/gbrcvucode.sys.ihex
File: slicoss/oasisdbgdownload.sys.ihex
File: slicoss/oasisdownload.sys.ihex
File: slicoss/oasisrcvucode.sys.ihex
Licence:
Copyright (C) 1999-2009 Alacritech, Inc.
as an unpublished work. This notice does not imply unrestricted or
public access to the source code from which this firmware image is
derived. Except as noted below this firmware image may not be
reproduced, used, sold or transferred to any third party without
Alacritech's prior written consent. All Rights Reserved.
Permission is hereby granted for the distribution of this firmware
image as part of a Linux or other Open Source operating system kernel
in text or binary form as required.
This firmware may not be modified and may only be used with
Alacritech hardware.
Found in hex form in kernel source.
--------------------------------------------------------------------------
Driver: SXG - Alacritech IS-NIC products
File: sxg/saharadownloadB.sys.ihex
File: sxg/saharadbgdownloadB.sys.ihex
Licence:
Copyright (C) 1999-2009 Alacritech, Inc.
as an unpublished work. This notice does not imply unrestricted or
public access to the source code from which this firmware image is
derived. Except as noted below this firmware image may not be
reproduced, used, sold or transferred to any third party without
Alacritech's prior written consent. All Rights Reserved.
Permission is hereby granted for the distribution of this firmware
image as part of a Linux or other Open Source operating system kernel
in text or binary form as required.
This firmware may not be modified and may only be used with
Alacritech hardware.
Found in hex form in kernel source.
--------------------------------------------------------------------------
Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter
File: cxgb3/t3b_psram-1.1.0.bin.ihex
......@@ -662,3 +627,24 @@ Licence:
Found in hex form in kernel source.
--------------------------------------------------------------------------
Driver: DVB AV7110 -- AV7110 cards
File: av7110/bootcode.bin
Licence: GPLv2 or later
ARM assembly source code available at http://www.linuxtv.org/downloads/firmware/Boot.S
--------------------------------------------------------------------------
Driver: wavefront - ISA WaveFront sound card
File: yamaha/yss225_registers.bin
Licence: Allegedly GPLv2+, but no source visible.
Found in hex form in kernel source, with the following comment:
Copyright (c) 1998-2002 by Paul Davis <pbd@op.net>
--------------------------------------------------------------------------
/*
Boot.S: boot loader for Siemens DVB-S card
Copyright (C) 2001 Convergence integrated media GmbH
Written by Ralph Metzler
<rjkm@convergence.de>
Copyright (C) 2006 Matthieu CASTET <castet.mattheiu@free.fr>
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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/*
check AV711x_3_1.pdf for some hardware infos
build it with :
$ cc -mbig-endian -c Boot.S
$ ld -Ttext 0x2c000000 -EB -o Boot Boot.o
$ objcopy -Obinary Boot
*/
.text
.align
.globl _start
_start:
b reset // reset vector
movs pc, r14 // undefined
subs pc, r14, #4 // SWI
subs pc, r14, #4 // prefetch abort
subs pc, r14, #8 // data abort
subs pc, r14, #4 // reserved
subs pc, r14, #4 // IRQ
subs pc, r14, #4 // FIQ
.word tbl // table needed by firmware ROM
tbl: .word (endtbl - tbl)
.word 0
.word conf
endtbl: .word 0
conf: .word 0xa5a55a5a
.word 0x001f1555
.word 0x00000009
reset: ldr r13, buffer
ldr r4, flag
mov r0, #0
str r0, [r4]
str r0, [r4, #4]
ldr r1, wait_address
ldr r2, flag_address
ldr r3, sram
copycode: // copy the code HW Sram
ldmia r1!, {r5-r12}
stmia r3!, {r5-r12}
cmp r1, r2
ble copycode
ldr pc, sram // jump to the copied code
wait: ldrh r1, [r4] // wait for flag!=0
cmp r1, #0
beq wait
mov r1, r13 // buffer address
ldr r3, [r4,#4] // destaddr
ldrh r2, [r4,#2] // get segment length
add r2, r2, #63 // round length to next 64 bytes
movs r2, r2, lsr #6 // and divide by 64
moveq r0, #2 // if 0, set flag to 2, else signal
strh r0, [r4] // that buffer is accepted by setting to 0
beq wait
copyloop:
ldmia r1!, {r5-r12}
stmia r3!, {r5-r12}
ldmia r1!, {r5-r12}
stmia r3!, {r5-r12}
subs r2, r2, #1
bne copyloop
eor r13, r13, #0x1400 // switch to other buffer
b wait
// flag is stored at 0x2c0003f8, length at 0x2c0003fa,
// destaddr at 0x2c0003fc
flag: .word 0x2c0003f8
// buffer 1 is at 0x2c000400, buffer 2 at 0x2c001000
buffer: .word 0x2c000400
sram: .word 0x9e000800
wait_address: .word wait
flag_address: .word flag
:10000000EA00000EE1B0F00EE25EF004E25EF00401
:10001000E25EF008E25EF004E25EF004E25EF0040C
:100020002C0000240000000C000000002C00003414
:1000300000000000A5A55A5A001F15550000000930
:10004000E59FD07CE59F4074E3A00000E5840000BC
:10005000E5840004E59F1070E59F2070E59F306403
:10006000E8B11FE0E8A31FE0E1510002DAFFFFFB67
:10007000E59FF050E1D410B0E35100000AFFFFFC0F
:10008000E1A0100DE5943004E1D420B2E282203FDB
:10009000E1B0232203A00002E1C400B00AFFFFF494
:1000A000E8B11FE0E8A31FE0E8B11FE0E8A31FE00C
:1000B000E25220011AFFFFF9E22DDB05EAFFFFEC17
:1000C0002C0003F82C0004009E0008002C00007493
:0400D0002C0000C040
:00000001FF
This diff is collapsed.
:10000000000200004775010004A01301001CB75B4B
:10001000093000B65F01001C00000020183B783A50
:10002000001CA27701001C071D017018AD7BF1FFB9
:100030001CB37BA9AA1EB47B010C1CB57B29061C32
:1000400000005064080C315A70040C315A80040CC2
:10005000314E90040C314AA000092555C0040C31E2
:1000600052B000E92455C004CCB3001C1CEB2D0198
:10007000001C065652D408079D00001C7BB70200E6
:1000800010A00F51540906565EC004A0307403003E
:10009000AC30750300CD033A001C7BB702001C6036
:1000A0008E5154092925750300808E5154098C30D6
:1000B000910004471C01001CA00F5154090000646A
:1000C0000004471C65C004471C7503006C30010028
:1000D0001C4D3402001C7BB702001CA00F515409B8
:1000E000C88337001C800100001C0000640004A0CD
:1000F0000F505409000074C3047BFBF2001CCC3386
:100100000D001CB47BFD031C800E505409E0FB0560
:10011000001C0000AC0300B30F5154090000EC7048
:10012000040000EC80040000AC93006176ADC304D1
:10013000C08D515409E07B00C01FA0FDC50100CC5B
:100140003305001CD403003C1CD4D31B001CC0D3BB
:1001500052001C00007C13048E8E5254095B807E7A
:100160001304000000001C0000940100A00F515473
:1001700009A00F515409C003FC7F1CA001A001007D
:100180000000A40100A00F515409C003FC031CF59A
:100190007701001C267A02061CA00F515409B30FE8
:1001A000515409B50202001CA00F5154097A7E0275
:1001B000001CB50202001C530F525409AF0301008A
:1001C0001C7A0E525409B50202001C000002001CE9
:1001D000A03DAA11040000AC1104D4D352001CB5F8
:1001E0003EB2010020FBFDFF1F802C8C0300B93ABA
:1001F0009E0100753B02001CA71C010010DB83164A
:10020000001CC71D21C104B93B8DC1048B2C01000A
:100210001C6B2C35C1040000781100CB2C79C10473
:10022000A00F515409A00F51540954D002001C4989
:1002300025B10100AB2C81C104A71D750300CC338F
:1002400009001CEB2D01001CEA2901001CA00F5124
:100250005409AE0F515409A00F515409D407FC039F
:100260001C993A02001CBB3802001C003800001C1C
:100270000000FC0104DB3B7E001CC71D01001C26A6
:100280007A16061C271D01001CB30F5154097A0E63
:10029000525409530F5254097A0E525409530F52B3
:1002A00054097A0E525409530F525409A00F515455
:1002B000097A0602001C530F525409AF0301001CB7
:1002C0007A0E525409530F5254097A0E525409535C
:1002D0000F5254097A0E525409530F5254097A0E90
:1002E000525409003D02001C0000581200CB2C01A2
:1002F000001C753B02001CA71C010010A67BFD051D
:100300001C000090C204A67BFD051C0000A8C204CE
:10031000CB2F05001C602C00001CC71CE90200A0AC
:100320000F515409530702001CC083F1321C000016
:10033000600204467AE6051C7A0E525409C083F125
:10034000321C000068020440FA15001C0000A802DC
:1003500004467AE6051CA00F515409A00F51540918
:10036000A00F515409A00F515409B37B01C01F7451
:100370000E505409C0039C001C8000F802000000CD
:10038000F802040000CC1205071D01001CD4D32B79
:10039000001CD4D352001C80769D1304000000037F