Merge branch 'next' of ../next

* 'next' of ../next:
  mkenvimage: Add version info switch (-V)
  mkenvimage: Fix getopt() error handling
  mkenvimage: Fix some typos
  phy: add Micrel KS8721BL phy definition
  net: introduce per device index
  mvgbe: remove setting of ethaddr within the driver
  x86: Add support for specifying an initrd with the zboot command
  x86: Refactor the zboot innards so they can be reused with a vboot image
  x86: Add infrastructure to extract an e820 table from the coreboot tables
  x86: Add support for booting Linux using the 32 bit boot protocol
  x86: Clean up the x86 zimage code in preparation to extend it
  x86: Import code from coreboot's libpayload to parse the coreboot table
  x86: Initial commit for running as a coreboot payload
  CHECKPATCH: ./board/esd/hh405/logo_320_240_8bpp.c
  CHECKPATCH: ./board/esd/hh405/logo_1024_768_8bpp.c
  CHECKPATCH: ./board/esd/hh405/logo_320_240_4bpp.c
  CHECKPATCH: ./board/esd/hh405/logo_640_480_24bpp.c
  CHECKPATCH: ./board/esd/apc405/logo_640_480_24bpp.c
  CHECKPATCH: ./board/esd/voh405/logo_320_240_4bpp.c
  CHECKPATCH: ./board/esd/voh405/logo_640_480_24bpp.c
  CHECKPATCH: ./board/esd/hh405/fpgadata.c
  CHECKPATCH: ./board/esd/pci405/fpgadata.c
  CHECKPATCH: ./board/esd/tasreg/fpgadata.c
  CHECKPATCH: ./board/esd/apc405/fpgadata.c
  CHECKPATCH: ./board/esd/voh405/fpgadata.c
  CHECKPATCH: ./board/esd/ash405/fpgadata.c
  CHECKPATCH: ./board/esd/dasa_sim/fpgadata.c
  CHECKPATCH: ./board/esd/ar405/fpgadata_xl30.c
  CHECKPATCH: ./board/esd/ar405/fpgadata.c
  CHECKPATCH: ./board/esd/plu405/fpgadata.c
  CHECKPATCH: ./board/esd/wuh405/fpgadata.c
  CHECKPATCH: ./board/esd/cpci405/fpgadata_cpci405.c
  CHECKPATCH: ./board/esd/cpci405/fpgadata_cpci405ab.c
  CHECKPATCH: ./board/esd/cpci405/fpgadata_cpci4052.c
  CHECKPATCH: ./board/esd/canbt/fpgadata.c
  CHECKPATCH: ./board/esd/du405/fpgadata.c
  CHECKPATCH: ./board/esd/cpciiser4/fpgadata.c
  CHECKPATCH: ./board/dave/PPChameleonEVB/fpgadata.c
  avr32:mmu.c: fix printf() length modifier
  fat.c: fix printf() length modifier
  cmd_sf.c: fix printf() length modifier
  Make printf and vprintf safe from buffer overruns
  vsprintf: Move function documentation into header file
  Add safe vsnprintf and snprintf library functions
  Move vsprintf functions into their own header

Conflicts:
	tools/mkenvimage.c

Signed-off-by: Wolfgang Denk <wd@denx.de>
master
Wolfgang Denk 13 years ago
commit bfcc40bb09
  1. 9
      README
  2. 2
      arch/avr32/cpu/at32ap700x/mmu.c
  3. 58
      arch/x86/cpu/coreboot/Makefile
  4. 25
      arch/x86/cpu/coreboot/asm-offsets.c
  5. 29
      arch/x86/cpu/coreboot/coreboot_car.S
  6. 54
      arch/x86/cpu/coreboot/ipchecksum.c
  7. 75
      arch/x86/cpu/coreboot/sdram.c
  8. 39
      arch/x86/cpu/coreboot/sysinfo.c
  9. 183
      arch/x86/cpu/coreboot/tables.c
  10. 37
      arch/x86/include/asm/arch-coreboot/ipchecksum.h
  11. 63
      arch/x86/include/asm/arch-coreboot/sysinfo.h
  12. 241
      arch/x86/include/asm/arch-coreboot/tables.h
  13. 36
      arch/x86/include/asm/zimage.h
  14. 21
      arch/x86/lib/bootm.c
  15. 276
      arch/x86/lib/zimage.c
  16. 53
      board/chromebook-x86/coreboot/Makefile
  17. 87
      board/chromebook-x86/coreboot/coreboot.c
  18. 30
      board/chromebook-x86/coreboot/coreboot_pci.c
  19. 29
      board/chromebook-x86/coreboot/coreboot_start.S
  20. 46
      board/chromebook-x86/coreboot/coreboot_start16.S
  21. 3416
      board/dave/PPChameleonEVB/fpgadata.c
  22. 6012
      board/esd/apc405/fpgadata.c
  23. 1694
      board/esd/apc405/logo_640_480_24bpp.c
  24. 8250
      board/esd/ar405/fpgadata.c
  25. 7308
      board/esd/ar405/fpgadata_xl30.c
  26. 7475
      board/esd/ash405/fpgadata.c
  27. 1211
      board/esd/canbt/fpgadata.c
  28. 1025
      board/esd/cpci405/fpgadata_cpci405.c
  29. 2294
      board/esd/cpci405/fpgadata_cpci4052.c
  30. 3854
      board/esd/cpci405/fpgadata_cpci405ab.c
  31. 6204
      board/esd/cpciiser4/fpgadata.c
  32. 5855
      board/esd/dasa_sim/fpgadata.c
  33. 2108
      board/esd/du405/fpgadata.c
  34. 7551
      board/esd/hh405/fpgadata.c
  35. 7631
      board/esd/hh405/logo_1024_768_8bpp.c
  36. 681
      board/esd/hh405/logo_320_240_4bpp.c
  37. 1563
      board/esd/hh405/logo_320_240_8bpp.c
  38. 12626
      board/esd/hh405/logo_640_480_24bpp.c
  39. 2238
      board/esd/pci405/fpgadata.c
  40. 3537
      board/esd/plu405/fpgadata.c
  41. 15992
      board/esd/tasreg/fpgadata.c
  42. 6032
      board/esd/voh405/fpgadata.c
  43. 230
      board/esd/voh405/logo_320_240_4bpp.c
  44. 5165
      board/esd/voh405/logo_640_480_24bpp.c
  45. 5454
      board/esd/wuh405/fpgadata.c
  46. 1
      boards.cfg
  47. 4
      common/cmd_sf.c
  48. 10
      common/console.c
  49. 23
      drivers/net/mvgbe.c
  50. 11
      drivers/net/phy/micrel.c
  51. 2
      fs/fat/fat.c
  52. 11
      include/common.h
  53. 225
      include/configs/coreboot.h
  54. 1
      include/net.h
  55. 2
      include/serial.h
  56. 181
      include/vsprintf.h
  57. 237
      lib/vsprintf.c
  58. 41
      net/eth.c
  59. 23
      tools/mkenvimage.c

@ -655,6 +655,15 @@ The following options need to be configured:
to get the character out. Baud rates will need to default
to something sensible.
- Safe printf() functions
Define CONFIG_SYS_VSNPRINTF to compile in safe versions of
the printf() functions. These are defined in
include/vsprintf.h and include snprintf(), vsnprintf() and
so on. Code size increase is approximately 300-500 bytes.
If this option is not given then these functions will
silently discard their buffer size argument - this means
you are not getting any overflow checking in this case.
- Boot Delay: CONFIG_BOOTDELAY - in seconds
Delay before automatically booting the default image;
set to -1 to disable autoboot.

@ -22,7 +22,7 @@ void mmu_init_r(unsigned long dest_addr)
*/
vmr_table_addr = (uintptr_t)&mmu_vmr_table;
sysreg_write(PTBR, vmr_table_addr);
printf("VMR table @ 0x%08x\n", vmr_table_addr);
printf("VMR table @ 0x%08lx\n", vmr_table_addr);
/* Enable paging */
sysreg_write(MMUCR, SYSREG_BF(DRP, 1) | SYSREG_BF(DLA, 1)

@ -0,0 +1,58 @@
#
# Copyright (c) 2011 The Chromium OS Authors.
#
# (C) Copyright 2008
# Graeme Russ, graeme.russ@gmail.com.
#
# (C) Copyright 2006
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
#
# (C) Copyright 2002
# Daniel Engström, Omicron Ceti AB, daniel@omicron.se.
#
# See file CREDITS for list of people who contributed to this
# project.
#
# 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., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#
include $(TOPDIR)/config.mk
LIB := $(obj)lib$(SOC).o
COBJS-$(CONFIG_SYS_COREBOOT) += tables.o
COBJS-$(CONFIG_SYS_COREBOOT) += ipchecksum.o
COBJS-$(CONFIG_SYS_COREBOOT) += sdram.o
COBJS-$(CONFIG_SYS_COREBOOT) += sysinfo.o
SOBJS-$(CONFIG_SYS_COREBOOT) += coreboot_car.o
SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
all: $(obj).depend $(LIB)
$(LIB): $(OBJS)
$(call cmd_link_o_target, $(OBJS))
#########################################################################
# defines $(obj).depend target
include $(SRCTREE)/rules.mk
sinclude $(obj).depend
#########################################################################

@ -0,0 +1,25 @@
/*
* Adapted from Linux v2.6.36 kernel: arch/powerpc/kernel/asm-offsets.c
*
* This program is used to generate definitions needed by
* assembly language modules.
*
* We use the technique used in the OSF Mach kernel code:
* generate asm statements containing #defines,
* compile this file to assembler, and then extract the
* #defines from the assembly-language output.
*
* 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.
*/
#include <common.h>
#include <linux/kbuild.h>
int main(void)
{
DEFINE(GENERATED_GD_RELOC_OFF, offsetof(gd_t, reloc_off));
return 0;
}

@ -0,0 +1,29 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2010-2011
* Graeme Russ, <graeme.russ@gmail.com>
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
.section .text
.globl car_init
car_init:
jmp car_init_ret

@ -0,0 +1,54 @@
/*
* This file is part of the libpayload project.
*
* It has originally been taken from the FreeBSD project.
*
* Copyright (c) 2001 Charles Mott <cm@linktel.net>
* Copyright (c) 2008 coresystems GmbH
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <compiler.h>
#include <asm/arch-coreboot/ipchecksum.h>
unsigned short ipchksum(const void *vptr, unsigned long nbytes)
{
int sum, oddbyte;
const unsigned short *ptr = vptr;
sum = 0;
while (nbytes > 1) {
sum += *ptr++;
nbytes -= 2;
}
if (nbytes == 1) {
oddbyte = 0;
((u8 *)&oddbyte)[0] = *(u8 *) ptr;
((u8 *)&oddbyte)[1] = 0;
sum += oddbyte;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
return ~sum;
}

@ -0,0 +1,75 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2010,2011
* Graeme Russ, <graeme.russ@gmail.com>
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#include <common.h>
#include <malloc.h>
#include <asm/e820.h>
#include <asm/u-boot-x86.h>
#include <asm/global_data.h>
#include <asm/arch-coreboot/sysinfo.h>
#include <asm/arch-coreboot/tables.h>
DECLARE_GLOBAL_DATA_PTR;
unsigned install_e820_map(unsigned max_entries, struct e820entry *entries)
{
int i;
unsigned num_entries = min(lib_sysinfo.n_memranges, max_entries);
if (num_entries < lib_sysinfo.n_memranges) {
printf("Warning: Limiting e820 map to %d entries.\n",
num_entries);
}
for (i = 0; i < num_entries; i++) {
struct memrange *memrange = &lib_sysinfo.memrange[i];
entries[i].addr = memrange->base;
entries[i].size = memrange->size;
entries[i].type = memrange->type;
}
return num_entries;
}
int dram_init_f(void)
{
int i;
phys_size_t ram_size = 0;
for (i = 0; i < lib_sysinfo.n_memranges; i++) {
struct memrange *memrange = &lib_sysinfo.memrange[i];
unsigned long long end = memrange->base + memrange->size;
if (memrange->type == CB_MEM_RAM && end > ram_size)
ram_size = end;
}
gd->ram_size = ram_size;
if (ram_size == 0)
return -1;
return 0;
}
int dram_init(void)
{
return 0;
}

@ -0,0 +1,39 @@
/*
* This file is part of the libpayload project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
* Copyright (C) 2009 coresystems GmbH
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <asm/arch-coreboot/sysinfo.h>
/*
* This needs to be in the .data section so that it's copied over during
* relocation. By default it's put in the .bss section which is simply filled
* with zeroes when transitioning from "ROM", which is really RAM, to other
* RAM.
*/
struct sysinfo_t lib_sysinfo __attribute__((section(".data")));

@ -0,0 +1,183 @@
/*
* This file is part of the libpayload project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
* Copyright (C) 2009 coresystems GmbH
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <asm/arch-coreboot/ipchecksum.h>
#include <asm/arch-coreboot/sysinfo.h>
#include <asm/arch-coreboot/tables.h>
/*
* Some of this is x86 specific, and the rest of it is generic. Right now,
* since we only support x86, we'll avoid trying to make lots of infrastructure
* we don't need. If in the future, we want to use coreboot on some other
* architecture, then take out the generic parsing code and move it elsewhere.
*/
/* === Parsing code === */
/* This is the generic parsing code. */
static void cb_parse_memory(unsigned char *ptr, struct sysinfo_t *info)
{
struct cb_memory *mem = (struct cb_memory *)ptr;
int count = MEM_RANGE_COUNT(mem);
int i;
if (count > SYSINFO_MAX_MEM_RANGES)
count = SYSINFO_MAX_MEM_RANGES;
info->n_memranges = 0;
for (i = 0; i < count; i++) {
struct cb_memory_range *range =
(struct cb_memory_range *)MEM_RANGE_PTR(mem, i);
info->memrange[info->n_memranges].base =
UNPACK_CB64(range->start);
info->memrange[info->n_memranges].size =
UNPACK_CB64(range->size);
info->memrange[info->n_memranges].type = range->type;
info->n_memranges++;
}
}
static void cb_parse_serial(unsigned char *ptr, struct sysinfo_t *info)
{
struct cb_serial *ser = (struct cb_serial *)ptr;
if (ser->type != CB_SERIAL_TYPE_IO_MAPPED)
return;
info->ser_ioport = ser->baseaddr;
}
static void cb_parse_optiontable(unsigned char *ptr, struct sysinfo_t *info)
{
info->option_table = (struct cb_cmos_option_table *)ptr;
}
static void cb_parse_checksum(unsigned char *ptr, struct sysinfo_t *info)
{
struct cb_cmos_checksum *cmos_cksum = (struct cb_cmos_checksum *)ptr;
info->cmos_range_start = cmos_cksum->range_start;
info->cmos_range_end = cmos_cksum->range_end;
info->cmos_checksum_location = cmos_cksum->location;
}
static void cb_parse_framebuffer(unsigned char *ptr, struct sysinfo_t *info)
{
info->framebuffer = (struct cb_framebuffer *)ptr;
}
static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
{
struct cb_header *header;
unsigned char *ptr = (unsigned char *)addr;
int i;
for (i = 0; i < len; i += 16, ptr += 16) {
header = (struct cb_header *)ptr;
if (!strncmp((const char *)header->signature, "LBIO", 4))
break;
}
/* We walked the entire space and didn't find anything. */
if (i >= len)
return -1;
if (!header->table_bytes)
return 0;
/* Make sure the checksums match. */
if (ipchksum((u16 *) header, sizeof(*header)) != 0)
return -1;
if (ipchksum((u16 *) (ptr + sizeof(*header)),
header->table_bytes) != header->table_checksum)
return -1;
/* Now, walk the tables. */
ptr += header->header_bytes;
for (i = 0; i < header->table_entries; i++) {
struct cb_record *rec = (struct cb_record *)ptr;
/* We only care about a few tags here (maybe more later). */
switch (rec->tag) {
case CB_TAG_FORWARD:
return cb_parse_header(
(void *)(unsigned long)
((struct cb_forward *)rec)->forward,
len, info);
continue;
case CB_TAG_MEMORY:
cb_parse_memory(ptr, info);
break;
case CB_TAG_SERIAL:
cb_parse_serial(ptr, info);
break;
case CB_TAG_CMOS_OPTION_TABLE:
cb_parse_optiontable(ptr, info);
break;
case CB_TAG_OPTION_CHECKSUM:
cb_parse_checksum(ptr, info);
break;
/*
* FIXME we should warn on serial if coreboot set up a
* framebuffer buf the payload does not know about it.
*/
case CB_TAG_FRAMEBUFFER:
cb_parse_framebuffer(ptr, info);
break;
}
ptr += rec->size;
}
return 1;
}
/* == Architecture specific == */
/* This is the x86 specific stuff. */
/* Assume no translation or that memory is identity mapped. */
static void *phys_to_virt(unsigned long virt)
{
return (void *)(uintptr_t)virt;
}
int get_coreboot_info(struct sysinfo_t *info)
{
int ret = cb_parse_header(phys_to_virt(0x00000000), 0x1000, info);
if (ret != 1)
ret = cb_parse_header(phys_to_virt(0x000f0000), 0x1000, info);
return (ret == 1) ? 0 : -1;
}

@ -0,0 +1,37 @@
/*
* This file is part of the libpayload project.
*
* It has originally been taken from the FreeBSD project.
*
* Copyright (c) 2001 Charles Mott <cm@linktel.net>
* Copyright (c) 2008 coresystems GmbH
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _COREBOOT_IPCHECKSUM_H
#define _COREBOOT_IPCHECKSUM_H
unsigned short ipchksum(const void *vptr, unsigned long nbytes);
#endif

@ -0,0 +1,63 @@
/*
* This file is part of the libpayload project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _COREBOOT_SYSINFO_H
#define _COREBOOT_SYSINFO_H
#include <compiler.h>
/* Allow a maximum of 16 memory range definitions. */
#define SYSINFO_MAX_MEM_RANGES 16
struct sysinfo_t {
unsigned int cpu_khz;
unsigned short ser_ioport;
unsigned long ser_base; /* for mmapped serial */
int n_memranges;
struct memrange {
unsigned long long base;
unsigned long long size;
unsigned int type;
} memrange[SYSINFO_MAX_MEM_RANGES];
struct cb_cmos_option_table *option_table;
u32 cmos_range_start;
u32 cmos_range_end;
u32 cmos_checksum_location;
struct cb_framebuffer *framebuffer;
unsigned long *mbtable; /** Pointer to the multiboot table */
};
extern struct sysinfo_t lib_sysinfo;
#endif

@ -0,0 +1,241 @@
/*
* This file is part of the libpayload project.
*
* Copyright (C) 2008 Advanced Micro Devices, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _COREBOOT_TABLES_H
#define _COREBOOT_TABLES_H
#include <compiler.h>
struct cbuint64 {
u32 lo;
u32 hi;
};
struct cb_header {
u8 signature[4];
u32 header_bytes;
u32 header_checksum;
u32 table_bytes;
u32 table_checksum;
u32 table_entries;
};
struct cb_record {
u32 tag;
u32 size;
};
#define CB_TAG_UNUSED 0x0000
#define CB_TAG_MEMORY 0x0001
struct cb_memory_range {
struct cbuint64 start;
struct cbuint64 size;
u32 type;
};
#define CB_MEM_RAM 1
#define CB_MEM_RESERVED 2
#define CB_MEM_ACPI 3
#define CB_MEM_NVS 4
#define CB_MEM_UNUSABLE 5
#define CB_MEM_VENDOR_RSVD 6
#define CB_MEM_TABLE 16
struct cb_memory {
u32 tag;
u32 size;
struct cb_memory_range map[0];
};
#define CB_TAG_HWRPB 0x0002
struct cb_hwrpb {
u32 tag;
u32 size;
u64 hwrpb;
};
#define CB_TAG_MAINBOARD 0x0003
struct cb_mainboard {
u32 tag;
u32 size;
u8 vendor_idx;
u8 part_number_idx;
u8 strings[0];
};
#define CB_TAG_VERSION 0x0004
#define CB_TAG_EXTRA_VERSION 0x0005
#define CB_TAG_BUILD 0x0006
#define CB_TAG_COMPILE_TIME 0x0007
#define CB_TAG_COMPILE_BY 0x0008
#define CB_TAG_COMPILE_HOST 0x0009
#define CB_TAG_COMPILE_DOMAIN 0x000a
#define CB_TAG_COMPILER 0x000b
#define CB_TAG_LINKER 0x000c
#define CB_TAG_ASSEMBLER 0x000d
struct cb_string {
u32 tag;
u32 size;
u8 string[0];
};
#define CB_TAG_SERIAL 0x000f
struct cb_serial {
u32 tag;
u32 size;
#define CB_SERIAL_TYPE_IO_MAPPED 1
#define CB_SERIAL_TYPE_MEMORY_MAPPED 2
u32 type;
u32 baseaddr;
u32 baud;
};
#define CB_TAG_CONSOLE 0x00010
struct cb_console {
u32 tag;
u32 size;
u16 type;
};
#define CB_TAG_CONSOLE_SERIAL8250 0
#define CB_TAG_CONSOLE_VGA 1 /* OBSOLETE */
#define CB_TAG_CONSOLE_BTEXT 2 /* OBSOLETE */
#define CB_TAG_CONSOLE_LOGBUF 3
#define CB_TAG_CONSOLE_SROM 4 /* OBSOLETE */
#define CB_TAG_CONSOLE_EHCI 5
#define CB_TAG_FORWARD 0x00011
struct cb_forward {
u32 tag;
u32 size;
u64 forward;
};
#define CB_TAG_FRAMEBUFFER 0x0012
struct cb_framebuffer {
u32 tag;
u32 size;
u64 physical_address;
u32 x_resolution;
u32 y_resolution;
u32 bytes_per_line;
u8 bits_per_pixel;
u8 red_mask_pos;
u8 red_mask_size;
u8 green_mask_pos;
u8 green_mask_size;
u8 blue_mask_pos;
u8 blue_mask_size;
u8 reserved_mask_pos;
u8 reserved_mask_size;
};
#define CB_TAG_CMOS_OPTION_TABLE 0x00c8
struct cb_cmos_option_table {
u32 tag;
u32 size;
u32 header_length;
};
#define CB_TAG_OPTION 0x00c9
#define CMOS_MAX_NAME_LENGTH 32
struct cb_cmos_entries {
u32 tag;
u32 size;
u32 bit;
u32 length;
u32 config;
u32 config_id;
u8 name[CMOS_MAX_NAME_LENGTH];
};
#define CB_TAG_OPTION_ENUM 0x00ca
#define CMOS_MAX_TEXT_LENGTH 32
struct cb_cmos_enums {
u32 tag;
u32 size;
u32 config_id;
u32 value;
u8 text[CMOS_MAX_TEXT_LENGTH];
};
#define CB_TAG_OPTION_DEFAULTS 0x00cb
#define CMOS_IMAGE_BUFFER_SIZE 128
struct cb_cmos_defaults {
u32 tag;
u32 size;
u32 name_length;
u8 name[CMOS_MAX_NAME_LENGTH];
u8 default_set[CMOS_IMAGE_BUFFER_SIZE];
};
#define CB_TAG_OPTION_CHECKSUM 0x00cc
#define CHECKSUM_NONE 0
#define CHECKSUM_PCBIOS 1
struct cb_cmos_checksum {
u32 tag;
u32 size;
u32 range_start;
u32 range_end;
u32 location;
u32 type;
};
/* Helpful macros */
#define MEM_RANGE_COUNT(_rec) \
(((_rec)->size - sizeof(*(_rec))) / sizeof((_rec)->map[0]))
#define MEM_RANGE_PTR(_rec, _idx) \
(((u8 *) (_rec)) + sizeof(*(_rec)) \
+ (sizeof((_rec)->map[0]) * (_idx)))
#define MB_VENDOR_STRING(_mb) \
(((unsigned char *) ((_mb)->strings)) + (_mb)->vendor_idx)
#define MB_PART_STRING(_mb) \
(((unsigned char *) ((_mb)->strings)) + (_mb)->part_number_idx)
#define UNPACK_CB64(_in) \
((((u64) _in.hi) << 32) | _in.lo)
struct sysinfo_t;
int get_coreboot_info(struct sysinfo_t *info);
#endif

@ -24,30 +24,12 @@
#ifndef _ASM_ZIMAGE_H_
#define _ASM_ZIMAGE_H_
#include <asm/bootparam.h>
#include <asm/e820.h>
/* linux i386 zImage/bzImage header. Offsets relative to
* the start of the image */
#define CMD_LINE_MAGIC_OFF 0x020 /* Magic 0xa33f if the offset below is valid */
#define CMD_LINE_OFFSET_OFF 0x022 /* Offset to comandline */
#define SETUP_SECTS_OFF 0x1F1 /* The size of the setup in sectors */
#define ROOT_FLAGS_OFF 0x1F2 /* If set, the root is mounted readonly */
#define VID_MODE_OFF 0x1FA /* Video mode control */
#define ROOT_DEV_OFF 0x1FC /* Default root device number */
#define BOOT_FLAG_OFF 0x1FE /* 0xAA55 magic number */
#define HEADER_OFF 0x202 /* Magic signature "HdrS" */
#define VERSION_OFF 0x206 /* Boot protocol version supported */
#define REALMODE_SWTCH_OFF 0x208 /* Boot loader hook (see below) */
#define START_SYS_OFF 0x20C /* Points to kernel version string */
#define TYPE_OF_LOADER_OFF 0x210 /* Boot loader identifier */
#define LOADFLAGS_OFF 0x211 /* Boot protocol option flags */
#define SETUP_MOVE_SIZE_OFF 0x212 /* Move to high memory size (used with hooks) */
#define CODE32_START_OFF 0x214 /* Boot loader hook (see below) */
#define RAMDISK_IMAGE_OFF 0x218 /* initrd load address (set by boot loader) */
#define RAMDISK_SIZE_OFF 0x21C /* initrd size (set by boot loader) */
#define HEAP_END_PTR_OFF 0x224 /* Free memory after setup end */
#define CMD_LINE_PTR_OFF 0x228 /* 32-bit pointer to the kernel command line */
#define HEAP_FLAG 0x80
#define BIG_KERNEL_FLAG 0x01
@ -65,10 +47,14 @@
#define BZIMAGE_LOAD_ADDR 0x100000
#define ZIMAGE_LOAD_ADDR 0x10000
void *load_zimage(char *image, unsigned long kernel_size,
unsigned long initrd_addr, unsigned long initrd_size,
int auto_boot);
/* Implementation defined function to install an e820 map. */
unsigned install_e820_map(unsigned max_entries, struct e820entry *);
struct boot_params *load_zimage(char *image, unsigned long kernel_size,
void **load_address);
int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
unsigned long initrd_addr, unsigned long initrd_size);
void boot_zimage(void *setup_base);
void boot_zimage(void *setup_base, void *load_address);
#endif

@ -28,16 +28,20 @@
#include <command.h>
#include <image.h>
#include <u-boot/zlib.h>
#include <asm/bootparam.h>
#include <asm/byteorder.h>
#include <asm/zimage.h>
#define COMMAND_LINE_OFFSET 0x9000
/*cmd_boot.c*/
int do_bootm_linux(int flag, int argc, char * const argv[],
bootm_headers_t *images)
{
void *base_ptr = NULL;
ulong os_data, os_len;
image_header_t *hdr;
struct boot_params *base_ptr = NULL;
ulong os_data, os_len;
image_header_t *hdr;
void *load_address;
#if defined(CONFIG_FIT)
const void *data;
@ -74,14 +78,19 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
}
#ifdef CONFIG_CMD_ZBOOT
base_ptr = load_zimage((void *)os_data, os_len,
images->rd_start, images->rd_end - images->rd_start, 0);
base_ptr = load_zimage((void *)os_data, os_len, &load_address);
#endif
if (NULL == base_ptr) {
printf("## Kernel loading failed ...\n");
goto error;
}
if (setup_zimage(base_ptr, (char *)base_ptr + COMMAND_LINE_OFFSET,
0, images->rd_start,
images->rd_end - images->rd_start)) {
printf("## Setting up boot parameters failed ...\n");
goto error;
}
#ifdef DEBUG
@ -92,7 +101,7 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
/* we assume that the kernel is in place */
printf("\nStarting kernel ...\n\n");
boot_zimage(base_ptr);
boot_zimage(base_ptr, load_address);
/* does not return */
error:

@ -1,4 +1,5 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2002
* Daniel Engström, Omicron Ceti AB, <daniel@omicron.se>
*
@ -51,6 +52,16 @@
#define COMMAND_LINE_SIZE 2048
unsigned generic_install_e820_map(unsigned max_entries,
struct e820entry *entries)
{
return 0;
}
unsigned install_e820_map(unsigned max_entries,
struct e820entry *entries)
__attribute__((weak, alias("generic_install_e820_map")));
static void build_command_line(char *command_line, int auto_boot)
{
char *env_command_line;
@ -78,40 +89,47 @@ static void build_command_line(char *command_line, int auto_boot)
printf("Kernel command line: \"%s\"\n", command_line);
}
void *load_zimage(char *image, unsigned long kernel_size,
unsigned long initrd_addr, unsigned long initrd_size,
int auto_boot)
static int kernel_magic_ok(struct setup_header *hdr)
{
void *setup_base;
int setup_size;
int bootproto;
int big_image;
void *load_address;
struct setup_header *hdr;
hdr = (struct setup_header *)(image + SETUP_SECTS_OFF);
/* base address for real-mode segment */
setup_base = (void *)DEFAULT_SETUP_BASE;
if (KERNEL_MAGIC != hdr->boot_flag) {
printf("Error: Invalid Boot Flag (found 0x%04x, expected 0x%04x)\n",
hdr->boot_flag, KERNEL_MAGIC);
printf("Error: Invalid Boot Flag "
"(found 0x%04x, expected 0x%04x)\n",
hdr->boot_flag, KERNEL_MAGIC);
return 0;
} else {
printf("Valid Boot Flag\n");
return 1;
}
}
/* determine boot protocol version */
if (KERNEL_V2_MAGIC == hdr->header) {
static int get_boot_protocol(struct setup_header *hdr)
{
if (hdr->header == KERNEL_V2_MAGIC) {
printf("Magic signature found\n");
bootproto = hdr->version;
return hdr->version;
} else {
/* Very old kernel */
printf("Magic signature not found\n");
bootproto = 0x0100;
return 0x0100;
}
}
struct boot_params *load_zimage(char *image, unsigned long kernel_size,
void **load_address)
{
struct boot_params *setup_base;
int setup_size;
int bootproto;
int big_image;
struct boot_params *params = (struct boot_params *)image;
struct setup_header *hdr = &params->hdr;
/* base address for real-mode segment */
setup_base = (struct boot_params *)DEFAULT_SETUP_BASE;
if (!kernel_magic_ok(hdr))
return 0;
/* determine size of setup */
if (0 == hdr->setup_sects) {
@ -126,27 +144,50 @@ void *load_zimage(char *image, unsigned long kernel_size,
if (setup_size > SETUP_MAX_SIZE)
printf("Error: Setup is too large (%d bytes)\n", setup_size);
/* determine boot protocol version */
bootproto = get_boot_protocol(hdr);
printf("Using boot protocol version %x.%02x\n",
(bootproto & 0xff00) >> 8, bootproto & 0xff);
if (bootproto >= 0x0200) {
if (hdr->setup_sects >= 15) {
printf("Linux kernel version %s\n",
(char *)params +
hdr->kernel_version + 0x200);
} else {
printf("Setup Sectors < 15 - "
"Cannot print kernel version.\n");
}
}
/* Determine image type */
big_image = (bootproto >= 0x0200) &&
(hdr->loadflags & BIG_KERNEL_FLAG);
/* Determine load address */
load_address = (void *)(big_image ?
BZIMAGE_LOAD_ADDR :
ZIMAGE_LOAD_ADDR);
if (big_image)
*load_address = (void *)BZIMAGE_LOAD_ADDR;
else
*load_address = (void *)ZIMAGE_LOAD_ADDR;
#if defined CONFIG_ZBOOT_32
printf("Building boot_params at 0x%8.8lx\n", (ulong)setup_base);
memset(setup_base, 0, sizeof(*setup_base));
setup_base->hdr = params->hdr;
#else
/* load setup */
printf("Moving Real-Mode Code to 0x%8.8lx (%d bytes)\n",
(ulong)setup_base, setup_size);
memmove(setup_base, image, setup_size);
#endif
printf("Using boot protocol version %x.%02x\n",
(bootproto & 0xff00) >> 8, bootproto & 0xff);
if (bootproto >= 0x0204)
kernel_size = hdr->syssize * 16;
else
kernel_size -= setup_size;
if (bootproto == 0x0100) {
*(u16 *)(setup_base + CMD_LINE_MAGIC_OFF) = COMMAND_LINE_MAGIC;
*(u16 *)(setup_base + CMD_LINE_OFFSET_OFF) = COMMAND_LINE_OFFSET;
/*
* A very old kernel MUST have its real-mode code
* loaded at 0x90000
@ -157,33 +198,60 @@ void *load_zimage(char *image, unsigned long kernel_size,
/* Copy the command line */
memmove((void *)0x99000,
setup_base + COMMAND_LINE_OFFSET,
(u8 *)setup_base + COMMAND_LINE_OFFSET,
COMMAND_LINE_SIZE);
/* Relocated */
setup_base = (void *)0x90000;
setup_base = (struct boot_params *)0x90000;
}
/* It is recommended to clear memory up to the 32K mark */
memset((void *)0x90000 + setup_size, 0,
SETUP_MAX_SIZE-setup_size);
memset((u8 *)0x90000 + setup_size, 0,
SETUP_MAX_SIZE - setup_size);
}
/* We are now setting up the real-mode version of the header */
hdr = (struct setup_header *)(setup_base + SETUP_SECTS_OFF);
if (big_image) {
if (kernel_size > BZIMAGE_MAX_SIZE) {
printf("Error: bzImage kernel too big! "
"(size: %ld, max: %d)\n",
kernel_size, BZIMAGE_MAX_SIZE);
return 0;
}
} else if ((kernel_size) > ZIMAGE_MAX_SIZE) {
printf("Error: zImage kernel too big! (size: %ld, max: %d)\n",
kernel_size, ZIMAGE_MAX_SIZE);
return 0;
}
printf("Loading %s at address %p (%ld bytes)\n",
big_image ? "bzImage" : "zImage", *load_address, kernel_size);
memmove(*load_address, image + setup_size, kernel_size);
return setup_base;
}
int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
unsigned long initrd_addr, unsigned long initrd_size)
{
struct setup_header *hdr = &setup_base->hdr;
int bootproto = get_boot_protocol(hdr);
#if defined CONFIG_ZBOOT_32
setup_base->e820_entries = install_e820_map(
ARRAY_SIZE(setup_base->e820_map), setup_base->e820_map);
#endif
if (bootproto == 0x0100) {
setup_base->screen_info.cl_magic = COMMAND_LINE_MAGIC;
setup_base->screen_info.cl_offset = COMMAND_LINE_OFFSET;
}
if (bootproto >= 0x0200) {
hdr->type_of_loader = 8;
if (hdr->setup_sects >= 15)
printf("Linux kernel version %s\n",
(char *)(setup_base +
(hdr->kernel_version + 0x200)));
else
printf("Setup Sectors < 15 - Cannot print kernel version.\n");
if (initrd_addr) {
printf("Initial RAM disk at linear address 0x%08lx, size %ld bytes\n",
printf("Initial RAM disk at linear address "
"0x%08lx, size %ld bytes\n",
initrd_addr, initrd_size);
hdr->ramdisk_image = initrd_addr;
@ -197,49 +265,42 @@ void *load_zimage(char *image, unsigned long kernel_size,
}
if (bootproto >= 0x0202) {
hdr->cmd_line_ptr = (u32)setup_base + COMMAND_LINE_OFFSET;
hdr->cmd_line_ptr = (uintptr_t)cmd_line;
} else if (bootproto >= 0x0200) {
*(u16 *)(setup_base + CMD_LINE_MAGIC_OFF) = COMMAND_LINE_MAGIC;
*(u16 *)(setup_base + CMD_LINE_OFFSET_OFF) = COMMAND_LINE_OFFSET;
setup_base->screen_info.cl_magic = COMMAND_LINE_MAGIC;
setup_base->screen_info.cl_offset =
(uintptr_t)cmd_line - (uintptr_t)setup_base;
hdr->setup_move_size = 0x9100;
}
if (bootproto >= 0x0204)
kernel_size = hdr->syssize * 16;
else
kernel_size -= setup_size;
if (big_image) {
if ((kernel_size) > BZIMAGE_MAX_SIZE) {
printf("Error: bzImage kernel too big! (size: %ld, max: %d)\n",
kernel_size, BZIMAGE_MAX_SIZE);
return 0;
}
} else if ((kernel_size) > ZIMAGE_MAX_SIZE) {
printf("Error: zImage kernel too big! (size: %ld, max: %d)\n",
kernel_size, ZIMAGE_MAX_SIZE);
return 0;
}
/* build command line at COMMAND_LINE_OFFSET */
build_command_line(setup_base + COMMAND_LINE_OFFSET, auto_boot);
printf("Loading %czImage at address 0x%08x (%ld bytes)\n",
big_image ? 'b' : ' ', (u32)load_address, kernel_size);
memmove(load_address, image + setup_size, kernel_size);
/* ready for booting */
return setup_base;
build_command_line(cmd_line, auto_boot);
return 0;
}
void boot_zimage(void *setup_base)
void boot_zimage(void *setup_base, void *load_address)
{
printf("\nStarting kernel ...\n\n");
#if defined CONFIG_ZBOOT_32
/*
* Set %ebx, %ebp, and %edi to 0, %esi to point to the boot_params
* structure, and then jump to the kernel. We assume that %cs is
* 0x10, 4GB flat, and read/execute, and the data segments are 0x18,
* 4GB flat, and read/write. U-boot is setting them up that way for
* itself in arch/i386/cpu/cpu.c.
*/
__asm__ __volatile__ (
"movl $0, %%ebp \n"
"cli \n"
"jmp %[kernel_entry] \n"
:: [kernel_entry]"a"(load_address),
[boot_params] "S"(setup_base),
"b"(0), "D"(0)
: "%ebp"
);
#else
struct pt_regs regs;
memset(&regs, 0, sizeof(struct pt_regs));
@ -248,56 +309,79 @@ void boot_zimage(void *setup_base)
regs.xss = regs.xds;
regs.esp = 0x9000;
regs.eflags = 0;
enter_realmode(((u32)setup_base+SETUP_START_OFFSET)>>4, 0, &regs,
&regs);
enter_realmode(((u32)setup_base + SETUP_START_OFFSET) >> 4, 0,
&regs, &regs);
#endif
}
int do_zboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
void *base_ptr;
struct boot_params *base_ptr;
void *bzImage_addr = NULL;
void *load_address;
char *s;
ulong bzImage_size = 0;
ulong initrd_addr = 0;
ulong initrd_size = 0;
disable_interrupts();
/* Setup board for maximum PC/AT Compatibility */
setup_pcat_compatibility();
if (argc >= 2)
if (argc >= 2) {
/* argv[1] holds the address of the bzImage */
s = argv[1];
else
} else {
s = getenv("fileaddr");
}
if (s)
bzImage_addr = (void *)simple_strtoul(s, NULL, 16);
if (argc >= 3)
if (argc >= 3) {
/* argv[2] holds the size of the bzImage */
bzImage_size = simple_strtoul(argv[2], NULL, 16);
}
if (argc >= 4)
initrd_addr = simple_strtoul(argv[3], NULL, 16);
if (argc >= 5)
initrd_size = simple_strtoul(argv[4], NULL, 16);
/* Lets look for*/
base_ptr = load_zimage(bzImage_addr, bzImage_size, 0, 0, 0);
/* Lets look for */
base_ptr = load_zimage(bzImage_addr, bzImage_size, &load_address);
if (!base_ptr) {
printf("## Kernel loading failed ...\n");
} else {
printf("## Transferring control to Linux (at address %08x) ...\n",
(u32)base_ptr);
return -1;
}
if (setup_zimage(base_ptr, (char *)base_ptr + COMMAND_LINE_OFFSET,
0, initrd_addr, initrd_size)) {
printf("Setting up boot parameters failed ...\n");
return -1;
}
/* we assume that the kernel is in place */
printf("\nStarting kernel ...\n\n");
printf("## Transferring control to Linux "
"(at address %08x) ...\n",
(u32)base_ptr);
boot_zimage(base_ptr);
/* does not return */
}
/* we assume that the kernel is in place */
boot_zimage(base_ptr, load_address);
/* does not return */
return -1;
}
U_BOOT_CMD(
zboot, 2, 0, do_zboot,
zboot, 5, 0, do_zboot,
"Boot bzImage",
""
"[addr] [size] [initrd addr] [initrd size]\n"
" addr - The optional starting address of the bzimage.\n"
" If not set it defaults to the environment\n"
" variable \"fileaddr\".\n"
" size - The optional size of the bzimage. Defaults to\n"
" zero.\n"
" initrd addr - The address of the initrd image to use, if any.\n"
" initrd size - The size of the initrd image to use, if any.\n"
);

@ -0,0 +1,53 @@
#
# Copyright (c) 2011 The Chromium OS Authors.
# (C) Copyright 2008
# Graeme Russ, graeme.russ@gmail.com.
#
# (C) Copyright 2006
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
#
# (C) Copyright 2002
# Daniel Engström, Omicron Ceti AB, daniel@omicron.se.
#
# See file CREDITS for list of people who contributed to this
# project.
#
# 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., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#
include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).o
COBJS-y += coreboot.o
COBJS-$(CONFIG_PCI) += coreboot_pci.o
SOBJS-y += coreboot_start16.o
SOBJS-y += coreboot_start.o
SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
$(LIB): $(obj).depend $(OBJS) $(SOBJS)
$(call cmd_link_o_target, $(OBJS) $(SOBJS))
#########################################################################
# defines $(obj).depend target
include $(SRCTREE)/rules.mk
sinclude $(obj).depend
#########################################################################

@ -0,0 +1,87 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2008
* Graeme Russ, graeme.russ@gmail.com.
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#include <common.h>
#include <asm/u-boot-x86.h>
#include <flash.h>
#include <netdev.h>
#include <asm/arch-coreboot/tables.h>
#include <asm/arch-coreboot/sysinfo.h>
DECLARE_GLOBAL_DATA_PTR;
unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN;
/*
* Miscellaneous platform dependent initializations
*/
int cpu_init_f(void)
{
int ret = get_coreboot_info(&lib_sysinfo);
if (ret != 0)
printf("Failed to parse coreboot tables.\n");
return ret;
}
int board_early_init_f(void)
{
return 0;
}
int board_early_init_r(void)
{
/* CPU Speed to 100MHz */
gd->cpu_clk = 100000000;
/* Crystal is 33.000MHz */
gd->bus_clk = 33000000;
return 0;
}
void show_boot_progress(int val)
{
}
int last_stage_init(void)
{
return 0;
}
#ifndef CONFIG_SYS_NO_FLASH
ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info)
{
return 0;
}
#endif
int board_eth_init(bd_t *bis)
{
return pci_eth_init(bis);
}
void setup_pcat_compatibility()
{
}

@ -0,0 +1,30 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2008,2009
* Graeme Russ, <graeme.russ@gmail.com>
*
* (C) Copyright 2002
* Daniel Engström, Omicron Ceti AB, <daniel@omicron.se>
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
void pci_init_board(void)
{
}

@ -0,0 +1,29 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2008
* Graeme Russ, graeme.russ@gmail.com.
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
/* board early intialization */
.globl early_board_init
early_board_init:
/* No 32-bit board specific initialisation */
jmp early_board_init_ret

@ -0,0 +1,46 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2008
* Graeme Russ, graeme.russ@gmail.com.
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
/*
* 16bit initialization code.
* This code have to map the area of the boot flash
* that is used by U-boot to its final destination.
*/
.text
.section .start16, "ax"
.code16
.globl board_init16
board_init16:
jmp board_init16_ret
.section .bios, "ax"
.code16
.globl realmode_reset
.hidden realmode_reset
.type realmode_reset, @function
realmode_reset:
1: hlt
jmp 1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,227 +1,454 @@
0x1f,0x8b,0x08,0x08,0x9c,0x03,0x94,0x3f,0x00,0x03,0x48,0x6f,0x6c,0x7a,0x48,0x65,
0x72,0x5f,0x4c,0x6f,0x67,0x6f,0x5f,0x33,0x32,0x30,0x78,0x32,0x34,0x30,0x5f,0x6d,
0x69,0x74,0x74,0x65,0x5f,0x31,0x36,0x67,0x2e,0x62,0x6d,0x70,0x00,0xed,0x9c,0xfd,
0x6b,0x1b,0x47,0x1a,0xc7,0x9f,0xae,0xa2,0xe8,0x8c,0x4b,0x42,0xff,0x03,0xb1,0x26,
0x2f,0x26,0xa5,0x67,0x2c,0x52,0xd7,0xf8,0xb8,0x1e,0xb1,0xfb,0x62,0xc2,0x81,0xa9,
0xa3,0xe6,0x42,0x43,0x02,0x21,0xf1,0x35,0x57,0x38,0x4c,0x8a,0xbd,0x71,0x1d,0xe2,
0xa3,0x70,0x89,0x4c,0x8f,0x62,0xdc,0x4b,0xed,0x8d,0x84,0xfd,0xd3,0x71,0x77,0x0e,
0x94,0x90,0x50,0x7c,0x3a,0x09,0x29,0xb4,0xe4,0x87,0x9c,0x85,0xfc,0x17,0x14,0x42,
0x8a,0x31,0xc5,0x62,0xd7,0xb4,0x04,0x63,0x24,0x76,0xee,0x79,0x66,0x66,0x57,0x2b,
0xeb,0xd5,0x24,0x75,0x0b,0x9d,0x2f,0x28,0xfb,0x36,0x3b,0xf3,0xd9,0x67,0xe6,0x79,
0x66,0x76,0x66,0x9d,0x13,0xbf,0x1f,0xff,0x1c,0xb8,0xc6,0xf1,0x77,0x14,0x7f,0xbf,
0x7b,0x01,0x60,0x13,0xb7,0x2f,0xc0,0x3e,0x70,0x15,0x6b,0x17,0x3f,0xbf,0x5e,0x7a,
0xe9,0x25,0xd0,0x75,0x1d,0x22,0x91,0x08,0x0c,0x0c,0x0c,0x40,0x34,0x1a,0x85,0x91,
0x91,0x11,0x30,0x0c,0x03,0x62,0xb1,0x18,0x98,0xa6,0x09,0x4b,0x4b,0x4b,0x90,0x4a,
0xa5,0x20,0x97,0xcb,0xc1,0x37,0xdf,0x7c,0x03,0x96,0x65,0x01,0x63,0x8c,0x7e,0x4a,
0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,
0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,
0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0xbf,0x6c,0x95,0x72,
0xf9,0x9f,0x1a,0xa1,0xa1,0xbe,0x87,0xd0,0x4f,0x8d,0xd0,0x50,0x9b,0x8a,0xef,0x99,
0xa4,0xf8,0xb8,0x9c,0xdd,0xdf,0xe1,0xd8,0xb4,0x21,0x3e,0xb1,0x87,0xb2,0xaa,0x53,
0xd9,0x55,0xa7,0x76,0xc8,0xb2,0x5b,0x48,0xe9,0xd8,0x56,0xd3,0x8c,0x2a,0xf5,0x34,
0x0c,0x10,0xc8,0x72,0xbe,0xfb,0x00,0xbf,0xa1,0x3c,0x70,0x0b,0x93,0xec,0x07,0x9d,
0x6b,0x75,0x5b,0x3f,0xc6,0x9c,0xaf,0x00,0x12,0xf7,0xf4,0x29,0xa7,0x5b,0xb7,0xd9,
0x6c,0x47,0x96,0x6d,0x77,0x77,0x32,0xf6,0xad,0x7e,0x8e,0x15,0xaf,0x80,0xb6,0x3a,
0x7b,0x88,0x3d,0x04,0x71,0xf3,0xc6,0x10,0x40,0x90,0xe9,0x3a,0xe6,0xf8,0x8e,0x3e,
0xc5,0x66,0x71,0xe7,0x89,0xfe,0x3a,0x63,0x9f,0xe9,0xbf,0xc6,0x47,0xc0,0x8b,0x81,
0x38,0x2b,0xe9,0x47,0xb0,0x14,0xbd,0xa3,0x25,0x52,0xfa,0x93,0x1d,0x02,0xdc,0x84,
0x20,0xee,0x68,0x98,0xef,0x53,0xfe,0x67,0x3a,0x18,0x70,0xb8,0xec,0x2d,0x68,0x67,
0x5b,0xf4,0x10,0x33,0x30,0xe5,0xe0,0x31,0x9b,0xd1,0x16,0xd9,0x76,0xb8,0x8d,0xb1,
0x27,0x70,0x0e,0x7f,0x00,0x47,0x46,0x83,0xec,0x01,0xdd,0x7c,0x9d,0xb1,0x2e,0x20,
0x3e,0x00,0xcc,0x67,0x08,0xce,0xb3,0x19,0x58,0xc4,0x9c,0x11,0x6d,0x16,0x0e,0x32,
0xe7,0x0a,0x2f,0x8b,0x95,0x20,0x68,0x33,0x07,0xb4,0x16,0xf9,0x0e,0x75,0x03,0x1c,
0x20,0x4e,0x2d,0x1a,0xc6,0xbc,0xb1,0x88,0x4e,0x73,0x8c,0xf3,0x91,0xfd,0xec,0x6d,
0xe4,0xdb,0x84,0x80,0x89,0x25,0x2f,0x56,0xf1,0x39,0x43,0xd0,0x33,0x07,0xd8,0x34,
0x1e,0xf7,0x24,0x47,0xf1,0x66,0x7c,0xb6,0xd0,0x87,0x15,0x7c,0x59,0xf6,0xd8,0xe5,
0x2b,0x02,0x4c,0xcc,0x0d,0x69,0xc4,0xc7,0x5a,0xe7,0xeb,0x4d,0x27,0xc3,0xf0,0x22,
0xf1,0xf5,0x59,0x33,0xa0,0x61,0x2e,0x58,0x7e,0x61,0x88,0xfd,0x80,0xb9,0x99,0xa6,
0xc9,0xf9,0x1e,0x40,0x1f,0xbb,0x5f,0x93,0xaf,0x0b,0x32,0xf8,0x0b,0xb1,0xb5,0x3c,
0xde,0xa0,0xb1,0xaf,0x20,0x30,0x55,0x34,0xed,0xda,0x7c,0x6b,0x64,0xb7,0xf5,0x8e,
0xdd,0xf1,0x15,0x31,0xd5,0xd7,0x10,0xb2,0x91,0x8f,0x8a,0x00,0xcc,0xa5,0x1d,0xef,
0x2e,0xb0,0x62,0x17,0xbc,0x4c,0x09,0x88,0xef,0x2e,0x16,0x83,0x6c,0x8b,0xac,0x8a,
0x2f,0x0c,0x96,0xbd,0x4e,0xae,0x45,0x09,0xc1,0x19,0xc5,0x27,0x45,0x27,0xa8,0xcd,
0x77,0x17,0xae,0x3b,0xcc,0xd9,0xd8,0x1d,0x9f,0x40,0x08,0xac,0x6e,0xe2,0xd3,0xb3,
0x52,0x17,0xac,0x8e,0x52,0x76,0xa4,0xef,0x09,0x46,0xf0,0x3d,0x80,0x29,0xaa,0xf7,
0x6c,0x2d,0xfb,0x61,0x53,0xea,0xe2,0xa1,0x89,0x1e,0x2e,0x8c,0x4c,0xa8,0x1d,0x7c,
0x07,0x05,0xdf,0x90,0xfc,0xfb,0xb1,0x12,0x85,0xb2,0xdd,0xf0,0x6d,0x71,0xbe,0x00,
0xde,0x34,0x04,0xd9,0x51,0x78,0xdd,0xe2,0x61,0x60,0x9b,0x0c,0x26,0xf8,0x1e,0x63,
0xfd,0x62,0xf6,0xd5,0x7c,0x74,0x12,0xc9,0x89,0xaf,0x70,0x17,0x9f,0x10,0xe8,0x41,
0xea,0xf0,0x61,0x85,0x60,0xbe,0x8e,0x6d,0xef,0x9a,0x0f,0x5b,0xb6,0x2d,0xe2,0x33,
0xfa,0xdb,0x90,0xf0,0xdb,0x73,0x0c,0x63,0x86,0x26,0xf9,0xc8,0x7f,0x23,0xc0,0xf9,
0x58,0x25,0xdf,0x63,0x74,0xab,0x48,0x18,0xeb,0xf7,0x1d,0xbc,0xe7,0x98,0x00,0xab,
0xe2,0x13,0xf5,0xbb,0x1d,0x16,0x39,0x4f,0xb9,0xf5,0xdb,0x2a,0xde,0x32,0x70,0x17,
0xad,0xe2,0x73,0x78,0x31,0xc4,0xe7,0xdc,0xe5,0xe7,0x6a,0xd8,0xaf,0xc8,0x93,0x87,
0xc8,0xd8,0x10,0xca,0xd4,0xe1,0x93,0xf6,0x93,0x7c,0x8b,0xbb,0x6b,0x7f,0x5b,0x14,
0xb2,0xce,0x33,0x5e,0xbf,0x16,0xaf,0xdf,0xdf,0x5a,0xd6,0x77,0xbc,0x9e,0xbe,0x86,
0xe0,0x2a,0xe7,0x63,0x8e,0x95,0x5b,0xa1,0xaa,0xe4,0x7c,0x78,0x6d,0x1b,0x2d,0x6e,
0x7d,0x4b,0x0f,0xc1,0xac,0x95,0xd4,0x50,0x08,0xdb,0x7e,0xe0,0xba,0xcd,0xca,0xf5,
0x3b,0x45,0xed,0xd5,0xc7,0x37,0x03,0x07,0x4b,0x43,0xf4,0x77,0x8c,0x8f,0x21,0x5b,
0x22,0xb4,0x96,0xf9,0xee,0x8a,0xb0,0xbc,0x49,0x55,0x87,0x4d,0x64,0x75,0x06,0x5e,
0xa1,0x16,0xb9,0xc8,0xab,0x96,0xa3,0xb4,0x8b,0x84,0x5e,0xfb,0x43,0x2c,0xf2,0x28,
0x6e,0x3f,0x92,0xc3,0xf9,0x8e,0x51,0x71,0x5d,0xf0,0xba,0xe0,0x3b,0xcf,0xb8,0xaf,
0x08,0xbe,0x03,0xd4,0x84,0x0e,0xa2,0x73,0xe3,0xa5,0x07,0x80,0xed,0x0f,0x56,0x5b,
0x8f,0x2f,0x64,0xf5,0x04,0xef,0x47,0x6c,0x8c,0x2d,0x60,0x3f,0xa4,0xec,0xee,0x63,
0x0e,0xbc,0x9c,0x03,0x82,0x8f,0xb2,0x0a,0xc3,0xaa,0xe4,0x7b,0x19,0xf9,0xb1,0x92,
0xc9,0xab,0xa9,0xb7,0x75,0xb0,0xb2,0x67,0x84,0xe1,0x46,0xe9,0x66,0x7e,0x9f,0xcd,
0x8d,0x48,0x7c,0x9b,0xd0,0x46,0x0f,0x47,0xf1,0x25,0xc3,0x9c,0x19,0x40,0xff,0xc5,
0x2b,0x25,0x08,0xb4,0xda,0xbf,0xf5,0xd8,0x62,0x1b,0x9c,0x18,0xc2,0x46,0xeb,0x74,
0x69,0xd7,0x1e,0xe1,0x76,0x3b,0x1a,0x1d,0xee,0xc2,0x6a,0xe4,0x7c,0x57,0x4e,0xe7,
0x6e,0xe1,0xbe,0xe4,0x03,0xea,0x4c,0x42,0x26,0xc0,0x02,0xdb,0xd2,0x26,0xb1,0xe2,
0x0f,0x60,0x60,0x0e,0x26,0x96,0xcf,0xb2,0x6f,0x01,0x7a,0xe7,0xce,0x22,0x9a,0x76,
0x66,0x8c,0xac,0x24,0xec,0x07,0x3d,0xb7,0x00,0x0d,0xbb,0x05,0xc1,0xdc,0x3d,0xde,
0xbf,0x61,0x51,0x5d,0x44,0xdd,0x82,0x1e,0x43,0x20,0x23,0x38,0x35,0xd1,0xd2,0xc9,
0x9b,0xbb,0xb1,0x05,0x6f,0xf1,0xc6,0x1c,0x14,0xf6,0x1b,0x85,0xe3,0x80,0x19,0x4a,
0xbe,0x30,0x26,0xd5,0x00,0x0d,0x9f,0x21,0x43,0x0e,0x03,0xda,0x06,0x83,0xdf,0xa1,
0xae,0x17,0xb9,0x9b,0x84,0xdb,0x91,0x8f,0x92,0x04,0x6c,0x97,0x8f,0xbb,0x2d,0x71,
0x1d,0xc7,0xce,0x13,0xb7,0x1a,0x15,0xd6,0xd7,0x12,0xdf,0x03,0x19,0x8e,0x37,0xa1,
0x13,0x8d,0x82,0x1d,0x10,0x0f,0x26,0x98,0xad,0xe4,0xe3,0xf6,0xc3,0x5a,0x41,0xa2,
0xf3,0x92,0x2f,0xb4,0x8e,0x07,0x0b,0x33,0x3c,0x35,0x0f,0x1a,0x21,0x6c,0x0c,0x14,
0x5f,0xf0,0x41,0x3e,0x03,0x7a,0x0e,0x00,0x1a,0x03,0x65,0xe8,0xb9,0x16,0x91,0xef,
0x74,0x58,0xd0,0x7c,0x49,0x69,0x2d,0xe4,0x6b,0xc3,0x9b,0x5b,0x74,0x0f,0x97,0x6f,
0xcb,0xb8,0xf6,0xdd,0x3b,0x87,0xa6,0x70,0xcf,0x59,0xeb,0xee,0x98,0xb4,0xd8,0xb6,
0x41,0x9a,0x60,0x45,0x63,0x12,0x87,0x4d,0x63,0xdd,0x91,0x04,0xf7,0x4f,0x9b,0x2d,
0x4f,0xd8,0x63,0x1d,0x7d,0xf6,0xf6,0x70,0x07,0x02,0x38,0x1b,0x51,0xfd,0x38,0x8e,
0x5b,0x58,0x61,0x58,0xef,0xa1,0xed,0x97,0xdd,0xc7,0x27,0x31,0x59,0xe6,0xbe,0x7e,
0x1a,0x8f,0x96,0x8d,0x55,0xb6,0x6e,0x2c,0x2c,0x77,0x1f,0xa7,0x21,0xa5,0x3d,0xa6,
0x1f,0x5f,0xc0,0xad,0x31,0x59,0xfc,0x50,0xbf,0xd6,0x1a,0x1f,0xf7,0x7e,0xa9,0x62,
0x5a,0x6c,0x93,0xa9,0xea,0x74,0xfc,0x9c,0x23,0xba,0x3c,0x56,0x8a,0x67,0x91,0x59,
0xa4,0x2e,0xa5,0x56,0xc5,0xcd,0xa9,0x2c,0x3f,0x4c,0x66,0xc9,0x35,0xb2,0xee,0x69,
0xc6,0x47,0xac,0xa9,0x2c,0x1f,0xb6,0xf2,0xfb,0x48,0x76,0xb1,0x46,0x11,0x75,0xf8,
0xda,0x1c,0x7b,0x25,0xdb,0x5a,0x62,0xde,0x7f,0xb4,0x20,0x19,0xa6,0x9f,0x87,0x70,
0x14,0xd0,0x31,0x2c,0x7a,0xf5,0xda,0x2a,0x9a,0x09,0x6f,0xdf,0xb5,0x5f,0x33,0x79,
0x7c,0x49,0x73,0xb5,0x61,0xc2,0xe6,0xc2,0xa8,0x09,0x20,0xa2,0x6a,0x6d,0x79,0xf1,
0x59,0x14,0xbc,0x3b,0xbe,0x51,0x1e,0xe7,0x9f,0x49,0x3f,0x70,0xbe,0xfa,0xc5,0x6e,
0xf9,0xf8,0x76,0x6d,0xbf,0x99,0x67,0xe7,0x73,0x96,0x87,0x8f,0x4f,0x34,0xa8,0x05,
0xbf,0xfd,0x70,0x38,0xba,0xe7,0xf6,0x6b,0x2a,0x9f,0xf3,0x38,0x63,0xd1,0x96,0xf8,
0xa2,0x51,0xf9,0xc0,0x85,0xdc,0x2e,0x5f,0x27,0x9f,0x51,0xcd,0x5f,0x83,0xb9,0xac,
0xea,0x17,0x68,0x25,0x25,0x25,0xa5,0x5f,0x9e,0xf6,0x36,0x42,0x3f,0x77,0xd5,0x9e,
0x51,0x75,0x0a,0x49,0xe3,0x47,0xd7,0x55,0xb3,0xb9,0xe2,0x59,0xab,0xba,0x53,0x2a,
0xde,0x82,0x3d,0x92,0x3e,0x10,0x69,0xa6,0xee,0x23,0xf1,0x1d,0x80,0xc5,0xa1,0xbd,
0xc2,0x23,0xc0,0xa6,0x8a,0x44,0xae,0x55,0xe0,0xf1,0x19,0x8d,0x3d,0x93,0xf6,0xe6,
0x48,0x63,0x5d,0x42,0xc2,0x41,0xff,0xb4,0xf9,0x95,0xbd,0xc4,0x03,0x38,0x6c,0x18,
0x7f,0x6c,0xd0,0x48,0x47,0x46,0x2e,0x0e,0xf4,0xeb,0x9f,0x96,0xf9,0xd6,0xf7,0x16,
0x0f,0xb4,0xf7,0x63,0x8d,0x74,0x13,0x09,0x07,0x22,0x9d,0xde,0x88,0xac,0xa8,0xef,
0x31,0x1f,0xec,0x6f,0xc8,0x87,0x32,0x46,0x06,0xfa,0x5f,0x76,0x0d,0xf8,0xf5,0x9e,
0xf3,0x35,0x31,0x20,0x6a,0xfc,0x52,0xff,0xab,0x72,0xc4,0xed,0xe8,0xe1,0xbd,0xe6,
0x6b,0x6e,0xc0,0x98,0x71,0xb1,0x5f,0xce,0x7a,0xaf,0x77,0xef,0x3d,0x9f,0x76,0xb9,
0x19,0xdf,0xcd,0xf1,0x8b,0xaf,0xf1,0x16,0xb8,0x1d,0xe9,0x6e,0x94,0x53,0xcf,0x84,
0x11,0xfe,0x31,0x00,0xe7,0x9b,0x03,0xf6,0x0f,0x12,0xdf,0x53,0x1f,0x1f,0xfd,0x2f,
0x73,0x74,0x33,0x6e,0x25,0x54,0x67,0x96,0xb1,0xe5,0x2e,0xef,0xaa,0xce,0xaf,0x68,
0xba,0xee,0xed,0xbb,0xe5,0xc9,0x03,0xff,0xd6,0x4d,0xe1,0x65,0xe7,0xbf,0xa1,0x69,
0x05,0xc7,0xc6,0xfb,0x5f,0x25,0x0f,0x59,0x1b,0xf6,0xf8,0xda,0x32,0x16,0x2d,0xd8,
0x41,0x5b,0x9a,0x66,0x85,0x49,0x21,0xee,0x43,0xeb,0x3c,0xd7,0x5e,0xbc,0x4a,0x7a,
0x02,0x67,0xf2,0x96,0xd4,0x9a,0x7b,0x6b,0x2f,0x9e,0x7a,0x40,0xcf,0xb3,0x60,0x59,
0x5b,0x88,0x34,0xe9,0xa6,0x98,0x11,0xd9,0xd2,0x74,0x5c,0x27,0x1e,0x6e,0xba,0x37,
0x34,0xad,0xe0,0xd8,0x8d,0x8b,0x27,0xc8,0x3b,0x6e,0x95,0xf9,0xda,0xb3,0xf4,0xfe,
0x4c,0x19,0xca,0x55,0xc2,0x3e,0xe9,0xe2,0x7c,0xca,0xb7,0x37,0x2b,0x0e,0xbe,0x87,
0x5e,0x2f,0x74,0x3e,0x2d,0xf3,0x31,0x3e,0xed,0x18,0x5a,0xa0,0xf9,0x05,0xd0,0xbc,
0xb9,0x32,0xe2,0xcb,0x8a,0x39,0xed,0x84,0x38,0x14,0x6a,0xee,0x21,0xb1,0xf1,0x81,
0x4f,0xb1,0xe8,0xb1,0x53,0x7a,0x5d,0xbe,0x45,0x46,0x6f,0xae,0xb6,0xc8,0xb6,0x37,
0xe3,0xf1,0x49,0xc7,0xb7,0xec,0x2d,0xf7,0xd6,0xd7,0x7c,0x7c,0xdb,0x64,0xbf,0x6a,
0x3e,0x2d,0xed,0xce,0xed,0x90,0xf6,0xb5,0xc0,0x77,0xea,0x24,0x3e,0xec,0x78,0x99,
0x8f,0x32,0x9a,0xf1,0xf1,0x75,0x62,0x21,0x85,0x54,0x3c,0xed,0xf0,0x49,0x51,0xce,
0xb7,0x92,0x4a,0xdd,0x13,0x7b,0x56,0x0a,0xf5,0xa5,0x7b,0xeb,0x91,0x4a,0x3e,0x78,
0x8f,0x66,0xc9,0x31,0x71,0xaa,0xcc,0x17,0xca,0x33,0xe6,0x3d,0x4f,0x2b,0x0d,0xf0,
0xc6,0xc8,0x80,0x5d,0x9b,0x2f,0xcd,0x67,0xd9,0x00,0xcb,0x72,0xb6,0x71,0x44,0x96,
0xe1,0xcb,0x31,0x3d,0x44,0x95,0x34,0xcd,0x59,0xe8,0xa1,0x79,0x48,0x8b,0xc6,0x6a,
0xb7,0x1a,0xf1,0x95,0x30,0xb1,0x39,0x2a,0xb2,0xc5,0xb6,0xd9,0x6e,0x33,0x77,0x09,
0xb9,0x35,0xbe,0x9b,0x23,0xfd,0xd8,0xf6,0x8d,0x53,0xe1,0x7a,0x7c,0x18,0x7f,0x9c,
0xa4,0x11,0x33,0x13,0xb6,0xb3,0x56,0xc1,0xc7,0x87,0x67,0x54,0xfa,0x5f,0x77,0xf2,
0xed,0xf7,0xf1,0x15,0x2a,0xf9,0x5e,0xb4,0x65,0xab,0x11,0x6a,0xee,0x20,0xe8,0xc1,
0x36,0x4b,0xce,0xf9,0xf8,0x32,0xb4,0xec,0x84,0x46,0x48,0xf3,0x49,0xb6,0x10,0xf2,
0xad,0x63,0x6c,0x39,0x1d,0xe7,0x6b,0xa9,0x47,0xf0,0xaa,0xf0,0xd7,0x80,0x99,0xb1,
0x7d,0x35,0xc5,0x9b,0x7b,0x46,0xf0,0x05,0x91,0xaf,0x88,0xdb,0x93,0x7c,0x6a,0xba,
0xfc,0xd8,0x78,0xed,0x15,0xc6,0x31,0xbd,0x27,0x6a,0xc1,0x80,0x17,0x17,0x1c,0x73,
0x07,0x1f,0x4d,0xb3,0xff,0x4a,0xf0,0xd1,0xfa,0x0f,0x95,0x19,0x98,0xc8,0xd0,0x5a,
0x0c,0xf1,0x49,0x7f,0x9d,0x88,0x5b,0x4e,0xe5,0x98,0x2c,0x98,0x17,0xc6,0x09,0x66,
0x04,0x5f,0x5f,0x35,0xdf,0x39,0xbf,0xfb,0xe2,0x13,0x4d,0xb7,0xc0,0xf7,0xe7,0x9a,
0x7c,0xed,0x16,0x27,0xc1,0x31,0xac,0xc3,0x43,0x73,0x5b,0x82,0xec,0x7a,0xe4,0x0b,
0xaf,0x7d,0x07,0xd1,0x80,0x4e,0x05,0x5f,0x48,0x56,0x1e,0xd9,0xbc,0x24,0xf9,0xdc,
0x7c,0x89,0xef,0x09,0x2d,0xdc,0x95,0x4f,0xa1,0xb4,0xe6,0xf6,0x8b,0x8d,0x9c,0x2c,
0x99,0x73,0xd1,0xb2,0x7f,0x64,0x68,0x05,0x50,0xb4,0xe4,0xa7,0x10,0x48,0x08,0x53,
0x60,0xa1,0x09,0x9b,0x3d,0xe4,0x55,0x27,0xf9,0x34,0x03,0xcf,0x54,0xbc,0x12,0xd0,
0x52,0xe7,0xa6,0xe4,0x74,0x6a,0xf2,0xb5,0xd9,0x6e,0x76,0xbb,0xe0,0xeb,0x2b,0xc5,
0xe7,0x2e,0xf9,0xfa,0x0f,0xc6,0x36,0xb0,0x4d,0xd3,0x8a,0xc4,0x16,0x04,0xd3,0x72,
0xaa,0x17,0x02,0x9f,0xd0,0xda,0x74,0x50,0x36,0x7d,0x52,0x0f,0x56,0xf9,0xb6,0x57,
0xd2,0x19,0x93,0xcf,0x98,0x93,0xab,0xc7,0x25,0xdf,0x31,0x4b,0x38,0x90,0xf9,0x19,
0x5f,0x65,0x65,0x6b,0x3a,0x35,0xbf,0xfb,0xfe,0x47,0x6a,0x81,0x6f,0x7c,0xb0,0x94,
0xfa,0xcf,0x58,0x05,0x9f,0xf7,0x4a,0xc2,0xbd,0x44,0xc4,0x03,0x8a,0xb6,0xa5,0x0a,
0x3e,0x6d,0x22,0x61,0x39,0xae,0x7d,0xb4,0x1d,0x0b,0x2b,0x2e,0x1f,0xd7,0x9a,0xe0,
0x73,0x28,0xca,0x3b,0xbb,0xe7,0x2b,0xa6,0x92,0x8d,0xf8,0x64,0x3c,0x78,0x8f,0x56,
0x67,0xfd,0x7c,0xd0,0x1b,0x77,0xec,0x2b,0xbb,0xe0,0x13,0x17,0x36,0x86,0x76,0xc9,
0x77,0x79,0x23,0x95,0x34,0x3c,0xbe,0xd0,0x17,0x8c,0x7f,0x70,0xe4,0x58,0x44,0x12,
0x8a,0x7b,0x7c,0x7d,0xc4,0x17,0xf0,0xf3,0x05,0x27,0xd2,0x9e,0x87,0x68,0x93,0xf2,
0x23,0x25,0xc7,0xe2,0x9d,0x21,0x9d,0x6f,0xcb,0xcb,0xe3,0x2d,0x11,0x73,0x28,0x5b,
0xca,0xb5,0x6b,0x57,0x7c,0xc6,0xe5,0x52,0x2a,0x79,0x33,0xe2,0xf1,0x51,0x46,0x05,
0xec,0x94,0xf2,0x3b,0xf8,0xce,0x52,0xb4,0x08,0x2c,0xd8,0xbe,0x06,0xde,0x63,0x5a,
0x6c,0xd4,0xe5,0x13,0xb7,0xf0,0x2e,0x2f,0x63,0x7b,0x7c,0x4e,0x11,0x8f,0x1f,0x4a,
0x3e,0xca,0xd6,0x12,0xe3,0x84,0xd6,0xf9,0x6e,0x5e,0x2e,0xa5,0x57,0xe6,0x87,0xc3,
0x7e,0xbe,0x47,0xa2,0x95,0x17,0xc3,0xc1,0xdb,0xb6,0x1b,0xef,0xae,0x93,0xeb,0x55,
0xf2,0x05,0xe7,0xd2,0x76,0x49,0x56,0xd7,0x1f,0xa8,0x0f,0x24,0xf7,0x94,0x0e,0xe2,
0xf2,0x3d,0x12,0x3d,0x20,0xe7,0x23,0xbf,0x4b,0xf8,0x06,0x3c,0xad,0xf1,0x7d,0xe0,
0xa4,0x57,0xcc,0x61,0xdd,0xc7,0xe7,0xd0,0x2c,0x0c,0xf1,0x75,0x05,0x4d,0x5b,0xc6,
0x13,0x8d,0x77,0x0a,0x5a,0x05,0x9f,0x46,0x89,0xa4,0x35,0x4e,0xe3,0x2d,0x69,0x5b,
0xdc,0xfa,0x49,0x99,0xaf,0xb0,0x8c,0xc7,0x63,0x82,0xcf,0x79,0x64,0x18,0x57,0xe3,
0xbe,0x06,0xd2,0x52,0x7c,0xe1,0x7c,0xc9,0x31,0x3f,0x1f,0x11,0x04,0x38,0x5f,0xc0,
0xcc,0xb3,0x12,0x37,0x2d,0x85,0xd6,0x2d,0xd0,0x12,0x36,0x0f,0xbd,0x52,0x87,0xcc,
0xbc,0x0c,0x3f,0xbc,0xb4,0xb4,0x7c,0x98,0xf7,0xca,0x7c,0xb3,0xf2,0xda,0x3e,0x6a,
0xb8,0x98,0x51,0x47,0xc2,0x1f,0x01,0x91,0x6f,0x7a,0xde,0x6c,0x02,0xf8,0x01,0x4b,
0x17,0x52,0x63,0x11,0x59,0xc1,0x6e,0xe7,0xa9,0x21,0x1f,0xd6,0xdd,0x60,0x5a,0xb6,
0x17,0xfa,0x82,0x60,0x96,0xf3,0xf9,0x3b,0x8d,0x78,0xde,0xdf,0x5f,0x25,0xaa,0xf9,
0xdc,0x8b,0x01,0xc9,0x07,0x79,0xbe,0xde,0xe4,0x52,0xc7,0x3e,0xd7,0xbb,0xb5,0xcb,
0x8d,0xdf,0x43,0xae,0xb3,0x5c,0x21,0x35,0xe7,0xe7,0x2b,0x49,0x3e,0x67,0x08,0x63,
0x08,0xe3,0x5f,0xcb,0xd1,0x7a,0x35,0x1e,0xc2,0x0e,0xbe,0xb3,0x16,0x73,0x57,0xea,
0x7d,0x7c,0xb2,0xe3,0xa5,0x50,0xe5,0xfa,0x02,0x6f,0xb8,0x54,0x84,0xed,0xe7,0xdb,
0x3f,0x3d,0x7b,0x24,0x76,0xe1,0x68,0x63,0xfb,0x7d,0xca,0x0a,0x56,0xce,0x8c,0xca,
0x37,0x4c,0xde,0x50,0xb8,0x69,0x6c,0x1a,0xe9,0x06,0xb1,0x06,0x69,0xe0,0x77,0x86,
0x5c,0x13,0xcf,0x5e,0xf3,0xf5,0xf9,0x20,0x96,0xe3,0x4b,0x5e,0x40,0x4b,0xd8,0xa2,
0x6d,0xc9,0x8e,0x8d,0xf8,0xee,0xf9,0xf9,0x30,0xb0,0x1c,0x62,0xcc,0xd7,0x40,0xde,
0xbe,0x81,0x6c,0x23,0x17,0x1a,0xc0,0x99,0xf3,0xb1,0x3c,0xf2,0x15,0x92,0x6e,0x05,
0x7b,0x7c,0xe8,0xb9,0x14,0x3c,0xae,0x62,0xa3,0x2a,0x1a,0xa7,0xe9,0xb1,0xbf,0xab,
0xe0,0x8b,0xe7,0x50,0x2b,0x14,0x72,0x3d,0x03,0xde,0xa9,0xe6,0x2b,0xe0,0x3b,0x53,
0x6e,0x05,0xb8,0x63,0x61,0x28,0xcc,0x53,0xc8,0x2e,0xfb,0xc7,0xd5,0x8f,0x8f,0xbe,
0x39,0xaf,0xff,0xbd,0xfe,0x30,0x70,0xda,0x34,0x63,0xd8,0xce,0x2c,0x2b,0x65,0x48,
0x0f,0xa6,0x11,0x01,0xe7,0xfb,0x48,0xf2,0xc5,0x99,0x5c,0x60,0x73,0x1e,0x56,0xf0,
0xa5,0xbd,0xbe,0xc2,0xe3,0x8b,0x57,0xf3,0xb9,0x9d,0x09,0xf1,0xb9,0xf2,0x5e,0xf8,
0x20,0x76,0xe1,0xed,0x37,0xcd,0x7d,0x9f,0xbf,0x5d,0xdf,0x7c,0xa6,0x79,0x13,0x0d,
0x9e,0xb7,0x56,0x4c,0x69,0xc0,0x80,0xdb,0xc2,0x3e,0x12,0xaf,0x44,0xc1,0xe9,0x84,
0xc8,0xd9,0x79,0x44,0x71,0x7f,0xd2,0xe3,0x4b,0xd4,0xe4,0xe3,0xbe,0x79,0x6c,0x95,
0x7f,0xd2,0xd9,0x96,0x2e,0xf3,0x41,0xc2,0xe5,0x73,0x0a,0x5e,0x7c,0xd6,0x62,0x27,
0x62,0x03,0x17,0xde,0x32,0x0f,0xd7,0x73,0x10,0xd3,0xbc,0xbd,0x34,0x8d,0xb7,0xe4,
0xb1,0x82,0x0d,0xf1,0x8e,0x19,0xc0,0x61,0xa7,0x4d,0x3b,0x13,0x79,0xc7,0x26,0xef,
0x9b,0x30,0x33,0x54,0x29,0x4e,0x91,0x37,0xa5,0xc9,0xbc,0xb8,0x4a,0x30,0xf4,0xc1,
0x1d,0xfd,0xbc,0x01,0x7b,0x7c,0xd5,0xda,0xa0,0x6d,0x27,0x26,0x22,0xbe,0x94,0x4d,
0x9d,0x9d,0xc8,0xef,0x6f,0x16,0xef,0x34,0x2d,0xab,0x94,0xf4,0xda,0xeb,0xfe,0xf9,
0xfe,0xd8,0x89,0xee,0xf0,0x74,0x3d,0x3e,0xb4,0xde,0xd2,0x12,0x05,0x76,0xac,0x60,
0x34,0x20,0x07,0xd4,0xe8,0xf3,0x4d,0xce,0x87,0xfd,0x00,0x75,0x5e,0x01,0xc3,0xa4,
0xa6,0x96,0xfa,0x07,0x37,0xef,0x19,0x79,0x15,0xa0,0x3c,0x99,0xed,0x05,0x18,0x53,
0x5e,0x6c,0xc3,0x2d,0xff,0x96,0xc8,0x95,0xc8,0x4e,0xea,0x2f,0x5e,0xf5,0x0e,0xc6,
0x2e,0xbc,0xff,0x96,0xf9,0x71,0xec,0xe8,0x7c,0x6c,0xc7,0xfc,0xb8,0x68,0x7a,0xe6,
0xed,0x3b,0xa9,0xa4,0x2d,0xf8,0x72,0xc9,0xb9,0xe1,0x88,0xee,0xe3,0x3b,0x23,0x5e,
0x6c,0x00,0x8e,0x4e,0x9b,0xd8,0x6f,0x9a,0x62,0xa4,0xf2,0xec,0x7c,0x63,0xe5,0xe1,
0xc1,0xc4,0xf4,0xc7,0x83,0x51,0xe3,0xc4,0x8d,0xc1,0xf9,0xe9,0xda,0xd3,0xf8,0x4b,
0xa9,0x54,0x92,0x37,0x0a,0xb4,0xfb,0x4a,0x72,0x2e,0x1a,0xd1,0xc3,0xf4,0x81,0x12,
0xff,0xa6,0x09,0xff,0x91,0x7d,0x4a,0x10,0xf3,0x36,0x64,0xae,0x9a,0xbc,0x0a,0x10,
0xf6,0x8a,0x09,0x97,0x77,0x34,0x37,0x91,0xd8,0x96,0xd3,0xf8,0x92,0x7b,0xda,0x67,
0x9a,0xff,0xc4,0xf8,0x32,0x7d,0xe1,0xdf,0x75,0xe9,0x52,0xff,0xcd,0xb8,0x7c,0x85,
0x95,0x79,0x23,0x1a,0xe9,0xf6,0xa6,0x7d,0x08,0x4e,0xcc,0xea,0x84,0x03,0x11,0xf4,
0x1d,0xbd,0x4a,0x6e,0x91,0xd5,0x57,0xe4,0x75,0x7f,0x0a,0x77,0xb7,0x3c,0xaf,0x04,
0x97,0x6f,0x9b,0x4b,0x57,0xfe,0x74,0xe7,0x5f,0x87,0x97,0xb0,0x99,0xd5,0x10,0xbd,
0xfc,0xa7,0xa4,0x73,0x0a,0x03,0x8e,0x9d,0x8a,0x44,0xea,0x95,0xf6,0xdc,0xd5,0x11,
0x5f,0x4a,0xdd,0xb9,0x7f,0xd8,0x38,0x31,0x78,0xa7,0x1e,0x5c,0x7a,0x25,0x23,0xdd,
0x9e,0xa6,0x99,0x56,0x52,0xa6,0x71,0x29,0x1a,0x8d,0x9e,0xda,0xb1,0x12,0xf1,0xc6,
0x40,0x74,0x20,0xfa,0x46,0xf3,0x15,0x8b,0x5d,0xea,0x24,0x47,0x48,0xc6,0x52,0x75,
0x94,0xcb,0x61,0x64,0x77,0x3f,0x21,0x71,0x78,0x0d,0x23,0xa0,0x61,0x8c,0x10,0x23,
0xca,0x5b,0x8a,0x88,0xbe,0x1b,0x8d,0x5e,0x92,0x27,0xbd,0x2b,0xb8,0x79,0x57,0xae,
0x54,0xb8,0x2b,0x16,0xd1,0x2a,0xbd,0xeb,0xe6,0x50,0xb1,0x2b,0xee,0x7f,0x3f,0x4d,
0x1d,0xd0,0xff,0x72,0xf5,0x85,0xdd,0x5a,0xda,0x8b,0xea,0x18,0xa8,0x1c,0x22,0x4c,
0xd6,0x6e,0xab,0xcf,0x5f,0x19,0xab,0xb9,0x7c,0xdf,0xa1,0x38,0xc4,0x67,0xe5,0xea,
0x19,0xfb,0xf9,0xab,0x05,0xbc,0x42,0xa6,0xcc,0xc7,0x24,0x31,0x75,0xfa,0x3f,0x3e,
0x5c,0x2e,0x97,0x6f,0x48,0x56,0x65,0x3e,0xd9,0x04,0x7f,0x4e,0x2a,0xec,0xfc,0xd3,
0xb6,0x9f,0x1b,0x60,0xf5,0x12,0x3b,0x75,0xf8,0x96,0xe8,0xc8,0x6d,0xb7,0x3f,0x77,
0xc4,0x38,0xc0,0xf2,0x6f,0x7c,0xe7,0x9d,0xca,0xf3,0x4d,0x2f,0x57,0xca,0xa9,0x95,
0xab,0xd8,0x54,0xc1,0xb9,0x88,0x75,0x2e,0x3c,0x2f,0x59,0xf4,0xed,0x01,0xfe,0x53,
0x63,0x81,0x5c,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,
0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,
0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,
0xe9,0x67,0xac,0xff,0x03,0xdc,0x41,0xd4,0x19,0x76,0x96,0x00,0x00,
0x1f, 0x8b, 0x08, 0x08, 0x9c, 0x03, 0x94, 0x3f,
0x00, 0x03, 0x48, 0x6f, 0x6c, 0x7a, 0x48, 0x65,
0x72, 0x5f, 0x4c, 0x6f, 0x67, 0x6f, 0x5f, 0x33,
0x32, 0x30, 0x78, 0x32, 0x34, 0x30, 0x5f, 0x6d,
0x69, 0x74, 0x74, 0x65, 0x5f, 0x31, 0x36, 0x67,
0x2e, 0x62, 0x6d, 0x70, 0x00, 0xed, 0x9c, 0xfd,
0x6b, 0x1b, 0x47, 0x1a, 0xc7, 0x9f, 0xae, 0xa2,
0xe8, 0x8c, 0x4b, 0x42, 0xff, 0x03, 0xb1, 0x26,
0x2f, 0x26, 0xa5, 0x67, 0x2c, 0x52, 0xd7, 0xf8,
0xb8, 0x1e, 0xb1, 0xfb, 0x62, 0xc2, 0x81, 0xa9,
0xa3, 0xe6, 0x42, 0x43, 0x02, 0x21, 0xf1, 0x35,
0x57, 0x38, 0x4c, 0x8a, 0xbd, 0x71, 0x1d, 0xe2,
0xa3, 0x70, 0x89, 0x4c, 0x8f, 0x62, 0xdc, 0x4b,
0xed, 0x8d, 0x84, 0xfd, 0xd3, 0x71, 0x77, 0x0e,
0x94, 0x90, 0x50, 0x7c, 0x3a, 0x09, 0x29, 0xb4,
0xe4, 0x87, 0x9c, 0x85, 0xfc, 0x17, 0x14, 0x42,
0x8a, 0x31, 0xc5, 0x62, 0xd7, 0xb4, 0x04, 0x63,
0x24, 0x76, 0xee, 0x79, 0x66, 0x66, 0x57, 0x2b,
0xeb, 0xd5, 0x24, 0x75, 0x0b, 0x9d, 0x2f, 0x28,
0xfb, 0x36, 0x3b, 0xf3, 0xd9, 0x67, 0xe6, 0x79,
0x66, 0x76, 0x66, 0x9d, 0x13, 0xbf, 0x1f, 0xff,
0x1c, 0xb8, 0xc6, 0xf1, 0x77, 0x14, 0x7f, 0xbf,
0x7b, 0x01, 0x60, 0x13, 0xb7, 0x2f, 0xc0, 0x3e,
0x70, 0x15, 0x6b, 0x17, 0x3f, 0xbf, 0x5e, 0x7a,
0xe9, 0x25, 0xd0, 0x75, 0x1d, 0x22, 0x91, 0x08,
0x0c, 0x0c, 0x0c, 0x40, 0x34, 0x1a, 0x85, 0x91,
0x91, 0x11, 0x30, 0x0c, 0x03, 0x62, 0xb1, 0x18,
0x98, 0xa6, 0x09, 0x4b, 0x4b, 0x4b, 0x90, 0x4a,
0xa5, 0x20, 0x97, 0xcb, 0xc1, 0x37, 0xdf, 0x7c,
0x03, 0x96, 0x65, 0x01, 0x63, 0x8c, 0x7e, 0x4a,
0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
0x4a, 0x4a, 0x4a, 0x4a, 0xbf, 0x6c, 0x95, 0x72,
0xf9, 0x9f, 0x1a, 0xa1, 0xa1, 0xbe, 0x87, 0xd0,
0x4f, 0x8d, 0xd0, 0x50, 0x9b, 0x8a, 0xef, 0x99,
0xa4, 0xf8, 0xb8, 0x9c, 0xdd, 0xdf, 0xe1, 0xd8,
0xb4, 0x21, 0x3e, 0xb1, 0x87, 0xb2, 0xaa, 0x53,
0xd9, 0x55, 0xa7, 0x76, 0xc8, 0xb2, 0x5b, 0x48,
0xe9, 0xd8, 0x56, 0xd3, 0x8c, 0x2a, 0xf5, 0x34,
0x0c, 0x10, 0xc8, 0x72, 0xbe, 0xfb, 0x00, 0xbf,
0xa1, 0x3c, 0x70, 0x0b, 0x93, 0xec, 0x07, 0x9d,
0x6b, 0x75, 0x5b, 0x3f, 0xc6, 0x9c, 0xaf, 0x00,
0x12, 0xf7, 0xf4, 0x29, 0xa7, 0x5b, 0xb7, 0xd9,
0x6c, 0x47, 0x96, 0x6d, 0x77, 0x77, 0x32, 0xf6,
0xad, 0x7e, 0x8e, 0x15, 0xaf, 0x80, 0xb6, 0x3a,
0x7b, 0x88, 0x3d, 0x04, 0x71, 0xf3, 0xc6, 0x10,
0x40, 0x90, 0xe9, 0x3a, 0xe6, 0xf8, 0x8e, 0x3e,
0xc5, 0x66, 0x71, 0xe7, 0x89, 0xfe, 0x3a, 0x63,
0x9f, 0xe9, 0xbf, 0xc6, 0x47, 0xc0, 0x8b, 0x81,
0x38, 0x2b, 0xe9, 0x47, 0xb0, 0x14, 0xbd, 0xa3,
0x25, 0x52, 0xfa, 0x93, 0x1d, 0x02, 0xdc, 0x84,
0x20, 0xee, 0x68, 0x98, 0xef, 0x53, 0xfe, 0x67,
0x3a, 0x18, 0x70, 0xb8, 0xec, 0x2d, 0x68, 0x67,
0x5b, 0xf4, 0x10, 0x33, 0x30, 0xe5, 0xe0, 0x31,
0x9b, 0xd1, 0x16, 0xd9, 0x76, 0xb8, 0x8d, 0xb1,
0x27, 0x70, 0x0e, 0x7f, 0x00, 0x47, 0x46, 0x83,
0xec, 0x01, 0xdd, 0x7c, 0x9d, 0xb1, 0x2e, 0x20,
0x3e, 0x00, 0xcc, 0x67, 0x08, 0xce, 0xb3, 0x19,
0x58, 0xc4, 0x9c, 0x11, 0x6d, 0x16, 0x0e, 0x32,
0xe7, 0x0a, 0x2f, 0x8b, 0x95, 0x20, 0x68, 0x33,
0x07, 0xb4, 0x16, 0xf9, 0x0e, 0x75, 0x03, 0x1c,
0x20, 0x4e, 0x2d, 0x1a, 0xc6, 0xbc, 0xb1, 0x88,
0x4e, 0x73, 0x8c, 0xf3, 0x91, 0xfd, 0xec, 0x6d,
0xe4, 0xdb, 0x84, 0x80, 0x89, 0x25, 0x2f, 0x56,
0xf1, 0x39, 0x43, 0xd0, 0x33, 0x07, 0xd8, 0x34,
0x1e, 0xf7, 0x24, 0x47, 0xf1, 0x66, 0x7c, 0xb6,
0xd0, 0x87, 0x15, 0x7c, 0x59, 0xf6, 0xd8, 0xe5,
0x2b, 0x02, 0x4c, 0xcc, 0x0d, 0x69, 0xc4, 0xc7,
0x5a, 0xe7, 0xeb, 0x4d, 0x27, 0xc3, 0xf0, 0x22,
0xf1, 0xf5, 0x59, 0x33, 0xa0, 0x61, 0x2e, 0x58,
0x7e, 0x61, 0x88, 0xfd, 0x80, 0xb9, 0x99, 0xa6,
0xc9, 0xf9, 0x1e, 0x40, 0x1f, 0xbb, 0x5f, 0x93,
0xaf, 0x0b, 0x32, 0xf8, 0x0b, 0xb1, 0xb5, 0x3c,
0xde, 0xa0, 0xb1, 0xaf, 0x20, 0x30, 0x55, 0x34,
0xed, 0xda, 0x7c, 0x6b, 0x64, 0xb7, 0xf5, 0x8e,
0xdd, 0xf1, 0x15, 0x31, 0xd5, 0xd7, 0x10, 0xb2,
0x91, 0x8f, 0x8a, 0x00, 0xcc, 0xa5, 0x1d, 0xef,
0x2e, 0xb0, 0x62, 0x17, 0xbc, 0x4c, 0x09, 0x88,
0xef, 0x2e, 0x16, 0x83, 0x6c, 0x8b, 0xac, 0x8a,
0x2f, 0x0c, 0x96, 0xbd, 0x4e, 0xae, 0x45, 0x09,
0xc1, 0x19, 0xc5, 0x27, 0x45, 0x27, 0xa8, 0xcd,
0x77, 0x17, 0xae, 0x3b, 0xcc, 0xd9, 0xd8, 0x1d,
0x9f, 0x40, 0x08, 0xac, 0x6e, 0xe2, 0xd3, 0xb3,
0x52, 0x17, 0xac, 0x8e, 0x52, 0x76, 0xa4, 0xef,
0x09, 0x46, 0xf0, 0x3d, 0x80, 0x29, 0xaa, 0xf7,
0x6c, 0x2d, 0xfb, 0x61, 0x53, 0xea, 0xe2, 0xa1,
0x89, 0x1e, 0x2e, 0x8c, 0x4c, 0xa8, 0x1d, 0x7c,
0x07, 0x05, 0xdf, 0x90, 0xfc, 0xfb, 0xb1, 0x12,
0x85, 0xb2, 0xdd, 0xf0, 0x6d, 0x71, 0xbe, 0x00,
0xde, 0x34, 0x04, 0xd9, 0x51, 0x78, 0xdd, 0xe2,
0x61, 0x60, 0x9b, 0x0c, 0x26, 0xf8, 0x1e, 0x63,
0xfd, 0x62, 0xf6, 0xd5, 0x7c, 0x74, 0x12, 0xc9,
0x89, 0xaf, 0x70, 0x17, 0x9f, 0x10, 0xe8, 0x41,
0xea, 0xf0, 0x61, 0x85, 0x60, 0xbe, 0x8e, 0x6d,
0xef, 0x9a, 0x0f, 0x5b, 0xb6, 0x2d, 0xe2, 0x33,
0xfa, 0xdb, 0x90, 0xf0, 0xdb, 0x73, 0x0c, 0x63,
0x86, 0x26, 0xf9, 0xc8, 0x7f, 0x23, 0xc0, 0xf9,
0x58, 0x25, 0xdf, 0x63, 0x74, 0xab, 0x48, 0x18,
0xeb, 0xf7, 0x1d, 0xbc, 0xe7, 0x98, 0x00, 0xab,
0xe2, 0x13, 0xf5, 0xbb, 0x1d, 0x16, 0x39, 0x4f,
0xb9, 0xf5, 0xdb, 0x2a, 0xde, 0x32, 0x70, 0x17,
0xad, 0xe2, 0x73, 0x78, 0x31, 0xc4, 0xe7, 0xdc,
0xe5, 0xe7, 0x6a, 0xd8, 0xaf, 0xc8, 0x93, 0x87,
0xc8, 0xd8, 0x10, 0xca, 0xd4, 0xe1, 0x93, 0xf6,
0x93, 0x7c, 0x8b, 0xbb, 0x6b, 0x7f, 0x5b, 0x14,
0xb2, 0xce, 0x33, 0x5e, 0xbf, 0x16, 0xaf, 0xdf,
0xdf, 0x5a, 0xd6, 0x77, 0xbc, 0x9e, 0xbe, 0x86,
0xe0, 0x2a, 0xe7, 0x63, 0x8e, 0x95, 0x5b, 0xa1,
0xaa, 0xe4, 0x7c, 0x78, 0x6d, 0x1b, 0x2d, 0x6e,
0x7d, 0x4b, 0x0f, 0xc1, 0xac, 0x95, 0xd4, 0x50,
0x08, 0xdb, 0x7e, 0xe0, 0xba, 0xcd, 0xca, 0xf5,
0x3b, 0x45, 0xed, 0xd5, 0xc7, 0x37, 0x03, 0x07,
0x4b, 0x43, 0xf4, 0x77, 0x8c, 0x8f, 0x21, 0x5b,
0x22, 0xb4, 0x96, 0xf9, 0xee, 0x8a, 0xb0, 0xbc,
0x49, 0x55, 0x87, 0x4d, 0x64, 0x75, 0x06, 0x5e,
0xa1, 0x16, 0xb9, 0xc8, 0xab, 0x96, 0xa3, 0xb4,
0x8b, 0x84, 0x5e, 0xfb, 0x43, 0x2c, 0xf2, 0x28,
0x6e, 0x3f, 0x92, 0xc3, 0xf9, 0x8e, 0x51, 0x71,
0x5d, 0xf0, 0xba, 0xe0, 0x3b, 0xcf, 0xb8, 0xaf,
0x08, 0xbe, 0x03, 0xd4, 0x84, 0x0e, 0xa2, 0x73,
0xe3, 0xa5, 0x07, 0x80, 0xed, 0x0f, 0x56, 0x5b,
0x8f, 0x2f, 0x64, 0xf5, 0x04, 0xef, 0x47, 0x6c,
0x8c, 0x2d, 0x60, 0x3f, 0xa4, 0xec, 0xee, 0x63,
0x0e, 0xbc, 0x9c, 0x03, 0x82, 0x8f, 0xb2, 0x0a,
0xc3, 0xaa, 0xe4, 0x7b, 0x19, 0xf9, 0xb1, 0x92,
0xc9, 0xab, 0xa9, 0xb7, 0x75, 0xb0, 0xb2, 0x67,
0x84, 0xe1, 0x46, 0xe9, 0x66, 0x7e, 0x9f, 0xcd,
0x8d, 0x48, 0x7c, 0x9b, 0xd0, 0x46, 0x0f, 0x47,
0xf1, 0x25, 0xc3, 0x9c, 0x19, 0x40, 0xff, 0xc5,
0x2b, 0x25, 0x08, 0xb4, 0xda, 0xbf, 0xf5, 0xd8,
0x62, 0x1b, 0x9c, 0x18, 0xc2, 0x46, 0xeb, 0x74,
0x69, 0xd7, 0x1e, 0xe1, 0x76, 0x3b, 0x1a, 0x1d,
0xee, 0xc2, 0x6a, 0xe4, 0x7c, 0x57, 0x4e, 0xe7,
0x6e, 0xe1, 0xbe, 0xe4, 0x03, 0xea, 0x4c, 0x42,
0x26, 0xc0, 0x02, 0xdb, 0xd2, 0x26, 0xb1, 0xe2,
0x0f, 0x60, 0x60, 0x0e, 0x26, 0x96, 0xcf, 0xb2,
0x6f, 0x01, 0x7a, 0xe7, 0xce, 0x22, 0x9a, 0x76,
0x66, 0x8c, 0xac, 0x24, 0xec, 0x07, 0x3d, 0xb7,
0x00, 0x0d, 0xbb, 0x05, 0xc1, 0xdc, 0x3d, 0xde,
0xbf, 0x61, 0x51, 0x5d, 0x44, 0xdd, 0x82, 0x1e,
0x43, 0x20, 0x23, 0x38, 0x35, 0xd1, 0xd2, 0xc9,
0x9b, 0xbb, 0xb1, 0x05, 0x6f, 0xf1, 0xc6, 0x1c,
0x14, 0xf6, 0x1b, 0x85, 0xe3, 0x80, 0x19, 0x4a,
0xbe, 0x30, 0x26, 0xd5, 0x00, 0x0d, 0x9f, 0x21,
0x43, 0x0e, 0x03, 0xda, 0x06, 0x83, 0xdf, 0xa1,
0xae, 0x17, 0xb9, 0x9b, 0x84, 0xdb, 0x91, 0x8f,
0x92, 0x04, 0x6c, 0x97, 0x8f, 0xbb, 0x2d, 0x71,
0x1d, 0xc7, 0xce, 0x13, 0xb7, 0x1a, 0x15, 0xd6,
0xd7, 0x12, 0xdf, 0x03, 0x19, 0x8e, 0x37, 0xa1,
0x13, 0x8d, 0x82, 0x1d, 0x10, 0x0f, 0x26, 0x98,
0xad, 0xe4, 0xe3, 0xf6, 0xc3, 0x5a, 0x41, 0xa2,
0xf3, 0x92, 0x2f, 0xb4, 0x8e, 0x07, 0x0b, 0x33,
0x3c, 0x35, 0x0f, 0x1a, 0x21, 0x6c, 0x0c, 0x14,
0x5f, 0xf0, 0x41, 0x3e, 0x03, 0x7a, 0x0e, 0x00,
0x1a, 0x03, 0x65, 0xe8, 0xb9, 0x16, 0x91, 0xef,
0x74, 0x58, 0xd0, 0x7c, 0x49, 0x69, 0x2d, 0xe4,
0x6b, 0xc3, 0x9b, 0x5b, 0x74, 0x0f, 0x97, 0x6f,
0xcb, 0xb8, 0xf6, 0xdd, 0x3b, 0x87, 0xa6, 0x70,
0xcf, 0x59, 0xeb, 0xee, 0x98, 0xb4, 0xd8, 0xb6,
0x41, 0x9a, 0x60, 0x45, 0x63, 0x12, 0x87, 0x4d,
0x63, 0xdd, 0x91, 0x04, 0xf7, 0x4f, 0x9b, 0x2d,
0x4f, 0xd8, 0x63, 0x1d, 0x7d, 0xf6, 0xf6, 0x70,
0x07, 0x02, 0x38, 0x1b, 0x51, 0xfd, 0x38, 0x8e,
0x5b, 0x58, 0x61, 0x58, 0xef, 0xa1, 0xed, 0x97,
0xdd, 0xc7, 0x27, 0x31, 0x59, 0xe6, 0xbe, 0x7e,
0x1a, 0x8f, 0x96, 0x8d, 0x55, 0xb6, 0x6e, 0x2c,
0x2c, 0x77, 0x1f, 0xa7, 0x21, 0xa5, 0x3d, 0xa6,
0x1f, 0x5f, 0xc0, 0xad, 0x31, 0x59, 0xfc, 0x50,
0xbf, 0xd6, 0x1a, 0x1f, 0xf7, 0x7e, 0xa9, 0x62,
0x5a, 0x6c, 0x93, 0xa9, 0xea, 0x74, 0xfc, 0x9c,
0x23, 0xba, 0x3c, 0x56, 0x8a, 0x67, 0x91, 0x59,
0xa4, 0x2e, 0xa5, 0x56, 0xc5, 0xcd, 0xa9, 0x2c,
0x3f, 0x4c, 0x66, 0xc9, 0x35, 0xb2, 0xee, 0x69,
0xc6, 0x47, 0xac, 0xa9, 0x2c, 0x1f, 0xb6, 0xf2,
0xfb, 0x48, 0x76, 0xb1, 0x46, 0x11, 0x75, 0xf8,
0xda, 0x1c, 0x7b, 0x25, 0xdb, 0x5a, 0x62, 0xde,
0x7f, 0xb4, 0x20, 0x19, 0xa6, 0x9f, 0x87, 0x70,
0x14, 0xd0, 0x31, 0x2c, 0x7a, 0xf5, 0xda, 0x2a,
0x9a, 0x09, 0x6f, 0xdf, 0xb5, 0x5f, 0x33, 0x79,
0x7c, 0x49, 0x73, 0xb5, 0x61, 0xc2, 0xe6, 0xc2,
0xa8, 0x09, 0x20, 0xa2, 0x6a, 0x6d, 0x79, 0xf1,
0x59, 0x14, 0xbc, 0x3b, 0xbe, 0x51, 0x1e, 0xe7,
0x9f, 0x49, 0x3f, 0x70, 0xbe, 0xfa, 0xc5, 0x6e,
0xf9, 0xf8, 0x76, 0x6d, 0xbf, 0x99, 0x67, 0xe7,
0x73, 0x96, 0x87, 0x8f, 0x4f, 0x34, 0xa8, 0x05,
0xbf, 0xfd, 0x70, 0x38, 0xba, 0xe7, 0xf6, 0x6b,
0x2a, 0x9f, 0xf3, 0x38, 0x63, 0xd1, 0x96, 0xf8,
0xa2, 0x51, 0xf9, 0xc0, 0x85, 0xdc, 0x2e, 0x5f,
0x27, 0x9f, 0x51, 0xcd, 0x5f, 0x83, 0xb9, 0xac,
0xea, 0x17, 0x68, 0x25, 0x25, 0x25, 0xa5, 0x5f,
0x9e, 0xf6, 0x36, 0x42, 0x3f, 0x77, 0xd5, 0x9e,
0x51, 0x75, 0x0a, 0x49, 0xe3, 0x47, 0xd7, 0x55,
0xb3, 0xb9, 0xe2, 0x59, 0xab, 0xba, 0x53, 0x2a,
0xde, 0x82, 0x3d, 0x92, 0x3e, 0x10, 0x69, 0xa6,
0xee, 0x23, 0xf1, 0x1d, 0x80, 0xc5, 0xa1, 0xbd,
0xc2, 0x23, 0xc0, 0xa6, 0x8a, 0x44, 0xae, 0x55,
0xe0, 0xf1, 0x19, 0x8d, 0x3d, 0x93, 0xf6, 0xe6,
0x48, 0x63, 0x5d, 0x42, 0xc2, 0x41, 0xff, 0xb4,
0xf9, 0x95, 0xbd, 0xc4, 0x03, 0x38, 0x6c, 0x18,
0x7f, 0x6c, 0xd0, 0x48, 0x47, 0x46, 0x2e, 0x0e,
0xf4, 0xeb, 0x9f, 0x96, 0xf9, 0xd6, 0xf7, 0x16,
0x0f, 0xb4, 0xf7, 0x63, 0x8d, 0x74, 0x13, 0x09,
0x07, 0x22, 0x9d, 0xde, 0x88, 0xac, 0xa8, 0xef,
0x31, 0x1f, 0xec, 0x6f, 0xc8, 0x87, 0x32, 0x46,
0x06, 0xfa, 0x5f, 0x76, 0x0d, 0xf8, 0xf5, 0x9e,
0xf3, 0x35, 0x31, 0x20, 0x6a, 0xfc, 0x52, 0xff,
0xab, 0x72, 0xc4, 0xed, 0xe8, 0xe1, 0xbd, 0xe6,
0x6b, 0x6e, 0xc0, 0x98, 0x71, 0xb1, 0x5f, 0xce,
0x7a, 0xaf, 0x77, 0xef, 0x3d, 0x9f, 0x76, 0xb9,
0x19, 0xdf, 0xcd, 0xf1, 0x8b, 0xaf, 0xf1, 0x16,
0xb8, 0x1d, 0xe9, 0x6e, 0x94, 0x53, 0xcf, 0x84,
0x11, 0xfe, 0x31, 0x00, 0xe7, 0x9b, 0x03, 0xf6,
0x0f, 0x12, 0xdf, 0x53, 0x1f, 0x1f, 0xfd, 0x2f,
0x73, 0x74, 0x33, 0x6e, 0x25, 0x54, 0x67, 0x96,
0xb1, 0xe5, 0x2e, 0xef, 0xaa, 0xce, 0xaf, 0x68,
0xba, 0xee, 0xed, 0xbb, 0xe5, 0xc9, 0x03, 0xff,
0xd6, 0x4d, 0xe1, 0x65, 0xe7, 0xbf, 0xa1, 0x69,
0x05, 0xc7, 0xc6, 0xfb, 0x5f, 0x25, 0x0f, 0x59,
0x1b, 0xf6, 0xf8, 0xda, 0x32, 0x16, 0x2d, 0xd8,
0x41, 0x5b, 0x9a, 0x66, 0x85, 0x49, 0x21, 0xee,
0x43, 0xeb, 0x3c, 0xd7, 0x5e, 0xbc, 0x4a, 0x7a,
0x02, 0x67, 0xf2, 0x96, 0xd4, 0x9a, 0x7b, 0x6b,
0x2f, 0x9e, 0x7a, 0x40, 0xcf, 0xb3, 0x60, 0x59,
0x5b, 0x88, 0x34, 0xe9, 0xa6, 0x98, 0x11, 0xd9,
0xd2, 0x74, 0x5c, 0x27, 0x1e, 0x6e, 0xba, 0x37,
0x34, 0xad, 0xe0, 0xd8, 0x8d, 0x8b, 0x27, 0xc8,
0x3b, 0x6e, 0x95, 0xf9, 0xda, 0xb3, 0xf4, 0xfe,
0x4c, 0x19, 0xca, 0x55, 0xc2, 0x3e, 0xe9, 0xe2,
0x7c, 0xca, 0xb7, 0x37, 0x2b, 0x0e, 0xbe, 0x87,
0x5e, 0x2f, 0x74, 0x3e, 0x2d, 0xf3, 0x31, 0x3e,
0xed, 0x18, 0x5a, 0xa0, 0xf9, 0x05, 0xd0, 0xbc,
0xb9, 0x32, 0xe2, 0xcb, 0x8a, 0x39, 0xed, 0x84,
0x38, 0x14, 0x6a, 0xee, 0x21, 0xb1, 0xf1, 0x81,
0x4f, 0xb1, 0xe8, 0xb1, 0x53, 0x7a, 0x5d, 0xbe,
0x45, 0x46, 0x6f, 0xae, 0xb6, 0xc8, 0xb6, 0x37,
0xe3, 0xf1, 0x49, 0xc7, 0xb7, 0xec, 0x2d, 0xf7,
0xd6, 0xd7, 0x7c, 0x7c, 0xdb, 0x64, 0xbf, 0x6a,
0x3e, 0x2d, 0xed, 0xce, 0xed, 0x90, 0xf6, 0xb5,
0xc0, 0x77, 0xea, 0x24, 0x3e, 0xec, 0x78, 0x99,
0x8f, 0x32, 0x9a, 0xf1, 0xf1, 0x75, 0x62, 0x21,
0x85, 0x54, 0x3c, 0xed, 0xf0, 0x49, 0x51, 0xce,
0xb7, 0x92, 0x4a, 0xdd, 0x13, 0x7b, 0x56, 0x0a,
0xf5, 0xa5, 0x7b, 0xeb, 0x91, 0x4a, 0x3e, 0x78,
0x8f, 0x66, 0xc9, 0x31, 0x71, 0xaa, 0xcc, 0x17,
0xca, 0x33, 0xe6, 0x3d, 0x4f, 0x2b, 0x0d, 0xf0,
0xc6, 0xc8, 0x80, 0x5d, 0x9b, 0x2f, 0xcd, 0x67,
0xd9, 0x00, 0xcb, 0x72, 0xb6, 0x71, 0x44, 0x96,
0xe1, 0xcb, 0x31, 0x3d, 0x44, 0x95, 0x34, 0xcd,
0x59, 0xe8, 0xa1, 0x79, 0x48, 0x8b, 0xc6, 0x6a,
0xb7, 0x1a, 0xf1, 0x95, 0x30, 0xb1, 0x39, 0x2a,
0xb2, 0xc5, 0xb6, 0xd9, 0x6e, 0x33, 0x77, 0x09,
0xb9, 0x35, 0xbe, 0x9b, 0x23, 0xfd, 0xd8, 0xf6,
0x8d, 0x53, 0xe1, 0x7a, 0x7c, 0x18, 0x7f, 0x9c,
0xa4, 0x11, 0x33, 0x13, 0xb6, 0xb3, 0x56, 0xc1,
0xc7, 0x87, 0x67, 0x54, 0xfa, 0x5f, 0x77, 0xf2,
0xed, 0xf7, 0xf1, 0x15, 0x2a, 0xf9, 0x5e, 0xb4,
0x65, 0xab, 0x11, 0x6a, 0xee, 0x20, 0xe8, 0xc1,
0x36, 0x4b, 0xce, 0xf9, 0xf8, 0x32, 0xb4, 0xec,
0x84, 0x46, 0x48, 0xf3, 0x49, 0xb6, 0x10, 0xf2,
0xad, 0x63, 0x6c, 0x39, 0x1d, 0xe7, 0x6b, 0xa9,
0x47, 0xf0, 0xaa, 0xf0, 0xd7, 0x80, 0x99, 0xb1,
0x7d, 0x35, 0xc5, 0x9b, 0x7b, 0x46, 0xf0, 0x05,
0x91, 0xaf, 0x88, 0xdb, 0x93, 0x7c, 0x6a, 0xba,
0xfc, 0xd8, 0x78, 0xed, 0x15, 0xc6, 0x31, 0xbd,
0x27, 0x6a, 0xc1, 0x80, 0x17, 0x17, 0x1c, 0x73,
0x07, 0x1f, 0x4d, 0xb3, 0xff, 0x4a, 0xf0, 0xd1,
0xfa, 0x0f, 0x95, 0x19, 0x98, 0xc8, 0xd0, 0x5a,
0x0c, 0xf1, 0x49, 0x7f, 0x9d, 0x88, 0x5b, 0x4e,
0xe5, 0x98, 0x2c, 0x98, 0x17, 0xc6, 0x09, 0x66,
0x04, 0x5f, 0x5f, 0x35, 0xdf, 0x39, 0xbf, 0xfb,
0xe2, 0x13, 0x4d, 0xb7, 0xc0, 0xf7, 0xe7, 0x9a,
0x7c, 0xed, 0x16, 0x27, 0xc1, 0x31, 0xac, 0xc3,
0x43, 0x73, 0x5b, 0x82, 0xec, 0x7a, 0xe4, 0x0b,
0xaf, 0x7d, 0x07, 0xd1, 0x80, 0x4e, 0x05, 0x5f,
0x48, 0x56, 0x1e, 0xd9, 0xbc, 0x24, 0xf9, 0xdc,
0x7c, 0x89, 0xef, 0x09, 0x2d, 0xdc, 0x95, 0x4f,
0xa1, 0xb4, 0xe6, 0xf6, 0x8b, 0x8d, 0x9c, 0x2c,
0x99, 0x73, 0xd1, 0xb2, 0x7f, 0x64, 0x68, 0x05,
0x50, 0xb4, 0xe4, 0xa7, 0x10, 0x48, 0x08, 0x53,
0x60, 0xa1, 0x09, 0x9b, 0x3d, 0xe4, 0x55, 0x27,
0xf9, 0x34, 0x03, 0xcf, 0x54, 0xbc, 0x12, 0xd0,
0x52, 0xe7, 0xa6, 0xe4, 0x74, 0x6a, 0xf2, 0xb5,
0xd9, 0x6e, 0x76, 0xbb, 0xe0, 0xeb, 0x2b, 0xc5,
0xe7, 0x2e, 0xf9, 0xfa, 0x0f, 0xc6, 0x36, 0xb0,
0x4d, 0xd3, 0x8a, 0xc4, 0x16, 0x04, 0xd3, 0x72,
0xaa, 0x17, 0x02, 0x9f, 0xd0, 0xda, 0x74, 0x50,
0x36, 0x7d, 0x52, 0x0f, 0x56, 0xf9, 0xb6, 0x57,
0xd2, 0x19, 0x93, 0xcf, 0x98, 0x93, 0xab, 0xc7,
0x25, 0xdf, 0x31, 0x4b, 0x38, 0x90, 0xf9, 0x19,
0x5f, 0x65, 0x65, 0x6b, 0x3a, 0x35, 0xbf, 0xfb,
0xfe, 0x47, 0x6a, 0x81, 0x6f, 0x7c, 0xb0, 0x94,
0xfa, 0xcf, 0x58, 0x05, 0x9f, 0xf7, 0x4a, 0xc2,
0xbd, 0x44, 0xc4, 0x03, 0x8a, 0xb6, 0xa5, 0x0a,
0x3e, 0x6d, 0x22, 0x61, 0x39, 0xae, 0x7d, 0xb4,
0x1d, 0x0b, 0x2b, 0x2e, 0x1f, 0xd7, 0x9a, 0xe0,
0x73, 0x28, 0xca, 0x3b, 0xbb, 0xe7, 0x2b, 0xa6,
0x92, 0x8d, 0xf8, 0x64, 0x3c, 0x78, 0x8f, 0x56,
0x67, 0xfd, 0x7c, 0xd0, 0x1b, 0x77, 0xec, 0x2b,
0xbb, 0xe0, 0x13, 0x17, 0x36, 0x86, 0x76, 0xc9,
0x77, 0x79, 0x23, 0x95, 0x34, 0x3c, 0xbe, 0xd0,
0x17, 0x8c, 0x7f, 0x70, 0xe4, 0x58, 0x44, 0x12,
0x8a, 0x7b, 0x7c, 0x7d, 0xc4, 0x17, 0xf0, 0xf3,
0x05, 0x27, 0xd2, 0x9e, 0x87, 0x68, 0x93, 0xf2,
0x23, 0x25, 0xc7, 0xe2, 0x9d, 0x21, 0x9d, 0x6f,
0xcb, 0xcb, 0xe3, 0x2d, 0x11, 0x73, 0x28, 0x5b,
0xca, 0xb5, 0x6b, 0x57, 0x7c, 0xc6, 0xe5, 0x52,
0x2a, 0x79, 0x33, 0xe2, 0xf1, 0x51, 0x46, 0x05,
0xec, 0x94, 0xf2, 0x3b, 0xf8, 0xce, 0x52, 0xb4,
0x08, 0x2c, 0xd8, 0xbe, 0x06, 0xde, 0x63, 0x5a,
0x6c, 0xd4, 0xe5, 0x13, 0xb7, 0xf0, 0x2e, 0x2f,
0x63, 0x7b, 0x7c, 0x4e, 0x11, 0x8f, 0x1f, 0x4a,
0x3e, 0xca, 0xd6, 0x12, 0xe3, 0x84, 0xd6, 0xf9,
0x6e, 0x5e, 0x2e, 0xa5, 0x57, 0xe6, 0x87, 0xc3,
0x7e, 0xbe, 0x47, 0xa2, 0x95, 0x17, 0xc3, 0xc1,
0xdb, 0xb6, 0x1b, 0xef, 0xae, 0x93, 0xeb, 0x55,
0xf2, 0x05, 0xe7, 0xd2, 0x76, 0x49, 0x56, 0xd7,
0x1f, 0xa8, 0x0f, 0x24, 0xf7, 0x94, 0x0e, 0xe2,
0xf2, 0x3d, 0x12, 0x3d, 0x20, 0xe7, 0x23, 0xbf,
0x4b, 0xf8, 0x06, 0x3c, 0xad, 0xf1, 0x7d, 0xe0,
0xa4, 0x57, 0xcc, 0x61, 0xdd, 0xc7, 0xe7, 0xd0,
0x2c, 0x0c, 0xf1, 0x75, 0x05, 0x4d, 0x5b, 0xc6,
0x13, 0x8d, 0x77, 0x0a, 0x5a, 0x05, 0x9f, 0x46,
0x89, 0xa4, 0x35, 0x4e, 0xe3, 0x2d, 0x69, 0x5b,
0xdc, 0xfa, 0x49, 0x99, 0xaf, 0xb0, 0x8c, 0xc7,
0x63, 0x82, 0xcf, 0x79, 0x64, 0x18, 0x57, 0xe3,
0xbe, 0x06, 0xd2, 0x52, 0x7c, 0xe1, 0x7c, 0xc9,
0x31, 0x3f, 0x1f, 0x11, 0x04, 0x38, 0x5f, 0xc0,
0xcc, 0xb3, 0x12, 0x37, 0x2d, 0x85, 0xd6, 0x2d,
0xd0, 0x12, 0x36, 0x0f, 0xbd, 0x52, 0x87, 0xcc,
0xbc, 0x0c, 0x3f, 0xbc, 0xb4, 0xb4, 0x7c, 0x98,
0xf7, 0xca, 0x7c, 0xb3, 0xf2, 0xda, 0x3e, 0x6a,
0xb8, 0x98, 0x51, 0x47, 0xc2, 0x1f, 0x01, 0x91,
0x6f, 0x7a, 0xde, 0x6c, 0x02, 0xf8, 0x01, 0x4b,
0x17, 0x52, 0x63, 0x11, 0x59, 0xc1, 0x6e, 0xe7,
0xa9, 0x21, 0x1f, 0xd6, 0xdd, 0x60, 0x5a, 0xb6,
0x17, 0xfa, 0x82, 0x60, 0x96, 0xf3, 0xf9, 0x3b,
0x8d, 0x78, 0xde, 0xdf, 0x5f, 0x25, 0xaa, 0xf9,
0xdc, 0x8b, 0x01, 0xc9, 0x07, 0x79, 0xbe, 0xde,
0xe4, 0x52, 0xc7, 0x3e, 0xd7, 0xbb, 0xb5, 0xcb,
0x8d, 0xdf, 0x43, 0xae, 0xb3, 0x5c, 0x21, 0x35,
0xe7, 0xe7, 0x2b, 0x49, 0x3e, 0x67, 0x08, 0x63,
0x08, 0xe3, 0x5f, 0xcb, 0xd1, 0x7a, 0x35, 0x1e,
0xc2, 0x0e, 0xbe, 0xb3, 0x16, 0x73, 0x57, 0xea,
0x7d, 0x7c, 0xb2, 0xe3, 0xa5, 0x50, 0xe5, 0xfa,
0x02, 0x6f, 0xb8, 0x54, 0x84, 0xed, 0xe7, 0xdb,
0x3f, 0x3d, 0x7b, 0x24, 0x76, 0xe1, 0x68, 0x63,
0xfb, 0x7d, 0xca, 0x0a, 0x56, 0xce, 0x8c, 0xca,
0x37, 0x4c, 0xde, 0x50, 0xb8, 0x69, 0x6c, 0x1a,
0xe9, 0x06, 0xb1, 0x06, 0x69, 0xe0, 0x77, 0x86,
0x5c, 0x13, 0xcf, 0x5e, 0xf3, 0xf5, 0xf9, 0x20,
0x96, 0xe3, 0x4b, 0x5e, 0x40, 0x4b, 0xd8, 0xa2,
0x6d, 0xc9, 0x8e, 0x8d, 0xf8, 0xee, 0xf9, 0xf9,
0x30, 0xb0, 0x1c, 0x62, 0xcc, 0xd7, 0x40, 0xde,
0xbe, 0x81, 0x6c, 0x23, 0x17, 0x1a, 0xc0, 0x99,
0xf3, 0xb1, 0x3c, 0xf2, 0x15, 0x92, 0x6e, 0x05,
0x7b, 0x7c, 0xe8, 0xb9, 0x14, 0x3c, 0xae, 0x62,
0xa3, 0x2a, 0x1a, 0xa7, 0xe9, 0xb1, 0xbf, 0xab,
0xe0, 0x8b, 0xe7, 0x50, 0x2b, 0x14, 0x72, 0x3d,
0x03, 0xde, 0xa9, 0xe6, 0x2b, 0xe0, 0x3b, 0x53,
0x6e, 0x05, 0xb8, 0x63, 0x61, 0x28, 0xcc, 0x53,
0xc8, 0x2e, 0xfb, 0xc7, 0xd5, 0x8f, 0x8f, 0xbe,
0x39, 0xaf, 0xff, 0xbd, 0xfe, 0x30, 0x70, 0xda,
0x34, 0x63, 0xd8, 0xce, 0x2c, 0x2b, 0x65, 0x48,
0x0f, 0xa6, 0x11, 0x01, 0xe7, 0xfb, 0x48, 0xf2,
0xc5, 0x99, 0x5c, 0x60, 0x73, 0x1e, 0x56, 0xf0,
0xa5, 0xbd, 0xbe, 0xc2, 0xe3, 0x8b, 0x57, 0xf3,
0xb9, 0x9d, 0x09, 0xf1, 0xb9, 0xf2, 0x5e, 0xf8,
0x20, 0x76, 0xe1, 0xed, 0x37, 0xcd, 0x7d, 0x9f,
0xbf, 0x5d, 0xdf, 0x7c, 0xa6, 0x79, 0x13, 0x0d,
0x9e, 0xb7, 0x56, 0x4c, 0x69, 0xc0, 0x80, 0xdb,
0xc2, 0x3e, 0x12, 0xaf, 0x44, 0xc1, 0xe9, 0x84,
0xc8, 0xd9, 0x79, 0x44, 0x71, 0x7f, 0xd2, 0xe3,
0x4b, 0xd4, 0xe4, 0xe3, 0xbe, 0x79, 0x6c, 0x95,
0x7f, 0xd2, 0xd9, 0x96, 0x2e, 0xf3, 0x41, 0xc2,
0xe5, 0x73, 0x0a, 0x5e, 0x7c, 0xd6, 0x62, 0x27,
0x62, 0x03, 0x17, 0xde, 0x32, 0x0f, 0xd7, 0x73,
0x10, 0xd3, 0xbc, 0xbd, 0x34, 0x8d, 0xb7, 0xe4,
0xb1, 0x82, 0x0d, 0xf1, 0x8e, 0x19, 0xc0, 0x61,
0xa7, 0x4d, 0x3b, 0x13, 0x79, 0xc7, 0x26, 0xef,
0x9b, 0x30, 0x33, 0x54, 0x29, 0x4e, 0x91, 0x37,
0xa5, 0xc9, 0xbc, 0xb8, 0x4a, 0x30, 0xf4, 0xc1,
0x1d, 0xfd, 0xbc, 0x01, 0x7b, 0x7c, 0xd5, 0xda,
0xa0, 0x6d, 0x27, 0x26, 0x22, 0xbe, 0x94, 0x4d,
0x9d, 0x9d, 0xc8, 0xef, 0x6f, 0x16, 0xef, 0x34,
0x2d, 0xab, 0x94, 0xf4, 0xda, 0xeb, 0xfe, 0xf9,
0xfe, 0xd8, 0x89, 0xee, 0xf0, 0x74, 0x3d, 0x3e,
0xb4, 0xde, 0xd2, 0x12, 0x05, 0x76, 0xac, 0x60,
0x34, 0x20, 0x07, 0xd4, 0xe8, 0xf3, 0x4d, 0xce,
0x87, 0xfd, 0x00, 0x75, 0x5e, 0x01, 0xc3, 0xa4,
0xa6, 0x96, 0xfa, 0x07, 0x37, 0xef, 0x19, 0x79,
0x15, 0xa0, 0x3c, 0x99, 0xed, 0x05, 0x18, 0x53,
0x5e, 0x6c, 0xc3, 0x2d, 0xff, 0x96, 0xc8, 0x95,
0xc8, 0x4e, 0xea, 0x2f, 0x5e, 0xf5, 0x0e, 0xc6,
0x2e, 0xbc, 0xff, 0x96, 0xf9, 0x71, 0xec, 0xe8,
0x7c, 0x6c, 0xc7, 0xfc, 0xb8, 0x68, 0x7a, 0xe6,
0xed, 0x3b, 0xa9, 0xa4, 0x2d, 0xf8, 0x72, 0xc9,
0xb9, 0xe1, 0x88, 0xee, 0xe3, 0x3b, 0x23, 0x5e,
0x6c, 0x00, 0x8e, 0x4e, 0x9b, 0xd8, 0x6f, 0x9a,
0x62, 0xa4, 0xf2, 0xec, 0x7c, 0x63, 0xe5, 0xe1,
0xc1, 0xc4, 0xf4, 0xc7, 0x83, 0x51, 0xe3, 0xc4,
0x8d, 0xc1, 0xf9, 0xe9, 0xda, 0xd3, 0xf8, 0x4b,
0xa9, 0x54, 0x92, 0x37, 0x0a, 0xb4, 0xfb, 0x4a,
0x72, 0x2e, 0x1a, 0xd1, 0xc3, 0xf4, 0x81, 0x12,
0xff, 0xa6, 0x09, 0xff, 0x91, 0x7d, 0x4a, 0x10,
0xf3, 0x36, 0x64, 0xae, 0x9a, 0xbc, 0x0a, 0x10,
0xf6, 0x8a, 0x09, 0x97, 0x77, 0x34, 0x37, 0x91,
0xd8, 0x96, 0xd3, 0xf8, 0x92, 0x7b, 0xda, 0x67,
0x9a, 0xff, 0xc4, 0xf8, 0x32, 0x7d, 0xe1, 0xdf,
0x75, 0xe9, 0x52, 0xff, 0xcd, 0xb8, 0x7c, 0x85,
0x95, 0x79, 0x23, 0x1a, 0xe9, 0xf6, 0xa6, 0x7d,
0x08, 0x4e, 0xcc, 0xea, 0x84, 0x03, 0x11, 0xf4,
0x1d, 0xbd, 0x4a, 0x6e, 0x91, 0xd5, 0x57, 0xe4,
0x75, 0x7f, 0x0a, 0x77, 0xb7, 0x3c, 0xaf, 0x04,
0x97, 0x6f, 0x9b, 0x4b, 0x57, 0xfe, 0x74, 0xe7,
0x5f, 0x87, 0x97, 0xb0, 0x99, 0xd5, 0x10, 0xbd,
0xfc, 0xa7, 0xa4, 0x73, 0x0a, 0x03, 0x8e, 0x9d,
0x8a, 0x44, 0xea, 0x95, 0xf6, 0xdc, 0xd5, 0x11,
0x5f, 0x4a, 0xdd, 0xb9, 0x7f, 0xd8, 0x38, 0x31,
0x78, 0xa7, 0x1e, 0x5c, 0x7a, 0x25, 0x23, 0xdd,
0x9e, 0xa6, 0x99, 0x56, 0x52, 0xa6, 0x71, 0x29,
0x1a, 0x8d, 0x9e, 0xda, 0xb1, 0x12, 0xf1, 0xc6,
0x40, 0x74, 0x20, 0xfa, 0x46, 0xf3, 0x15, 0x8b,
0x5d, 0xea, 0x24, 0x47, 0x48, 0xc6, 0x52, 0x75,
0x94, 0xcb, 0x61, 0x64, 0x77, 0x3f, 0x21, 0x71,
0x78, 0x0d, 0x23, 0xa0, 0x61, 0x8c, 0x10, 0x23,
0xca, 0x5b, 0x8a, 0x88, 0xbe, 0x1b, 0x8d, 0x5e,
0x92, 0x27, 0xbd, 0x2b, 0xb8, 0x79, 0x57, 0xae,
0x54, 0xb8, 0x2b, 0x16, 0xd1, 0x2a, 0xbd, 0xeb,
0xe6, 0x50, 0xb1, 0x2b, 0xee, 0x7f, 0x3f, 0x4d,
0x1d, 0xd0, 0xff, 0x72, 0xf5, 0x85, 0xdd, 0x5a,
0xda, 0x8b, 0xea, 0x18, 0xa8, 0x1c, 0x22, 0x4c,
0xd6, 0x6e, 0xab, 0xcf, 0x5f, 0x19, 0xab, 0xb9,
0x7c, 0xdf, 0xa1, 0x38, 0xc4, 0x67, 0xe5, 0xea,
0x19, 0xfb, 0xf9, 0xab, 0x05, 0xbc, 0x42, 0xa6,
0xcc, 0xc7, 0x24, 0x31, 0x75, 0xfa, 0x3f, 0x3e,
0x5c, 0x2e, 0x97, 0x6f, 0x48, 0x56, 0x65, 0x3e,
0xd9, 0x04, 0x7f, 0x4e, 0x2a, 0xec, 0xfc, 0xd3,
0xb6, 0x9f, 0x1b, 0x60, 0xf5, 0x12, 0x3b, 0x75,
0xf8, 0x96, 0xe8, 0xc8, 0x6d, 0xb7, 0x3f, 0x77,
0xc4, 0x38, 0xc0, 0xf2, 0x6f, 0x7c, 0xe7, 0x9d,
0xca, 0xf3, 0x4d, 0x2f, 0x57, 0xca, 0xa9, 0x95,
0xab, 0xd8, 0x54, 0xc1, 0xb9, 0x88, 0x75, 0x2e,
0x3c, 0x2f, 0x59, 0xf4, 0xed, 0x01, 0xfe, 0x53,
0x63, 0x81, 0x5c, 0x49, 0x49, 0x49, 0x49, 0x49,
0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
0xe9, 0x67, 0xac, 0xff, 0x03, 0xdc, 0x41, 0xd4,
0x19, 0x76, 0x96, 0x00, 0x00,

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,77 +1,153 @@
0x1f,0x8b,0x08,0x08,0x7f,0x95,0xab,0x3f,0x00,0x03,0x50,0x50,0x43,0x5f,0x53,0x74,
0x61,0x72,0x74,0x6c,0x6f,0x67,0x6f,0x5f,0x31,0x36,0x67,0x2e,0x62,0x6d,0x70,0x00,
0xed,0x9b,0xcb,0x71,0xe3,0x38,0x10,0x86,0x7b,0xaa,0xe6,0xb6,0x87,0x2e,0x4f,0x08,
0x3e,0xed,0xdd,0x09,0x6c,0x6d,0xf9,0x3a,0x47,0xa7,0xe0,0x10,0xc6,0x29,0x38,0x82,
0xad,0x72,0x0a,0x4e,0xc1,0x29,0x38,0x05,0xa7,0xe0,0xea,0x0c,0x30,0x12,0x89,0x06,
0x1a,0x4f,0x3d,0x2c,0x01,0x9c,0xad,0xff,0xf3,0x48,0xa2,0x44,0x82,0xf8,0xd8,0x20,
0x5e,0x24,0xe7,0xdf,0x9f,0xbf,0xfe,0xa3,0x85,0x5f,0xbb,0xd7,0xdf,0xbb,0xd7,0x3f,
0xdf,0x88,0x64,0xf7,0xf9,0x8d,0xbe,0x93,0xf2,0xe3,0xaf,0xf5,0x65,0xb9,0xb9,0xb9,
0xa1,0xdb,0xdb,0x5b,0xba,0xbb,0xbb,0xa3,0xfb,0xfb,0x7b,0x7a,0x78,0x78,0xa0,0xc7,
0xc7,0x47,0x7a,0x7a,0x7a,0xa2,0xe7,0xe7,0x67,0x7a,0x79,0x79,0xa1,0xd7,0xd7,0x57,
0x7a,0x7b,0x7b,0xa3,0xf7,0xf7,0x77,0xfa,0xf8,0xf8,0xa0,0xcf,0xcf,0x4f,0x72,0xce,
0xed,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,
0x02,0xa1,0x8b,0x03,0x3f,0xf8,0xc1,0x0f,0x7e,0xf0,0xfb,0xb3,0xfd,0xf6,0x59,0xf3,
0x66,0xfd,0xc2,0xe6,0x7d,0xc5,0x49,0x7e,0xfb,0xcd,0x84,0x59,0xd8,0x1d,0x48,0x30,
0xc7,0x6f,0xd9,0x88,0x77,0x7f,0x3b,0x41,0xd7,0x0d,0xe1,0x14,0xbf,0x45,0x88,0x97,
0x7f,0xb2,0x38,0xb4,0x05,0x67,0xf8,0x2d,0x3a,0xb2,0x2a,0x2e,0xff,0xcb,0xb0,0x23,
0x38,0xc1,0x6f,0xd5,0xf3,0x21,0x5c,0xdf,0xa4,0x99,0x68,0xbc,0x9f,0x04,0xab,0xf5,
0x4d,0x5c,0x4f,0x70,0xb8,0xdf,0x6a,0xb2,0x48,0xad,0x7e,0xde,0xb2,0x51,0xc2,0xc3,
0xfd,0x28,0x37,0xf3,0xae,0x8d,0x64,0xa3,0xfd,0x24,0x96,0xa9,0xfa,0xf9,0x00,0xd6,
0xd3,0x8d,0xf6,0xb3,0xe1,0xd3,0x0f,0x31,0xe6,0x93,0xfd,0xba,0xd9,0x6d,0xc0,0x8f,
0x4c,0xc0,0x42,0xfc,0x7a,0x01,0x1c,0xeb,0x27,0xb6,0x5e,0xc4,0x4f,0x97,0xfe,0x3c,
0xcf,0x2f,0x0d,0x5f,0xee,0x57,0x4b,0x39,0xd4,0x2f,0x0b,0x5f,0x5c,0x68,0x17,0xf0,
0x58,0xbf,0x6a,0xd8,0xba,0x01,0x1c,0xea,0x97,0x15,0x6f,0xe1,0x27,0xae,0x60,0xa4,
0x5f,0x5e,0xbc,0x66,0xa9,0x59,0xc0,0x43,0xfd,0xea,0x51,0x33,0xab,0xca,0xb4,0x23,
0xfd,0x7a,0x35,0xbb,0x55,0xc0,0x98,0x5f,0xfe,0x39,0x7e,0xbb,0x21,0x8a,0x0e,0x9d,
0xd7,0x8d,0x74,0x58,0xef,0xc7,0xf7,0x93,0xdb,0xbf,0x5d,0x56,0x9c,0xf8,0x91,0xce,
0xdc,0x7c,0xa2,0xc9,0x7e,0xe4,0x0d,0xd4,0x4f,0x38,0x8e,0x9d,0xc3,0x8a,0x89,0x7e,
0x6c,0xfc,0x74,0xe6,0x46,0xce,0x2c,0xcc,0xf5,0x0b,0x33,0x36,0xeb,0x27,0x9b,0xf2,
0x5b,0xcf,0x37,0xbd,0x2e,0x54,0xfa,0x51,0x79,0x29,0xa1,0xea,0xb7,0xac,0x89,0x5f,
0xf9,0xb4,0x23,0xe9,0xc5,0xcf,0x2f,0x48,0x33,0x7e,0x79,0xea,0x4a,0xae,0x9c,0xad,
0x0a,0x87,0xb4,0x5b,0x32,0x0d,0xbc,0x6d,0xeb,0xcd,0x51,0x1f,0xe5,0x17,0x95,0x8e,
0xf5,0xe3,0xb0,0xc8,0xd9,0x3a,0xf3,0xfd,0x4b,0x7e,0x49,0xfd,0x50,0xb7,0xa2,0x7e,
0xb4,0xfc,0xd6,0x5d,0x67,0xc5,0x23,0x45,0x71,0x7d,0xc5,0x8f,0xf4,0x5a,0x41,0x6c,
0x5f,0xd6,0x98,0x9e,0xe4,0x97,0x9c,0xa0,0x14,0x5b,0xd0,0xa2,0x03,0x3f,0xd9,0x4f,
0x7c,0x36,0xa1,0x1a,0x84,0x33,0xdd,0x1d,0xac,0x1f,0x1c,0x96,0xfd,0xaf,0xc1,0x4f,
0x3f,0xc9,0x4e,0xac,0xcf,0xf2,0x2b,0xa7,0xe0,0x47,0x74,0xd5,0xb9,0x9f,0x1e,0x58,
0x38,0xd4,0xf0,0xdd,0x5c,0x37,0xa9,0xfa,0x1d,0xaa,0xbf,0xe7,0x21,0x66,0x9f,0xb6,
0x00,0xd4,0x94,0x5d,0x72,0x0c,0x62,0x44,0xe2,0x1a,0x3a,0xe4,0x57,0x36,0x12,0x7d,
0xf2,0x3a,0x9a,0x16,0xa7,0x3d,0x25,0x4d,0xce,0x13,0xfd,0x58,0x77,0xc3,0x59,0xa6,
0x72,0x19,0xbf,0xf3,0x09,0x7e,0xf1,0x42,0xb0,0xcd,0x48,0x74,0x13,0x73,0x29,0x67,
0x82,0x9f,0x5b,0x4b,0xf2,0x9a,0x7e,0xc2,0xbe,0x02,0x53,0xda,0xd8,0x2d,0x27,0x3d,
0xfb,0x2a,0xb9,0x16,0x97,0x6d,0x63,0x32,0x3f,0x93,0xa7,0x89,0xea,0x25,0xfc,0xa8,
0xe1,0xb7,0xef,0x34,0xc9,0xfa,0x49,0xdb,0xcf,0x5d,0xd3,0x8f,0xaa,0x7e,0xe2,0xf3,
0x26,0x13,0xe4,0xc2,0x8f,0xb5,0xa5,0xab,0xfa,0x91,0xc5,0x24,0xcc,0xfc,0xc2,0xfe,
0x3a,0x7e,0x12,0xfd,0xfc,0x4b,0x7b,0xe4,0xe8,0x47,0xd2,0xf6,0x0b,0xe1,0xba,0xbc,
0x1f,0x8b,0xcf,0x3a,0xf5,0xd3,0x89,0x47,0xf0,0x93,0x8a,0x9f,0xd3,0x9e,0xb6,0xea,
0x27,0x97,0xf0,0x93,0xa3,0xfd,0x78,0x96,0x1f,0x3b,0x56,0x3f,0x3d,0x65,0xfd,0x29,
0x68,0xeb,0x07,0xb9,0x8e,0x9f,0xe3,0x6b,0xfa,0xed,0x0d,0xcf,0xf1,0xe3,0xa8,0xd9,
0x6c,0xff,0xcc,0x6f,0x76,0xb5,0xf1,0x2b,0x0f,0x21,0xf5,0x5b,0xa2,0x47,0xd5,0xf2,
0x75,0x2e,0x94,0x6f,0x18,0x14,0xd6,0xfd,0x5c,0xee,0x97,0xe4,0xfc,0x05,0x3f,0x72,
0x99,0x9f,0x39,0x15,0xad,0x9f,0x56,0x69,0xeb,0xa7,0x3b,0xcf,0xca,0x33,0xef,0x7f,
0x35,0x9e,0xe7,0xfa,0x91,0xb8,0xd2,0x2f,0x6f,0x5f,0x8e,0xf0,0x2b,0xc6,0x2f,0x72,
0x21,0x3f,0x52,0x13,0xed,0x0f,0x54,0x26,0xb6,0xcf,0xc4,0x55,0xbf,0x38,0xca,0x8a,
0x3e,0x7e,0x29,0x0a,0x6b,0x07,0x73,0x8e,0x9f,0xf8,0xae,0xc2,0xfb,0xed,0xf1,0xb9,
0x2c,0xfd,0x9b,0x0e,0x89,0x25,0x9c,0x53,0xc6,0x8f,0x73,0xbf,0x38,0x90,0x16,0x33,
0x60,0x8d,0x53,0x99,0xba,0x9f,0x06,0xaa,0xee,0xc7,0xb9,0x1f,0x7b,0x3f,0x9f,0xd7,
0xb1,0x7e,0xe9,0x15,0x4c,0xe3,0xc9,0x1a,0x86,0x90,0xf2,0x14,0xbf,0x0e,0xbd,0xbb,
0xfb,0xa1,0xdf,0x0d,0xd9,0x54,0x1b,0xc7,0x6a,0xe6,0x97,0xf2,0xeb,0x53,0xf8,0xd9,
0xdd,0xe7,0x79,0xcb,0x0c,0xbf,0x6c,0x04,0x6f,0xf2,0x2a,0x32,0xa7,0xaf,0xf9,0xf9,
0x35,0xa6,0xb3,0x89,0xeb,0xd8,0x6e,0x91,0xfb,0x85,0x1e,0x62,0xd9,0xbf,0xa6,0x0f,
0x15,0xb2,0xf8,0xa1,0x4f,0x3b,0x16,0xdc,0xf4,0x2b,0x6e,0x3d,0x44,0xbf,0x46,0x0e,
0x76,0x05,0x9f,0xa2,0xd7,0x29,0x5f,0xae,0x5b,0x85,0xa5,0xc9,0xf7,0x67,0x8a,0xfb,
0x5b,0xf9,0x9d,0xae,0x4a,0xd2,0x9a,0x1f,0x2f,0xdb,0x5f,0xc1,0x2f,0x2f,0xe0,0xdc,
0xaf,0xd2,0xd0,0x0c,0xf5,0xcb,0x35,0x24,0x5d,0x38,0xf6,0xfa,0xee,0xf5,0xfc,0xb2,
0x02,0xce,0x6e,0x54,0xd7,0x52,0x8e,0xf5,0xcb,0x0a,0x58,0x92,0xcf,0x0d,0x3c,0x7f,
0xd0,0x3f,0xe8,0xea,0x11,0x8d,0xf5,0x4b,0x03,0x98,0x3c,0xc7,0xb1,0x89,0xe7,0x5f,
0xd2,0xe7,0x73,0xc4,0x7e,0x34,0xe6,0x05,0x83,0xfd,0xec,0xe3,0x61,0x49,0xaf,0xd1,
0x78,0x40,0x6c,0xb4,0x9f,0xef,0xdf,0x6d,0x4f,0xb2,0xa9,0xe7,0xc3,0xe2,0x8c,0x3c,
0x98,0x71,0xd4,0xde,0x82,0x9f,0x29,0xe1,0xf8,0xd6,0x1c,0xa3,0x8e,0xf7,0xf3,0x82,
0xec,0xd5,0xd6,0x09,0x5c,0x33,0xd1,0x04,0x3f,0x17,0x67,0xfe,0xea,0xd9,0x19,0x93,
0x4d,0xf0,0x73,0x7a,0x2d,0x4f,0x74,0xc2,0xd5,0xde,0x74,0x8a,0xdf,0x3a,0x2a,0xde,
0x4d,0xd7,0xf6,0x86,0xcd,0x2b,0x72,0x13,0xfd,0xd6,0x99,0x21,0x89,0x30,0x1d,0x78,
0x00,0x7f,0x96,0x5f,0x6d,0xea,0xb2,0x29,0xbf,0x23,0x81,0x1f,0xfc,0xe0,0x07,0x3f,
0xf8,0x6d,0xd3,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x8e,0xdf,
0xe3,0xb7,0xe4,0x39,0x76,0x96,0x00,0x00,
0x1f, 0x8b, 0x08, 0x08, 0x7f, 0x95, 0xab, 0x3f,
0x00, 0x03, 0x50, 0x50, 0x43, 0x5f, 0x53, 0x74,
0x61, 0x72, 0x74, 0x6c, 0x6f, 0x67, 0x6f, 0x5f,
0x31, 0x36, 0x67, 0x2e, 0x62, 0x6d, 0x70, 0x00,
0xed, 0x9b, 0xcb, 0x71, 0xe3, 0x38, 0x10, 0x86,
0x7b, 0xaa, 0xe6, 0xb6, 0x87, 0x2e, 0x4f, 0x08,
0x3e, 0xed, 0xdd, 0x09, 0x6c, 0x6d, 0xf9, 0x3a,
0x47, 0xa7, 0xe0, 0x10, 0xc6, 0x29, 0x38, 0x82,
0xad, 0x72, 0x0a, 0x4e, 0xc1, 0x29, 0x38, 0x05,
0xa7, 0xe0, 0xea, 0x0c, 0x30, 0x12, 0x89, 0x06,
0x1a, 0x4f, 0x3d, 0x2c, 0x01, 0x9c, 0xad, 0xff,
0xf3, 0x48, 0xa2, 0x44, 0x82, 0xf8, 0xd8, 0x20,
0x5e, 0x24, 0xe7, 0xdf, 0x9f, 0xbf, 0xfe, 0xa3,
0x85, 0x5f, 0xbb, 0xd7, 0xdf, 0xbb, 0xd7, 0x3f,
0xdf, 0x88, 0x64, 0xf7, 0xf9, 0x8d, 0xbe, 0x93,
0xf2, 0xe3, 0xaf, 0xf5, 0x65, 0xb9, 0xb9, 0xb9,
0xa1, 0xdb, 0xdb, 0x5b, 0xba, 0xbb, 0xbb, 0xa3,
0xfb, 0xfb, 0x7b, 0x7a, 0x78, 0x78, 0xa0, 0xc7,
0xc7, 0x47, 0x7a, 0x7a, 0x7a, 0xa2, 0xe7, 0xe7,
0x67, 0x7a, 0x79, 0x79, 0xa1, 0xd7, 0xd7, 0x57,
0x7a, 0x7b, 0x7b, 0xa3, 0xf7, 0xf7, 0x77, 0xfa,
0xf8, 0xf8, 0xa0, 0xcf, 0xcf, 0x4f, 0x72, 0xce,
0xed, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
0x02, 0xa1, 0x8b, 0x03, 0x3f, 0xf8, 0xc1, 0x0f,
0x7e, 0xf0, 0xfb, 0xb3, 0xfd, 0xf6, 0x59, 0xf3,
0x66, 0xfd, 0xc2, 0xe6, 0x7d, 0xc5, 0x49, 0x7e,
0xfb, 0xcd, 0x84, 0x59, 0xd8, 0x1d, 0x48, 0x30,
0xc7, 0x6f, 0xd9, 0x88, 0x77, 0x7f, 0x3b, 0x41,
0xd7, 0x0d, 0xe1, 0x14, 0xbf, 0x45, 0x88, 0x97,
0x7f, 0xb2, 0x38, 0xb4, 0x05, 0x67, 0xf8, 0x2d,
0x3a, 0xb2, 0x2a, 0x2e, 0xff, 0xcb, 0xb0, 0x23,
0x38, 0xc1, 0x6f, 0xd5, 0xf3, 0x21, 0x5c, 0xdf,
0xa4, 0x99, 0x68, 0xbc, 0x9f, 0x04, 0xab, 0xf5,
0x4d, 0x5c, 0x4f, 0x70, 0xb8, 0xdf, 0x6a, 0xb2,
0x48, 0xad, 0x7e, 0xde, 0xb2, 0x51, 0xc2, 0xc3,
0xfd, 0x28, 0x37, 0xf3, 0xae, 0x8d, 0x64, 0xa3,
0xfd, 0x24, 0x96, 0xa9, 0xfa, 0xf9, 0x00, 0xd6,
0xd3, 0x8d, 0xf6, 0xb3, 0xe1, 0xd3, 0x0f, 0x31,
0xe6, 0x93, 0xfd, 0xba, 0xd9, 0x6d, 0xc0, 0x8f,
0x4c, 0xc0, 0x42, 0xfc, 0x7a, 0x01, 0x1c, 0xeb,
0x27, 0xb6, 0x5e, 0xc4, 0x4f, 0x97, 0xfe, 0x3c,
0xcf, 0x2f, 0x0d, 0x5f, 0xee, 0x57, 0x4b, 0x39,
0xd4, 0x2f, 0x0b, 0x5f, 0x5c, 0x68, 0x17, 0xf0,
0x58, 0xbf, 0x6a, 0xd8, 0xba, 0x01, 0x1c, 0xea,
0x97, 0x15, 0x6f, 0xe1, 0x27, 0xae, 0x60, 0xa4,
0x5f, 0x5e, 0xbc, 0x66, 0xa9, 0x59, 0xc0, 0x43,
0xfd, 0xea, 0x51, 0x33, 0xab, 0xca, 0xb4, 0x23,
0xfd, 0x7a, 0x35, 0xbb, 0x55, 0xc0, 0x98, 0x5f,
0xfe, 0x39, 0x7e, 0xbb, 0x21, 0x8a, 0x0e, 0x9d,
0xd7, 0x8d, 0x74, 0x58, 0xef, 0xc7, 0xf7, 0x93,
0xdb, 0xbf, 0x5d, 0x56, 0x9c, 0xf8, 0x91, 0xce,
0xdc, 0x7c, 0xa2, 0xc9, 0x7e, 0xe4, 0x0d, 0xd4,
0x4f, 0x38, 0x8e, 0x9d, 0xc3, 0x8a, 0x89, 0x7e,
0x6c, 0xfc, 0x74, 0xe6, 0x46, 0xce, 0x2c, 0xcc,
0xf5, 0x0b, 0x33, 0x36, 0xeb, 0x27, 0x9b, 0xf2,
0x5b, 0xcf, 0x37, 0xbd, 0x2e, 0x54, 0xfa, 0x51,
0x79, 0x29, 0xa1, 0xea, 0xb7, 0xac, 0x89, 0x5f,
0xf9, 0xb4, 0x23, 0xe9, 0xc5, 0xcf, 0x2f, 0x48,
0x33, 0x7e, 0x79, 0xea, 0x4a, 0xae, 0x9c, 0xad,
0x0a, 0x87, 0xb4, 0x5b, 0x32, 0x0d, 0xbc, 0x6d,
0xeb, 0xcd, 0x51, 0x1f, 0xe5, 0x17, 0x95, 0x8e,
0xf5, 0xe3, 0xb0, 0xc8, 0xd9, 0x3a, 0xf3, 0xfd,
0x4b, 0x7e, 0x49, 0xfd, 0x50, 0xb7, 0xa2, 0x7e,
0xb4, 0xfc, 0xd6, 0x5d, 0x67, 0xc5, 0x23, 0x45,
0x71, 0x7d, 0xc5, 0x8f, 0xf4, 0x5a, 0x41, 0x6c,
0x5f, 0xd6, 0x98, 0x9e, 0xe4, 0x97, 0x9c, 0xa0,
0x14, 0x5b, 0xd0, 0xa2, 0x03, 0x3f, 0xd9, 0x4f,
0x7c, 0x36, 0xa1, 0x1a, 0x84, 0x33, 0xdd, 0x1d,
0xac, 0x1f, 0x1c, 0x96, 0xfd, 0xaf, 0xc1, 0x4f,
0x3f, 0xc9, 0x4e, 0xac, 0xcf, 0xf2, 0x2b, 0xa7,
0xe0, 0x47, 0x74, 0xd5, 0xb9, 0x9f, 0x1e, 0x58,
0x38, 0xd4, 0xf0, 0xdd, 0x5c, 0x37, 0xa9, 0xfa,
0x1d, 0xaa, 0xbf, 0xe7, 0x21, 0x66, 0x9f, 0xb6,
0x00, 0xd4, 0x94, 0x5d, 0x72, 0x0c, 0x62, 0x44,
0xe2, 0x1a, 0x3a, 0xe4, 0x57, 0x36, 0x12, 0x7d,
0xf2, 0x3a, 0x9a, 0x16, 0xa7, 0x3d, 0x25, 0x4d,
0xce, 0x13, 0xfd, 0x58, 0x77, 0xc3, 0x59, 0xa6,
0x72, 0x19, 0xbf, 0xf3, 0x09, 0x7e, 0xf1, 0x42,
0xb0, 0xcd, 0x48, 0x74, 0x13, 0x73, 0x29, 0x67,
0x82, 0x9f, 0x5b, 0x4b, 0xf2, 0x9a, 0x7e, 0xc2,
0xbe, 0x02, 0x53, 0xda, 0xd8, 0x2d, 0x27, 0x3d,
0xfb, 0x2a, 0xb9, 0x16, 0x97, 0x6d, 0x63, 0x32,
0x3f, 0x93, 0xa7, 0x89, 0xea, 0x25, 0xfc, 0xa8,
0xe1, 0xb7, 0xef, 0x34, 0xc9, 0xfa, 0x49, 0xdb,
0xcf, 0x5d, 0xd3, 0x8f, 0xaa, 0x7e, 0xe2, 0xf3,
0x26, 0x13, 0xe4, 0xc2, 0x8f, 0xb5, 0xa5, 0xab,
0xfa, 0x91, 0xc5, 0x24, 0xcc, 0xfc, 0xc2, 0xfe,
0x3a, 0x7e, 0x12, 0xfd, 0xfc, 0x4b, 0x7b, 0xe4,
0xe8, 0x47, 0xd2, 0xf6, 0x0b, 0xe1, 0xba, 0xbc,
0x1f, 0x8b, 0xcf, 0x3a, 0xf5, 0xd3, 0x89, 0x47,
0xf0, 0x93, 0x8a, 0x9f, 0xd3, 0x9e, 0xb6, 0xea,
0x27, 0x97, 0xf0, 0x93, 0xa3, 0xfd, 0x78, 0x96,
0x1f, 0x3b, 0x56, 0x3f, 0x3d, 0x65, 0xfd, 0x29,
0x68, 0xeb, 0x07, 0xb9, 0x8e, 0x9f, 0xe3, 0x6b,
0xfa, 0xed, 0x0d, 0xcf, 0xf1, 0xe3, 0xa8, 0xd9,
0x6c, 0xff, 0xcc, 0x6f, 0x76, 0xb5, 0xf1, 0x2b,
0x0f, 0x21, 0xf5, 0x5b, 0xa2, 0x47, 0xd5, 0xf2,
0x75, 0x2e, 0x94, 0x6f, 0x18, 0x14, 0xd6, 0xfd,
0x5c, 0xee, 0x97, 0xe4, 0xfc, 0x05, 0x3f, 0x72,
0x99, 0x9f, 0x39, 0x15, 0xad, 0x9f, 0x56, 0x69,
0xeb, 0xa7, 0x3b, 0xcf, 0xca, 0x33, 0xef, 0x7f,
0x35, 0x9e, 0xe7, 0xfa, 0x91, 0xb8, 0xd2, 0x2f,
0x6f, 0x5f, 0x8e, 0xf0, 0x2b, 0xc6, 0x2f, 0x72,
0x21, 0x3f, 0x52, 0x13, 0xed, 0x0f, 0x54, 0x26,
0xb6, 0xcf, 0xc4, 0x55, 0xbf, 0x38, 0xca, 0x8a,
0x3e, 0x7e, 0x29, 0x0a, 0x6b, 0x07, 0x73, 0x8e,
0x9f, 0xf8, 0xae, 0xc2, 0xfb, 0xed, 0xf1, 0xb9,
0x2c, 0xfd, 0x9b, 0x0e, 0x89, 0x25, 0x9c, 0x53,
0xc6, 0x8f, 0x73, 0xbf, 0x38, 0x90, 0x16, 0x33,
0x60, 0x8d, 0x53, 0x99, 0xba, 0x9f, 0x06, 0xaa,
0xee, 0xc7, 0xb9, 0x1f, 0x7b, 0x3f, 0x9f, 0xd7,
0xb1, 0x7e, 0xe9, 0x15, 0x4c, 0xe3, 0xc9, 0x1a,
0x86, 0x90, 0xf2, 0x14, 0xbf, 0x0e, 0xbd, 0xbb,
0xfb, 0xa1, 0xdf, 0x0d, 0xd9, 0x54, 0x1b, 0xc7,
0x6a, 0xe6, 0x97, 0xf2, 0xeb, 0x53, 0xf8, 0xd9,
0xdd, 0xe7, 0x79, 0xcb, 0x0c, 0xbf, 0x6c, 0x04,
0x6f, 0xf2, 0x2a, 0x32, 0xa7, 0xaf, 0xf9, 0xf9,
0x35, 0xa6, 0xb3, 0x89, 0xeb, 0xd8, 0x6e, 0x91,
0xfb, 0x85, 0x1e, 0x62, 0xd9, 0xbf, 0xa6, 0x0f,
0x15, 0xb2, 0xf8, 0xa1, 0x4f, 0x3b, 0x16, 0xdc,
0xf4, 0x2b, 0x6e, 0x3d, 0x44, 0xbf, 0x46, 0x0e,
0x76, 0x05, 0x9f, 0xa2, 0xd7, 0x29, 0x5f, 0xae,
0x5b, 0x85, 0xa5, 0xc9, 0xf7, 0x67, 0x8a, 0xfb,
0x5b, 0xf9, 0x9d, 0xae, 0x4a, 0xd2, 0x9a, 0x1f,
0x2f, 0xdb, 0x5f, 0xc1, 0x2f, 0x2f, 0xe0, 0xdc,
0xaf, 0xd2, 0xd0, 0x0c, 0xf5, 0xcb, 0x35, 0x24,
0x5d, 0x38, 0xf6, 0xfa, 0xee, 0xf5, 0xfc, 0xb2,
0x02, 0xce, 0x6e, 0x54, 0xd7, 0x52, 0x8e, 0xf5,
0xcb, 0x0a, 0x58, 0x92, 0xcf, 0x0d, 0x3c, 0x7f,
0xd0, 0x3f, 0xe8, 0xea, 0x11, 0x8d, 0xf5, 0x4b,
0x03, 0x98, 0x3c, 0xc7, 0xb1, 0x89, 0xe7, 0x5f,
0xd2, 0xe7, 0x73, 0xc4, 0x7e, 0x34, 0xe6, 0x05,
0x83, 0xfd, 0xec, 0xe3, 0x61, 0x49, 0xaf, 0xd1,
0x78, 0x40, 0x6c, 0xb4, 0x9f, 0xef, 0xdf, 0x6d,
0x4f, 0xb2, 0xa9, 0xe7, 0xc3, 0xe2, 0x8c, 0x3c,
0x98, 0x71, 0xd4, 0xde, 0x82, 0x9f, 0x29, 0xe1,
0xf8, 0xd6, 0x1c, 0xa3, 0x8e, 0xf7, 0xf3, 0x82,
0xec, 0xd5, 0xd6, 0x09, 0x5c, 0x33, 0xd1, 0x04,
0x3f, 0x17, 0x67, 0xfe, 0xea, 0xd9, 0x19, 0x93,
0x4d, 0xf0, 0x73, 0x7a, 0x2d, 0x4f, 0x74, 0xc2,
0xd5, 0xde, 0x74, 0x8a, 0xdf, 0x3a, 0x2a, 0xde,
0x4d, 0xd7, 0xf6, 0x86, 0xcd, 0x2b, 0x72, 0x13,
0xfd, 0xd6, 0x99, 0x21, 0x89, 0x30, 0x1d, 0x78,
0x00, 0x7f, 0x96, 0x5f, 0x6d, 0xea, 0xb2, 0x29,
0xbf, 0x23, 0x81, 0x1f, 0xfc, 0xe0, 0x07, 0x3f,
0xf8, 0x6d, 0xd3, 0x0f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x8e, 0xdf,
0xe3, 0xb7, 0xe4, 0x39, 0x76, 0x96, 0x00, 0x00,

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1007,6 +1007,7 @@ gr_cpci_ax2000 sparc leon3 - gaisler
gr_ep2s60 sparc leon3 - gaisler
grsim sparc leon3 - gaisler
gr_xc3s_1500 sparc leon3 - gaisler
coreboot-x86 x86 x86 coreboot chromebook-x86 coreboot coreboot:SYS_TEXT_BASE=0xFC0000
eNET x86 x86 eNET - sc520 eNET:SYS_TEXT_BASE=0x38040000
eNET_SRAM x86 x86 eNET - sc520 eNET:SYS_TEXT_BASE=0x19000000
# Target ARCH CPU Board name Vendor SoC Options

@ -127,12 +127,12 @@ static int do_spi_flash_probe(int argc, char * const argv[])
static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,
size_t len, const char *buf, char *cmp_buf, size_t *skipped)
{
debug("offset=%#x, sector_size=%#x, len=%#x\n",
debug("offset=%#x, sector_size=%#x, len=%#zx\n",
offset, flash->sector_size, len);
if (spi_flash_read(flash, offset, len, cmp_buf))
return "read";
if (memcmp(cmp_buf, buf, len) == 0) {
debug("Skip region %x size %x: no change\n",
debug("Skip region %x size %zx: no change\n",
offset, len);
*skipped += len;
return NULL;

@ -212,7 +212,7 @@ int serial_printf(const char *fmt, ...)
/* For this to work, printbuffer must be larger than
* anything we ever want to print.
*/
i = vsprintf(printbuffer, fmt, args);
i = vscnprintf(printbuffer, sizeof(printbuffer), fmt, args);
va_end(args);
serial_puts(printbuffer);
@ -281,7 +281,7 @@ int fprintf(int file, const char *fmt, ...)
/* For this to work, printbuffer must be larger than
* anything we ever want to print.
*/
i = vsprintf(printbuffer, fmt, args);
i = vscnprintf(printbuffer, sizeof(printbuffer), fmt, args);
va_end(args);
/* Send to desired file */
@ -434,7 +434,7 @@ int printf(const char *fmt, ...)
/* For this to work, printbuffer must be larger than
* anything we ever want to print.
*/
i = vsprintf(printbuffer, fmt, args);
i = vscnprintf(printbuffer, sizeof(printbuffer), fmt, args);
va_end(args);
/* Print the string */
@ -455,7 +455,7 @@ int vprintf(const char *fmt, va_list args)
/* For this to work, printbuffer must be larger than
* anything we ever want to print.
*/
i = vsprintf(printbuffer, fmt, args);
i = vscnprintf(printbuffer, sizeof(printbuffer), fmt, args);
/* Print the string */
puts(printbuffer);
@ -522,7 +522,7 @@ inline void dbg(const char *fmt, ...)
/* For this to work, printbuffer must be larger than
* anything we ever want to print.
*/
i = vsprintf(printbuffer, fmt, args);
i = vsnprintf(printbuffer, sizeof(printbuffer), fmt, args);
va_end(args);
if ((screen + sizeof(screen) - 1 - cursor)

@ -651,7 +651,6 @@ int mvgbe_initialize(bd_t *bis)
struct mvgbe_device *dmvgbe;
struct eth_device *dev;
int devnum;
char *s;
u8 used_ports[MAX_MVGBE_DEVS] = CONFIG_MVGBE_PORTS;
for (devnum = 0; devnum < MAX_MVGBE_DEVS; devnum++) {
@ -706,16 +705,13 @@ error1:
/* must be less than NAMESIZE (16) */
sprintf(dev->name, "egiga%d", devnum);
/* Extract the MAC address from the environment */
switch (devnum) {
case 0:
dmvgbe->regs = (void *)MVGBE0_BASE;
s = "ethaddr";
break;
#if defined(MVGBE1_BASE)
case 1:
dmvgbe->regs = (void *)MVGBE1_BASE;
s = "eth1addr";
break;
#endif
default: /* this should never happen */
@ -724,25 +720,6 @@ error1:
return -1;
}
while (!eth_getenv_enetaddr(s, dev->enetaddr)) {
/* Generate Private MAC addr if not set */
dev->enetaddr[0] = 0x02;
dev->enetaddr[1] = 0x50;
dev->enetaddr[2] = 0x43;
#if defined (CONFIG_SKIP_LOCAL_MAC_RANDOMIZATION)
/* Generate fixed lower MAC half using devnum */
dev->enetaddr[3] = 0;
dev->enetaddr[4] = 0;
dev->enetaddr[5] = devnum;
#else
/* Generate random lower MAC half */
dev->enetaddr[3] = get_random_hex();
dev->enetaddr[4] = get_random_hex();
dev->enetaddr[5] = get_random_hex();
#endif
eth_setenv_enetaddr(s, dev->enetaddr);
}
dev->init = (void *)mvgbe_init;
dev->halt = (void *)mvgbe_halt;
dev->send = (void *)mvgbe_send;

@ -32,9 +32,20 @@ static struct phy_driver KSZ804_driver = {
.shutdown = &genphy_shutdown,
};
static struct phy_driver KS8721_driver = {
.name = "Micrel KS8721BL",
.uid = 0x221610,
.mask = 0xfffff0,
.features = PHY_BASIC_FEATURES,
.config = &genphy_config,
.startup = &genphy_startup,
.shutdown = &genphy_shutdown,
};
int phy_micrel_init(void)
{
phy_register(&KSZ804_driver);
phy_register(&KS8721_driver);
return 0;
}

@ -876,7 +876,7 @@ do_fat_read (const char *filename, void *buffer, unsigned long maxsize,
while (1) {
int i;
debug("FAT read sect=%d, clust_size=%d, DIRENTSPERBLOCK=%d\n",
debug("FAT read sect=%d, clust_size=%d, DIRENTSPERBLOCK=%zd\n",
cursect, mydata->clust_size, DIRENTSPERBLOCK);
if (disk_read(cursect,

@ -733,16 +733,7 @@ void uuid_str_to_bin(const char *uuid, unsigned char *out);
int uuid_str_valid(const char *uuid);
/* lib/vsprintf.c */
ulong simple_strtoul(const char *cp,char **endp,unsigned int base);
int strict_strtoul(const char *cp, unsigned int base, unsigned long *res);
unsigned long long simple_strtoull(const char *cp,char **endp,unsigned int base);
long simple_strtol(const char *cp,char **endp,unsigned int base);
void panic(const char *fmt, ...)
__attribute__ ((format (__printf__, 1, 2), noreturn));
int sprintf(char * buf, const char *fmt, ...)
__attribute__ ((format (__printf__, 2, 3)));
int vsprintf(char *buf, const char *fmt, va_list args);
char *simple_itoa(ulong i);
#include <vsprintf.h>
/* lib/strmhz.c */
char * strmhz(char *buf, unsigned long hz);

@ -0,0 +1,225 @@
/*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2008
* Graeme Russ, graeme.russ@gmail.com.
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#include <asm/ibmpc.h>
/*
* board/config.h - configuration options, board specific
*/
#ifndef __CONFIG_H
#define __CONFIG_H
/*
* High Level Configuration Options
* (easy to change)
*/
#define CONFIG_SYS_COREBOOT
#undef CONFIG_SHOW_BOOT_PROGRESS
#define CONFIG_LAST_STAGE_INIT
/*-----------------------------------------------------------------------
* Watchdog Configuration
*/
#undef CONFIG_WATCHDOG
#undef CONFIG_HW_WATCHDOG
/*-----------------------------------------------------------------------
* Real Time Clock Configuration
*/
#define CONFIG_RTC_MC146818
#define CONFIG_SYS_ISA_IO_BASE_ADDRESS 0
/*-----------------------------------------------------------------------
* Serial Configuration
*/
#define CONFIG_SERIAL_MULTI
#define CONFIG_CONS_INDEX 1
#define CONFIG_SYS_NS16550
#define CONFIG_SYS_NS16550_SERIAL
#define CONFIG_SYS_NS16550_REG_SIZE 1
#define CONFIG_SYS_NS16550_CLK 1843200
#define CONFIG_BAUDRATE 9600
#define CONFIG_SYS_BAUDRATE_TABLE {300, 600, 1200, 2400, 4800, \
9600, 19200, 38400, 115200}
#define CONFIG_SYS_NS16550_COM1 UART0_BASE
#define CONFIG_SYS_NS16550_COM2 UART1_BASE
#define CONFIG_SYS_NS16550_PORT_MAPPED
/* max. 1 IDE bus */
#define CONFIG_SYS_IDE_MAXBUS 1
/* max. 1 drive per IDE bus */
#define CONFIG_SYS_IDE_MAXDEVICE (CONFIG_SYS_IDE_MAXBUS * 1)
#define CONFIG_SYS_ATA_BASE_ADDR CONFIG_SYS_ISA_IO_BASE_ADDRESS
#define CONFIG_SYS_ATA_IDE0_OFFSET 0x01f0
#define CONFIG_SYS_ATA_IDE1_OFFSET 0x0170
#define CONFIG_SYS_ATA_DATA_OFFSET 0
#define CONFIG_SYS_ATA_REG_OFFSET 0
#define CONFIG_SYS_ATA_ALT_OFFSET 0x200
#define CONFIG_SUPPORT_VFAT
/************************************************************
* ATAPI support (experimental)
************************************************************/
#define CONFIG_ATAPI
/************************************************************
* DISK Partition support
************************************************************/
#define CONFIG_DOS_PARTITION
#define CONFIG_MAC_PARTITION
#define CONFIG_ISO_PARTITION /* Experimental */
/*-----------------------------------------------------------------------
* Video Configuration
*/
#undef CONFIG_VIDEO
#undef CONFIG_CFB_CONSOLE
/*-----------------------------------------------------------------------
* Command line configuration.
*/
#include <config_cmd_default.h>
#define CONFIG_CMD_BDI
#define CONFIG_CMD_BOOTD
#define CONFIG_CMD_CONSOLE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_ECHO
#undef CONFIG_CMD_FLASH
#define CONFIG_CMD_FPGA
#define CONFIG_CMD_IMI
#undef CONFIG_CMD_IMLS
#define CONFIG_CMD_IRQ
#define CONFIG_CMD_ITEST
#define CONFIG_CMD_LOADB
#define CONFIG_CMD_LOADS
#define CONFIG_CMD_MEMORY
#define CONFIG_CMD_MISC
#define CONFIG_CMD_NET
#undef CONFIG_CMD_NFS
#define CONFIG_CMD_PCI
#define CONFIG_CMD_PING
#define CONFIG_CMD_RUN
#define CONFIG_CMD_SAVEENV
#define CONFIG_CMD_SETGETDCR
#define CONFIG_CMD_SOURCE
#define CONFIG_CMD_XIMG
#define CONFIG_CMD_IDE
#define CONFIG_CMD_FAT
#define CONFIG_CMD_EXT2
#define CONFIG_BOOTDELAY 2
#define CONFIG_BOOTARGS "root=/dev/mtdblock0 console=ttyS0,9600"
#if defined(CONFIG_CMD_KGDB)
#define CONFIG_KGDB_BAUDRATE 115200
#define CONFIG_KGDB_SER_INDEX 2
#endif
/*
* Miscellaneous configurable options
*/
#define CONFIG_SYS_LONGHELP
#define CONFIG_SYS_PROMPT "boot > "
#define CONFIG_SYS_CBSIZE 256
#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
sizeof(CONFIG_SYS_PROMPT) + \
16)
#define CONFIG_SYS_MAXARGS 16
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
#define CONFIG_SYS_MEMTEST_START 0x00100000
#define CONFIG_SYS_MEMTEST_END 0x01000000
#define CONFIG_SYS_LOAD_ADDR 0x100000
#define CONFIG_SYS_HZ 1000
#define CONFIG_SYS_X86_ISR_TIMER
/*-----------------------------------------------------------------------
* SDRAM Configuration
*/
#define CONFIG_NR_DRAM_BANKS 4
/* CONFIG_SYS_SDRAM_DRCTMCTL Overrides the following*/
#undef CONFIG_SYS_SDRAM_PRECHARGE_DELAY
#undef CONFIG_SYS_SDRAM_RAS_CAS_DELAY
#undef CONFIG_SYS_SDRAM_CAS_LATENCY_2T
#undef CONFIG_SYS_SDRAM_CAS_LATENCY_3T
/*-----------------------------------------------------------------------
* CPU Features
*/
#define CONFIG_SYS_GENERIC_TIMER
#define CONFIG_SYS_PCAT_INTERRUPTS
#define CONFIG_SYS_NUM_IRQS 16
/*-----------------------------------------------------------------------
* Memory organization:
* 32kB Stack
* 16kB Cache-As-RAM @ 0x19200000
* 256kB Monitor
* (128kB + Environment Sector Size) malloc pool
*/
#define CONFIG_SYS_STACK_SIZE (32 * 1024)
#define CONFIG_SYS_INIT_SP_ADDR (256 * 1024 + 16 * 1024)
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
#define CONFIG_SYS_MONITOR_LEN (256 * 1024)
#define CONFIG_SYS_MALLOC_LEN (0x20000 + 128 * 1024)
/* Address of temporary Global Data */
#define CONFIG_SYS_INIT_GD_ADDR (256 * 1024)
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
/*-----------------------------------------------------------------------
* FLASH configuration
*/
#define CONFIG_SYS_NO_FLASH
#undef CONFIG_FLASH_CFI_DRIVER
#define CONFIG_SYS_MAX_FLASH_SECT 1
#define CONFIG_SYS_MAX_FLASH_BANKS 1
/*-----------------------------------------------------------------------
* Environment configuration
*/
#define CONFIG_ENV_IS_NOWHERE
#define CONFIG_ENV_SIZE 0x01000
/*-----------------------------------------------------------------------
* PCI configuration
*/
#define CONFIG_PCI
/*-----------------------------------------------------------------------
* Network device support
*/
#define CONFIG_NET_MULTI
#endif /* __CONFIG_H */

@ -90,6 +90,7 @@ struct eth_device {
#endif
int (*write_hwaddr) (struct eth_device*);
struct eth_device *next;
int index;
void *priv;
};

@ -32,7 +32,7 @@ extern struct serial_device *default_serial_console(void);
defined(CONFIG_MB86R0x) || defined(CONFIG_MPC5xxx) || \
defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \
defined(CONFIG_MPC86xx) || defined(CONFIG_SYS_SC520) || \
defined(CONFIG_TEGRA2)
defined(CONFIG_TEGRA2) || defined(CONFIG_SYS_COREBOOT)
extern struct serial_device serial0_device;
extern struct serial_device serial1_device;
#if defined(CONFIG_SYS_NS16550_SERIAL)

@ -0,0 +1,181 @@
/*
* (C) Copyright 2000-2009
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#ifndef __VSPRINTF_H
#define __VSPRINTF_H
ulong simple_strtoul(const char *cp, char **endp, unsigned int base);
/**
* strict_strtoul - convert a string to an unsigned long strictly
* @param cp The string to be converted
* @param base The number base to use
* @param res The converted result value
* @return 0 if conversion is successful and *res is set to the converted
* value, otherwise it returns -EINVAL and *res is set to 0.
*
* strict_strtoul converts a string to an unsigned long only if the
* string is really an unsigned long string, any string containing
* any invalid char at the tail will be rejected and -EINVAL is returned,
* only a newline char at the tail is acceptible because people generally
* change a module parameter in the following way:
*
* echo 1024 > /sys/module/e1000/parameters/copybreak
*
* echo will append a newline to the tail.
*
* simple_strtoul just ignores the successive invalid characters and
* return the converted value of prefix part of the string.
*
* Copied this function from Linux 2.6.38 commit ID:
* 521cb40b0c44418a4fd36dc633f575813d59a43d
*
*/
int strict_strtoul(const char *cp, unsigned int base, unsigned long *res);
unsigned long long simple_strtoull(const char *cp, char **endp,
unsigned int base);
long simple_strtol(const char *cp, char **endp, unsigned int base);
void panic(const char *fmt, ...)
__attribute__ ((format (__printf__, 1, 2), noreturn));
/**
* Format a string and place it in a buffer
*
* @param buf The buffer to place the result into
* @param fmt The format string to use
* @param ... Arguments for the format string
*
* The function returns the number of characters written
* into @buf.
*
* See the vsprintf() documentation for format string extensions over C99.
*/
int sprintf(char *buf, const char *fmt, ...)
__attribute__ ((format (__printf__, 2, 3)));
/**
* Format a string and place it in a buffer (va_list version)
*
* @param buf The buffer to place the result into
* @param size The size of the buffer, including the trailing null space
* @param fmt The format string to use
* @param args Arguments for the format string
* @return the number of characters which have been written into
* the @buf not including the trailing '\0'. If @size is == 0 the function
* returns 0.
*
* If you're not already dealing with a va_list consider using scnprintf().
*
* See the vsprintf() documentation for format string extensions over C99.
*/
int vsprintf(char *buf, const char *fmt, va_list args);
char *simple_itoa(ulong i);
#ifdef CONFIG_SYS_VSNPRINTF
/**
* Format a string and place it in a buffer
*
* @param buf The buffer to place the result into
* @param size The size of the buffer, including the trailing null space
* @param fmt The format string to use
* @param ... Arguments for the format string
* @return the number of characters which would be
* generated for the given input, excluding the trailing null,
* as per ISO C99. If the return is greater than or equal to
* @size, the resulting string is truncated.
*
* See the vsprintf() documentation for format string extensions over C99.
*/
int snprintf(char *buf, size_t size, const char *fmt, ...)
__attribute__ ((format (__printf__, 3, 4)));
/**
* Format a string and place it in a buffer
*
* @param buf The buffer to place the result into
* @param size The size of the buffer, including the trailing null space
* @param fmt The format string to use
* @param ... Arguments for the format string
*
* The return value is the number of characters written into @buf not including
* the trailing '\0'. If @size is == 0 the function returns 0.
*
* See the vsprintf() documentation for format string extensions over C99.
*/
int scnprintf(char *buf, size_t size, const char *fmt, ...)
__attribute__ ((format (__printf__, 3, 4)));
/**
* Format a string and place it in a buffer (base function)
*
* @param buf The buffer to place the result into
* @param size The size of the buffer, including the trailing null space
* @param fmt The format string to use
* @param args Arguments for the format string
* @return The number characters which would be generated for the given
* input, excluding the trailing '\0', as per ISO C99. Note that fewer
* characters may be written if this number of characters is >= size.
*
* This function follows C99 vsnprintf, but has some extensions:
* %pS output the name of a text symbol
* %pF output the name of a function pointer
* %pR output the address range in a struct resource
*
* The function returns the number of characters which would be
* generated for the given input, excluding the trailing '\0',
* as per ISO C99.
*
* Call this function if you are already dealing with a va_list.
* You probably want snprintf() instead.
*/
int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
/**
* Format a string and place it in a buffer (va_list version)
*
* @param buf The buffer to place the result into
* @param size The size of the buffer, including the trailing null space
* @param fmt The format string to use
* @param args Arguments for the format string
* @return the number of characters which have been written into
* the @buf not including the trailing '\0'. If @size is == 0 the function
* returns 0.
*
* If you're not already dealing with a va_list consider using scnprintf().
*
* See the vsprintf() documentation for format string extensions over C99.
*/
int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
#else
/*
* Use macros to silently drop the size parameter. Note that the 'cn'
* versions are the same as the 'n' versions since the functions assume
* there is always enough buffer space when !CONFIG_SYS_VSNPRINTF
*/
#define snprintf(buf, size, fmt, args...) sprintf(buf, fmt, ##args)
#define scnprintf(buf, size, fmt, args...) sprintf(buf, fmt, ##args)
#define vsnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args)
#define vscnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args)
#endif /* CONFIG_SYS_VSNPRINTF */
#endif

@ -26,6 +26,9 @@
# define NUM_TYPE long long
#define noinline __attribute__((noinline))
/* some reluctance to put this into a new limits.h, so it is here */
#define INT_MAX ((int)(~0U>>1))
const char hex_asc[] = "0123456789abcdef";
#define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
#define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4]
@ -64,32 +67,6 @@ unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
return result;
}
/**
* strict_strtoul - convert a string to an unsigned long strictly
* @cp: The string to be converted
* @base: The number base to use
* @res: The converted result value
*
* strict_strtoul converts a string to an unsigned long only if the
* string is really an unsigned long string, any string containing
* any invalid char at the tail will be rejected and -EINVAL is returned,
* only a newline char at the tail is acceptible because people generally
* change a module parameter in the following way:
*
* echo 1024 > /sys/module/e1000/parameters/copybreak
*
* echo will append a newline to the tail.
*
* It returns 0 if conversion is successful and *res is set to the converted
* value, otherwise it returns -EINVAL and *res is set to 0.
*
* simple_strtoul just ignores the successive invalid characters and
* return the converted value of prefix part of the string.
*
* Copied this function from Linux 2.6.38 commit ID:
* 521cb40b0c44418a4fd36dc633f575813d59a43d
*
*/
int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
{
char *tail;
@ -291,7 +268,22 @@ static noinline char* put_dec(char *buf, unsigned NUM_TYPE num)
#define SMALL 32 /* Must be 32 == 0x20 */
#define SPECIAL 64 /* 0x */
static char *number(char *buf, unsigned NUM_TYPE num, int base, int size, int precision, int type)
#ifdef CONFIG_SYS_VSNPRINTF
/*
* Macro to add a new character to our output string, but only if it will
* fit. The macro moves to the next character position in the output string.
*/
#define ADDCH(str, ch) do { \
if ((str) < end) \
*(str) = (ch); \
++str; \
} while (0)
#else
#define ADDCH(str, ch) (*(str)++ = (ch))
#endif
static char *number(char *buf, char *end, unsigned NUM_TYPE num,
int base, int size, int precision, int type)
{
/* we are called with base 8, 10 or 16, only, thus don't need "G..." */
static const char digits[16] = "0123456789ABCDEF"; /* "GHIJKLMNOPQRSTUVWXYZ"; */
@ -353,37 +345,40 @@ static char *number(char *buf, unsigned NUM_TYPE num, int base, int size, int pr
precision = i;
/* leading space padding */
size -= precision;
if (!(type & (ZEROPAD+LEFT)))
while(--size >= 0)
*buf++ = ' ';
if (!(type & (ZEROPAD + LEFT))) {
while (--size >= 0)
ADDCH(buf, ' ');
}
/* sign */
if (sign)
*buf++ = sign;
ADDCH(buf, sign);
/* "0x" / "0" prefix */
if (need_pfx) {
*buf++ = '0';
ADDCH(buf, '0');
if (base == 16)
*buf++ = ('X' | locase);
ADDCH(buf, 'X' | locase);
}
/* zero or space padding */
if (!(type & LEFT)) {
char c = (type & ZEROPAD) ? '0' : ' ';
while (--size >= 0)
*buf++ = c;
ADDCH(buf, c);
}
/* hmm even more zero padding? */
while (i <= --precision)
*buf++ = '0';
ADDCH(buf, '0');
/* actual digits of result */
while (--i >= 0)
*buf++ = tmp[i];
ADDCH(buf, tmp[i]);
/* trailing space padding */
while (--size >= 0)
*buf++ = ' ';
ADDCH(buf, ' ');
return buf;
}
static char *string(char *buf, char *s, int field_width, int precision, int flags)
static char *string(char *buf, char *end, char *s, int field_width,
int precision, int flags)
{
int len, i;
@ -394,16 +389,16 @@ static char *string(char *buf, char *s, int field_width, int precision, int flag
if (!(flags & LEFT))
while (len < field_width--)
*buf++ = ' ';
ADDCH(buf, ' ');
for (i = 0; i < len; ++i)
*buf++ = *s++;
ADDCH(buf, *s++);
while (len < field_width--)
*buf++ = ' ';
ADDCH(buf, ' ');
return buf;
}
#ifdef CONFIG_CMD_NET
static char *mac_address_string(char *buf, u8 *addr, int field_width,
static char *mac_address_string(char *buf, char *end, u8 *addr, int field_width,
int precision, int flags)
{
char mac_addr[6 * 3]; /* (6 * 2 hex digits), 5 colons and trailing zero */
@ -417,10 +412,11 @@ static char *mac_address_string(char *buf, u8 *addr, int field_width,
}
*p = '\0';
return string(buf, mac_addr, field_width, precision, flags & ~SPECIAL);
return string(buf, end, mac_addr, field_width, precision,
flags & ~SPECIAL);
}
static char *ip6_addr_string(char *buf, u8 *addr, int field_width,
static char *ip6_addr_string(char *buf, char *end, u8 *addr, int field_width,
int precision, int flags)
{
char ip6_addr[8 * 5]; /* (8 * 4 hex digits), 7 colons and trailing zero */
@ -435,10 +431,11 @@ static char *ip6_addr_string(char *buf, u8 *addr, int field_width,
}
*p = '\0';
return string(buf, ip6_addr, field_width, precision, flags & ~SPECIAL);
return string(buf, end, ip6_addr, field_width, precision,
flags & ~SPECIAL);
}
static char *ip4_addr_string(char *buf, u8 *addr, int field_width,
static char *ip4_addr_string(char *buf, char *end, u8 *addr, int field_width,
int precision, int flags)
{
char ip4_addr[4 * 4]; /* (4 * 3 decimal digits), 3 dots and trailing zero */
@ -456,7 +453,8 @@ static char *ip4_addr_string(char *buf, u8 *addr, int field_width,
}
*p = '\0';
return string(buf, ip4_addr, field_width, precision, flags & ~SPECIAL);
return string(buf, end, ip4_addr, field_width, precision,
flags & ~SPECIAL);
}
#endif
@ -478,10 +476,12 @@ static char *ip4_addr_string(char *buf, u8 *addr, int field_width,
* function pointers are really function descriptors, which contain a
* pointer to the real address.
*/
static char *pointer(const char *fmt, char *buf, void *ptr, int field_width, int precision, int flags)
static char *pointer(const char *fmt, char *buf, char *end, void *ptr,
int field_width, int precision, int flags)
{
if (!ptr)
return string(buf, "(null)", field_width, precision, flags);
return string(buf, end, "(null)", field_width, precision,
flags);
#ifdef CONFIG_CMD_NET
switch (*fmt) {
@ -489,15 +489,18 @@ static char *pointer(const char *fmt, char *buf, void *ptr, int field_width, int
flags |= SPECIAL;
/* Fallthrough */
case 'M':
return mac_address_string(buf, ptr, field_width, precision, flags);
return mac_address_string(buf, end, ptr, field_width,
precision, flags);
case 'i':
flags |= SPECIAL;
/* Fallthrough */
case 'I':
if (fmt[1] == '6')
return ip6_addr_string(buf, ptr, field_width, precision, flags);
return ip6_addr_string(buf, end, ptr, field_width,
precision, flags);
if (fmt[1] == '4')
return ip4_addr_string(buf, ptr, field_width, precision, flags);
return ip4_addr_string(buf, end, ptr, field_width,
precision, flags);
flags &= ~SPECIAL;
break;
}
@ -507,27 +510,12 @@ static char *pointer(const char *fmt, char *buf, void *ptr, int field_width, int
field_width = 2*sizeof(void *);
flags |= ZEROPAD;
}
return number(buf, (unsigned long) ptr, 16, field_width, precision, flags);
return number(buf, end, (unsigned long)ptr, 16, field_width,
precision, flags);
}
/**
* vsprintf - Format a string and place it in a buffer
* @buf: The buffer to place the result into
* @fmt: The format string to use
* @args: Arguments for the format string
*
* This function follows C99 vsprintf, but has some extensions:
* %pS output the name of a text symbol
* %pF output the name of a function pointer
* %pR output the address range in a struct resource
*
* The function returns the number of characters written
* into @buf.
*
* Call this function if you are already dealing with a va_list.
* You probably want sprintf() instead.
*/
int vsprintf(char *buf, const char *fmt, va_list args)
static int vsnprintf_internal(char *buf, size_t size, const char *fmt,
va_list args)
{
unsigned NUM_TYPE num;
int base;
@ -542,12 +530,20 @@ int vsprintf(char *buf, const char *fmt, va_list args)
/* 'z' support added 23/7/1999 S.H. */
/* 'z' changed to 'Z' --davidm 1/25/99 */
/* 't' added for ptrdiff_t */
char *end = buf + size;
#ifdef CONFIG_SYS_VSNPRINTF
/* Make sure end is always >= buf - do we want this in U-Boot? */
if (end < buf) {
end = ((void *)-1);
size = end - buf;
}
#endif
str = buf;
for (; *fmt ; ++fmt) {
if (*fmt != '%') {
*str++ = *fmt;
ADDCH(str, *fmt);
continue;
}
@ -609,20 +605,22 @@ int vsprintf(char *buf, const char *fmt, va_list args)
switch (*fmt) {
case 'c':
if (!(flags & LEFT))
if (!(flags & LEFT)) {
while (--field_width > 0)
*str++ = ' ';
*str++ = (unsigned char) va_arg(args, int);
ADDCH(str, ' ');
}
ADDCH(str, (unsigned char) va_arg(args, int));
while (--field_width > 0)
*str++ = ' ';
ADDCH(str, ' ');
continue;
case 's':
str = string(str, va_arg(args, char *), field_width, precision, flags);
str = string(str, end, va_arg(args, char *),
field_width, precision, flags);
continue;
case 'p':
str = pointer(fmt+1, str,
str = pointer(fmt+1, str, end,
va_arg(args, void *),
field_width, precision, flags);
/* Skip all alphanumeric pointer suffixes */
@ -641,7 +639,7 @@ int vsprintf(char *buf, const char *fmt, va_list args)
continue;
case '%':
*str++ = '%';
ADDCH(str, '%');
continue;
/* integer number formats - set up the flags and "break" */
@ -662,9 +660,9 @@ int vsprintf(char *buf, const char *fmt, va_list args)
break;
default:
*str++ = '%';
ADDCH(str, '%');
if (*fmt)
*str++ = *fmt;
ADDCH(str, *fmt);
else
--fmt;
continue;
@ -688,23 +686,86 @@ int vsprintf(char *buf, const char *fmt, va_list args)
if (flags & SIGN)
num = (signed int) num;
}
str = number(str, num, base, field_width, precision, flags);
str = number(str, end, num, base, field_width, precision,
flags);
}
#ifdef CONFIG_SYS_VSNPRINTF
if (size > 0) {
ADDCH(str, '\0');
if (str > end)
end[-1] = '\0';
}
#else
*str = '\0';
#endif
/* the trailing null byte doesn't count towards the total */
return str-buf;
}
#ifdef CONFIG_SYS_VSNPRINTF
int vsnprintf(char *buf, size_t size, const char *fmt,
va_list args)
{
return vsnprintf_internal(buf, size, fmt, args);
}
int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
{
int i;
i = vsnprintf(buf, size, fmt, args);
if (likely(i < size))
return i;
if (size != 0)
return size - 1;
return 0;
}
int snprintf(char *buf, size_t size, const char *fmt, ...)
{
va_list args;
int i;
va_start(args, fmt);
i = vsnprintf(buf, size, fmt, args);
va_end(args);
return i;
}
int scnprintf(char *buf, size_t size, const char *fmt, ...)
{
va_list args;
int i;
va_start(args, fmt);
i = vscnprintf(buf, size, fmt, args);
va_end(args);
return i;
}
#endif /* CONFIG_SYS_VSNPRINT */
/**
* sprintf - Format a string and place it in a buffer
* @buf: The buffer to place the result into
* @fmt: The format string to use
* @...: Arguments for the format string
* Format a string and place it in a buffer (va_list version)
*
* @param buf The buffer to place the result into
* @param fmt The format string to use
* @param args Arguments for the format string
*
* The function returns the number of characters written
* into @buf.
* into @buf. Use vsnprintf() or vscnprintf() in order to avoid
* buffer overflows.
*
* See the vsprintf() documentation for format string extensions over C99.
* If you're not already dealing with a va_list consider using sprintf().
*/
int vsprintf(char *buf, const char *fmt, va_list args)
{
return vsnprintf_internal(buf, INT_MAX, fmt, args);
}
int sprintf(char * buf, const char *fmt, ...)
{
va_list args;

@ -127,7 +127,6 @@ struct eth_device *eth_get_dev_by_name(const char *devname)
struct eth_device *eth_get_dev_by_index(int index)
{
struct eth_device *dev, *target_dev;
int idx = 0;
if (!eth_devices)
return NULL;
@ -135,12 +134,11 @@ struct eth_device *eth_get_dev_by_index(int index)
dev = eth_devices;
target_dev = NULL;
do {
if (idx == index) {
if (dev->index == index) {
target_dev = dev;
break;
}
dev = dev->next;
idx++;
} while (dev != eth_devices);
return target_dev;
@ -148,24 +146,11 @@ struct eth_device *eth_get_dev_by_index(int index)
int eth_get_dev_index (void)
{
struct eth_device *dev;
int num = 0;
if (!eth_devices) {
return (-1);
}
for (dev = eth_devices; dev; dev = dev->next) {
if (dev == eth_current)
break;
++num;
}
if (dev) {
return (num);
if (!eth_current) {
return -1;
}
return (0);
return eth_current->index;
}
static void eth_current_changed(void)
@ -219,6 +204,7 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
int eth_register(struct eth_device *dev)
{
struct eth_device *d;
static int index = 0;
assert(strlen(dev->name) < NAMESIZE);
@ -233,14 +219,14 @@ int eth_register(struct eth_device *dev)
dev->state = ETH_STATE_INIT;
dev->next = eth_devices;
dev->index = index++;
return 0;
}
int eth_initialize(bd_t *bis)
{
int eth_number = 0;
int num_devices = 0;
eth_devices = NULL;
eth_current = NULL;
@ -281,7 +267,7 @@ int eth_initialize(bd_t *bis)
show_boot_progress (65);
do {
if (eth_number)
if (dev->index)
puts (", ");
printf("%s", dev->name);
@ -294,18 +280,18 @@ int eth_initialize(bd_t *bis)
if (strchr(dev->name, ' '))
puts("\nWarning: eth device name has a space!\n");
if (eth_write_hwaddr(dev, "eth", eth_number))
if (eth_write_hwaddr(dev, "eth", dev->index))
puts("\nWarning: failed to set MAC address\n");
eth_number++;
dev = dev->next;
num_devices++;
} while(dev != eth_devices);
eth_current_changed();
putc ('\n');
}
return eth_number;
return num_devices;
}
#ifdef CONFIG_MCAST_TFTP
@ -356,7 +342,6 @@ u32 ether_crc (size_t len, unsigned char const *p)
int eth_init(bd_t *bis)
{
int eth_number;
struct eth_device *old_current, *dev;
if (!eth_current) {
@ -365,16 +350,14 @@ int eth_init(bd_t *bis)
}
/* Sync environment with network devices */
eth_number = 0;
dev = eth_devices;
do {
uchar env_enetaddr[6];
if (eth_getenv_enetaddr_by_index("eth", eth_number,
if (eth_getenv_enetaddr_by_index("eth", dev->index,
env_enetaddr))
memcpy(dev->enetaddr, env_enetaddr, 6);
++eth_number;
dev = dev->next;
} while (dev != eth_devices);

@ -39,6 +39,7 @@
#include <sys/stat.h>
#include <u-boot/crc.h>
#include <version.h>
#define CRC_SIZE sizeof(uint32_t)
@ -59,6 +60,7 @@ static void usage(const char *exec_name)
"\t-b : the target is big endian (default is little endian)\n"
"\t-p <byte> : fill the image with <byte> bytes instead of "
"0xff bytes\n"
"\t-V : print version information and exit\n"
"\n"
"If the input file is \"-\", data is read from standard input\n",
exec_name);
@ -86,8 +88,11 @@ int main(int argc, char **argv)
prg = basename(argv[0]);
/* Turn off getopt()'s internal error message */
opterr = 0;
/* Parse the cmdline */
while ((option = getopt(argc, argv, "s:o:rbp:h")) != -1) {
while ((option = getopt(argc, argv, ":s:o:rbp:hV")) != -1) {
switch (option) {
case 's':
datasize = strtol(optarg, NULL, 0);
@ -112,6 +117,14 @@ int main(int argc, char **argv)
case 'h':
usage(prg);
return EXIT_SUCCESS;
case 'V':
printf("%s version %s\n", prg, PLAIN_VERSION);
return EXIT_SUCCESS;
case ':':
fprintf(stderr, "Missing argument for option -%c\n",
option);
usage(argv[0]);
return EXIT_FAILURE;
default:
fprintf(stderr, "Wrong option -%c\n", option);
usage(prg);
@ -122,7 +135,7 @@ int main(int argc, char **argv)
/* Check datasize and allocate the data */
if (datasize == 0) {
fprintf(stderr,
"Please specify the size of the envrionnment "
"Please specify the size of the environment "
"partition.\n");
usage(prg);
return EXIT_FAILURE;
@ -188,12 +201,12 @@ int main(int argc, char **argv)
ret = close(txt_fd);
}
/*
* The right test to do is "=>" (not ">") because of the additionnal
* The right test to do is "=>" (not ">") because of the additional
* ending \0. See below.
*/
if (filesize >= envsize) {
fprintf(stderr, "The input file is larger than the "
"envrionnment partition size\n");
"environment partition size\n");
return EXIT_FAILURE;
}
@ -202,7 +215,7 @@ int main(int argc, char **argv)
if (filebuf[fp] == '\n') {
if (fp == 0) {
/*
* Newline at the beggining of the file ?
* Newline at the beginning of the file ?
* Ignore it.
*/
continue;

Loading…
Cancel
Save